API REST para desfocar rostos e placas de veículos em fotos

A Watermarkly Blur API detecta e desfoca automaticamente placas de veículos e rostos em imagens.

API para desfocar rostos e placas de veículos em imagens

Este serviço é totalmente hospedado na infraestrutura da AWS e garante privacidade ao não usar arquivos de clientes para o treinamento de modelos de IA.
Usamos AWS Lambda, permitindo que lidemos com milhares de solicitações paralelas de forma confiável e ofereçamos o serviço em várias regiões do mundo.

Recursos

  • Detecta e desfoca automaticamente placas de veículos e rostos em imagens.
  • Permite substituir placas de veículos pelo logotipo do seu projeto.
  • Opcionalmente redimensiona, corta ou converte imagens processadas.
  • Suporta até 500 solicitações por segundo.
  • Processa imagens em paralelo para melhor desempenho.
  • Tamanho máximo de imagem suportado: 6000x6000 pixels.

Se precisar de um processamento mais rápido, suporte para imagens maiores ou uma taxa de solicitações mais alta, entre em contato pelo e-mail api-support@watermarkly.com.

A API permite substituir placas de veículos pelo logotipo da sua empresa.

API para desfocar rostos e placas de veículos em imagens

Endpoints da API

Regiões

Atualmente, fornecemos a API em duas regiões:

Você pode usar o endpoint mais conveniente para você. O segundo endpoint pode ser usado como alternativa caso uma região da AWS fique indisponível. Se precisar da API em outra região, informe-nos.

Métodos de solicitação

Você pode enviar imagens para processamento usando GET ou POST.
Se suas imagens estiverem publicamente acessíveis, recomendamos o uso de GET, pois é um pouco mais rápido do que POST.

Desfocar imagem usando solicitação 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}

O serviço baixa a imagem do image_url e a processa.

Solicitação

  • Método: GET
  • Parâmetros de consulta da URL:
    • url (Obrigatório): O URL completo da imagem a ser processada.
    • blur_intensity (Opcional): Um valor float entre 0.0 e 20.0 que ajusta a intensidade do desfoque. Padrão: 1.0. 0.0 desativa o desfoque.
    • file_size (Opcional): Especifica o tamanho desejado do arquivo de saída em bytes. O serviço tentará retornar uma imagem que não exceda esse tamanho.
    • width (Opcional): Especifica a largura desejada da imagem de saída.
    • height (Opcional): Especifica a altura desejada da imagem de saída.
    • format (Opcional): Especifica o formato da imagem de saída. Valores possíveis: JPEG, PNG, WEBP.
    • logo_url (Opcional): O URL de um arquivo de logotipo a ser colocado nas placas de veículos. Pode ser um URL HTTP ou um URL de dados. Certifique-se de que o URL esteja devidamente codificado antes de enviá-lo como um parâmetro de solicitação.
    • logo_size (Opcional): Especifica o tamanho do logotipo como um número entre 0.1 e 1.0.
    • plate_screws (Opcional): Adiciona parafusos às placas de veículos. Funciona apenas com o parâmetro logo_url.

Resposta

Resposta bem-sucedida: (HTTP Status: 200) O serviço retorna a imagem processada em um dos seguintes formatos: JPEG, PNG, WEBP.

Resposta de erro: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Desfocar imagem usando solicitação POST

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

or

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

Envia uma imagem para processamento.

Requisição

  • Método: POST
  • Content-Type: application/octet-stream
  • Cabeçalhos:
    • x-api-key: Sua chave de API
  • Parâmetros de consulta:
    • blur_intensity (Opcional): Um valor decimal entre 0.0 e 20.0 que ajusta a intensidade do desfoque. Padrão: 1.0. O valor 0.0 desativa o desfoque.
    • file_size (Opcional): Especifica o tamanho desejado do arquivo de saída em bytes. O serviço tentará retornar uma imagem que não ultrapasse esse tamanho.
    • width (Opcional): Especifica a largura desejada da imagem de saída.
    • height (Opcional): Especifica a altura desejada da imagem de saída.
    • format (Opcional): Especifica o formato da imagem de saída. Valores possíveis: JPEG, PNG, WEBP.
    • logo_url (Opcional): A URL de um arquivo de logotipo para ser colocado nas placas de veículos. Pode ser uma URL HTTP ou uma URL de dados. Certifique-se de que a URL esteja devidamente codificada antes de passá-la como um parâmetro.
    • logo_size (Opcional): Especifica o tamanho do logotipo como um valor entre 0.1 e 1.0.
    • plate_screws (Opcional): Adiciona parafusos às placas de veículos. Funciona apenas em conjunto com o parâmetro logo_url.

Resposta

Resposta bem-sucedida: (HTTP Status: 200) O serviço retorna a imagem processada em um dos seguintes formatos: JPEG, PNG, WEBP.

Resposta de erro: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Detalhes do Processamento

  • As imagens processadas não são armazenadas em nossos servidores.
  • O serviço aceita imagens nos formatos JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
  • As imagens AVIF e HEIF serão convertidas para JPEG, a menos que outro formato seja especificado.
  • Tamanho máximo de entrada da imagem:
    • Solicitações GET: 20MB ou 6000x6000 pixels.
    • Solicitações POST: 6MB ou 6000x6000 pixels.
  • Limites da API:
    • 500 solicitações paralelas
    • 500 solicitações por segundo
    • 100.000 solicitações por dia
  • Se precisar de limites maiores, entre em contato pelo e-mail api-support@watermarkly.com.

Segurança e Privacidade

  • As solicitações da API exigem autenticação por meio de uma chave de API.
  • Os arquivos dos clientes não são usados para treinamento de modelos de IA.
  • Todo o processamento ocorre na infraestrutura da AWS. Podemos implantar a API em uma região de sua escolha gratuitamente.

Exemplos 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);
  }
})();