API REST para desenfocar rostros y matrículas en fotos

La Watermarkly Blur API detecta y desenfoca automáticamente matrículas y rostros en imágenes.

API para desenfocar rostros y matrículas en imágenes

Este servicio está completamente alojado en la infraestructura de AWS y garantiza la privacidad al no utilizar archivos de clientes para el entrenamiento de modelos de IA.
Utilizamos AWS Lambda, lo que nos permite manejar miles de solicitudes en paralelo de manera confiable y ofrecer el servicio en varias regiones del mundo.

Características

  • Detecta y desenfoca automáticamente matrículas y rostros en imágenes.
  • Permite reemplazar matrículas con el logo de su proyecto.
  • Opcionalmente redimensiona, recorta o convierte imágenes procesadas.
  • Soporta hasta 500 solicitudes por segundo.
  • Procesa imágenes en paralelo para un mejor rendimiento.
  • Tamaño máximo de imagen soportado: 6000x6000 píxeles.

Si necesita un procesamiento más rápido, soporte para imágenes más grandes o una tasa de solicitudes más alta, contáctenos en api-support@watermarkly.com.

La API le permite reemplazar matrículas con el logo de su empresa.

API para desenfocar rostros y matrículas en imágenes

Puntos de acceso de la API

Regiones

Actualmente, ofrecemos la API en dos regiones:

Puede utilizar el punto de acceso que le resulte más conveniente. Puede usar el segundo punto de acceso como respaldo en caso de que una región de AWS falle. Si necesita la API en otra región, háganoslo saber.

Métodos de solicitud

Puede enviar imágenes para su procesamiento mediante solicitudes GET o POST.
Si sus imágenes están disponibles públicamente, recomendamos el uso de solicitudes GET, ya que son un poco más rápidas que las solicitudes POST.

Desenfocar imagen con solicitud GET (Recomendado)

GET https://blur-api-eu1.watermarkly.com/blur/?url={image_url}

or

GET https://blur-api-us1.watermarkly.com/blur/?url={image_url}

El servicio descarga la imagen desde la image_url y la procesa.

Solicitud

  • Método: GET
  • Parámetros de consulta de URL:
    • url (Obligatorio): La URL completa de la imagen a procesar.
    • blur_intensity (Opcional): Un valor flotante entre 0.0 y 20.0 que ajusta la intensidad del desenfoque. Predeterminado: 1.0. 0.0 desactiva el desenfoque.
    • file_size (Opcional): Especifica el tamaño de archivo de salida deseado en bytes. El servicio intentará devolver una imagen que no supere este tamaño.
    • width (Opcional): Especifica el ancho de la imagen de salida deseada.
    • height (Opcional): Especifica la altura de la imagen de salida deseada.
    • format (Opcional): Especifica el formato de salida de la imagen. Valores posibles: JPEG, PNG, WEBP.
    • logo_url (Opcional): La URL de un archivo de logotipo para colocar en las matrículas. Puede ser una URL HTTP o una URL de datos. Asegúrese de que la URL esté correctamente codificada antes de enviarla como parámetro de solicitud.
    • logo_size (Opcional): Especifica el tamaño del logotipo como un número entre 0.1 y 1.0.
    • plate_screws (Opcional): Agrega tornillos a las matrículas. Solo funciona junto con el parámetro logo_url.

Respuesta

Respuesta exitosa: (HTTP Status: 200) El servicio devuelve la imagen procesada en uno de los siguientes formatos: JPEG, PNG, WEBP.

Respuesta de error: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Desenfocar imagen con solicitud POST

POST https://blur-api-eu1.watermarkly.com/blur/

or

POST https://blur-api-us1.watermarkly.com/blur/

Envía una imagen para su procesamiento.

Solicitud

  • Método: POST
  • Content-Type: application/octet-stream
  • Encabezados:
    • x-api-key: Su clave de API
  • Parámetros de consulta:
    • blur_intensity (Opcional): Un valor flotante entre 0.0 y 20.0 que ajusta la intensidad del desenfoque. Valor predeterminado: 1.0. Pasar 0.0 desactiva el desenfoque.
    • file_size (Opcional): Especifica el tamaño de archivo de salida deseado en bytes. El servicio intentará devolver una imagen que no supere este tamaño.
    • width (Opcional): Especifica el ancho deseado de la imagen de salida.
    • height (Opcional): Especifica la altura deseada de la imagen de salida.
    • format (Opcional): Especifica el formato de imagen de salida deseado. Valores posibles: JPEG, PNG, WEBP.
    • logo_url (Opcional): La URL de un archivo de logotipo para colocar en las matrículas. Puede ser una URL HTTP o una URL de datos. Asegúrese de que la URL esté correctamente escapada antes de enviarla como parámetro.
    • logo_size (Opcional): Especifica el tamaño del logotipo como un valor entre 0.1 y 1.0.
    • plate_screws (Opcional): Agrega tornillos a las matrículas. Solo funciona junto con el parámetro logo_url.

