API REST. Desfoque Rostos e Placas de Veículos em Fotos

A API de Desfoque da Watermarkly detecta e desfoca automaticamente rostos e placas de veículos em imagens. Ela é executada inteiramente na infraestrutura da AWS e prioriza a privacidade — seus arquivos nunca são usados para treinar modelos de IA.
Usamos o AWS Lambda para processar milhares de requisições em paralelo, garantindo desempenho confiável e disponibilidade em várias regiões do mundo.

Teste Gratuitamente

Vendemos a API através do AWS Marketplace. Custo: US$ 0,01 / requisição. Há uma opção de teste gratuito por 7 dias.


Principais Funcionalidades

Detecta e desfoca automaticamente placas de veículos e rostos em imagens.

Opcionalmente substitui placas por um logotipo da sua empresa ou projeto.

Pode redimensionar, cortar ou converter as imagens processadas.

Suporta até 500 requisições por segundo.

Processa imagens em paralelo para maior rapidez.

Tamanho máximo suportado para imagens: 6000 × 6000 pixels.

Requisições à API exigem autenticação por chave de API.

Se você precisa de processamento mais rápido, suporte a imagens maiores ou uma taxa de requisições mais alta, entre em contato conosco em api-support@watermarkly.com.


Exemplos de Saída

O rosto da mulher e a placa do veículo estão desfocados.

API para desfocar rostos e placas em imagens

A placa foi substituída pelo logotipo da empresa e o rosto da mulher está desfocado.

API para desfocar rostos e placas em imagens

Obter API

Vendemos a API através do AWS Marketplace. Custo: US$ 0,01 / requisição. Há uma opção de teste gratuito por 7 dias.


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.
  • Imagens AVIF e HEIF serão convertidas para JPEG, a menos que outro formato seja especificado.
  • Tamanho máximo das imagens de entrada:
    • Requisições GET: 20MB ou 6000x6000 pixels.
    • Requisições POST: 6MB ou 6000x6000 pixels.
  • Limites de taxa da API:
    • 500 requisições em paralelo
    • 500 requisições por segundo
    • 100.000 requisições por dia

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