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.
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.
Endpoints da API
Regiões
Atualmente, fornecemos a API em duas regiões:
- Europa: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- Estados Unidos: https://blur-api-us1.watermarkly.com/ (us-east-2)
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);
}
})();