Respuesta

Respuesta exitosa: (HTTP Status: 200) El servicio devuelve la imagen procesada en uno de los siguientes formatos: JPEG, PNG, WEBP.

Respuesta de error: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Detalles del procesamiento

  • Las imágenes procesadas no se almacenan en nuestros servidores.
  • El servicio acepta imágenes en los formatos JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
  • Las imágenes AVIF y HEIF se convertirán a JPEG, a menos que se especifique otro formato.
  • Tamaño máximo de imagen de entrada:
    • Solicitudes GET: 20MB o 6000x6000 píxeles.
    • Solicitudes POST: 6MB o 6000x6000 píxeles.
  • Límites de la API:
    • 500 solicitudes en paralelo
    • 500 solicitudes por segundo
    • 100,000 solicitudes por día
  • Si necesita límites más altos, contáctenos en api-support@watermarkly.com.

Seguridad y privacidad

  • Las solicitudes a la API requieren autenticación mediante una clave de API.
  • Los archivos de los clientes no se utilizan para entrenar modelos de IA.
  • Todo el procesamiento se realiza en la infraestructura de AWS. Podemos implementar la API en una región de su elección sin costo adicional.

Ejemplos de uso

Python

import requests
import urllib.parse

API_KEY = 'your_api_key'
API_URL = 'https://blur-api-eu1.watermarkly.com/blur/'

input_path = ''       # Local image path
output_path = ''      # Local output path

# Blur image using POST request
with open(input_path, 'rb') as image_file:
    response = requests.post(API_URL, headers={'x-api-key': API_KEY}, data=image_file)
    if response.status_code == 429:
        # API rate limit exceeded, wait a little
        time.sleep(0.1)
        response = requests.post(API_URL, headers={'x-api-key': API_KEY}, data=image_file)
# Save the processed image locally
with open(output_path, 'wb') as f:
    f.write(response.content)


# Blur image using GET request
encoded_url = urllib.parse.quote("https://nikitin.io/eqe.jpg", safe='')
response = requests.get(API_URL + "?url=" + encoded_url, headers={'x-api-key': API_KEY})
# Save the response locally
with open(output_path, 'wb') as f:
    f.write(response.content)

NodeJS

import { promises as fs } from "node:fs";

const API_KEY = 'your_api_key';
const API_URL = 'https://blur-api-eu1.watermarkly.com/blur/';

// Helper function to pause execution for the given number of milliseconds
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

(async () => {
  // Blur image using POST request
  try {
    const inputPath = 'input_path_here';   // Replace with your actual input path
    const outputPath = 'output_path_here'; // Replace with your actual output path

    // Read image file as binary data asynchronously
    const imageData = await fs.readFile(inputPath);

    let response = await fetch(API_URL, {
      method: 'POST',
      headers: {
        'x-api-key': API_KEY,
        'Content-Type': 'application/octet-stream'
      },
      body: imageData
    });

    if (response.status === 429) {
      // API rate limit exceeded, wait a little
      await sleep(100); // sleep for 0.1 seconds
      response = await fetch(API_URL, {
        method: 'POST',
        headers: {
          'x-api-key': API_KEY,
          'Content-Type': 'application/octet-stream'
        },
        body: imageData
      });
    }
    // Save the processed image locally asynchronously
    const arrayBuffer = await response.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer);
    await fs.writeFile(outputPath, buffer);
  } catch (error) {
    console.error('Error during POST request:', error);
  }

  // Blur image using GET request
  try {
    const outputPath = 'output_path_here'; // Replace with your actual output path
    const encodedUrl = encodeURIComponent("https://nikitin.io/eqe.jpg"); // Encode URL
    const response = await fetch(`${API_URL}?url=${encodedUrl}`, {
      method: 'GET',
      headers: {
        'x-api-key': API_KEY
      }
    });
    // Save the response locally asynchronously
    const arrayBuffer = await response.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer);
    await fs.writeFile(outputPath, buffer);
  } catch (error) {
    console.error('Error during GET request:', error);
  }
})();