REST API do rozmywania twarzy i tablic rejestracyjnych na zdjęciach
Watermarkly Blur API automatycznie wykrywa i rozmywa tablice rejestracyjne oraz twarze na obrazach.
Usługa jest w pełni hostowana na infrastrukturze AWS i zapewnia prywatność, nie wykorzystując plików klientów do trenowania modeli AI.
Korzystamy z AWS Lambda, co pozwala nam niezawodnie obsługiwać tysiące równoczesnych żądań i oferować usługę w różnych regionach na całym świecie.
Funkcje
- Automatycznie wykrywa i rozmywa tablice rejestracyjne oraz twarze na obrazach.
- Umożliwia zastąpienie tablic rejestracyjnych logo Twojego projektu.
- Opcjonalnie zmienia rozmiar, przycina lub konwertuje przetworzone obrazy.
- Obsługuje do 500 żądań na sekundę.
- Przetwarza obrazy równolegle dla lepszej wydajności.
- Maksymalny obsługiwany rozmiar obrazu: 6000x6000 pikseli.
Jeśli potrzebujesz szybszego przetwarzania, obsługi większych obrazów lub większej liczby żądań, skontaktuj się z nami pod adresem api-support@watermarkly.com.
API także pozwala zastąpić tablice rejestracyjne logo Twojej firmy.
Punkty końcowe API
Regiony
Obecnie oferujemy API w dwóch regionach:
- Europa: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- Stany Zjednoczone: https://blur-api-us1.watermarkly.com/ (us-east-2)
Możesz używać dowolnego punktu końcowego, który jest dla Ciebie wygodniejszy. Możesz również używać drugiego punktu końcowego jako rozwiązania awaryjnego, jeśli jedna z regionów AWS ulegnie awarii. Jeśli potrzebujesz API w innym regionie, daj nam znać.
Metody żądań
Możesz przesyłać obrazy do przetwarzania za pomocą żądań GET lub POST.
Jeśli Twoje obrazy są publicznie dostępne, zalecamy używanie żądań GET, ponieważ są one nieco szybsze niż żądania POST.
Rozmycie obrazu za pomocą żądania GET (Zalecane)
GET https://blur-api-eu1.watermarkly.com/blur/?url={image_url}
or
GET https://blur-api-us1.watermarkly.com/blur/?url={image_url}
Usługa pobiera obraz z image_url
i przetwarza go.
Żądanie
- Metoda: GET
- Parametry zapytania URL:
url
(Wymagane): Pełny adres URL obrazu do przetworzenia.blur_intensity
(Opcjonalne): Wartość zmiennoprzecinkowa między 0.0 a 20.0, dostosowująca intensywność rozmycia. Domyślnie: 1.0. 0.0 wyłącza rozmycie.file_size
(Opcjonalne): Określa żądany rozmiar wyjściowego pliku w bajtach. Usługa spróbuje zwrócić obraz, który nie przekracza tej wielkości.width
(Opcjonalne): Określa żądaną szerokość obrazu wyjściowego.height
(Opcjonalne): Określa żądaną wysokość obrazu wyjściowego.format
(Opcjonalne): Określa żądany format obrazu wyjściowego. Możliwe wartości: JPEG, PNG, WEBP.logo_url
(Opcjonalne): Adres URL pliku logo do umieszczenia na tablicach rejestracyjnych. Może to być adres URL HTTP lub URL danych. Upewnij się, że URL jest poprawnie zakodowany przed przekazaniem go jako parametr żądania.logo_size
(Opcjonalne): Określa rozmiar logo jako liczbę od 0.1 do 1.0.plate_screws
(Opcjonalne): Dodaje śruby do tablic rejestracyjnych. Działa tylko w połączeniu z parametrem logo_url.
Odpowiedź
Pomyślna odpowiedź: (HTTP Status: 200) Usługa zwraca przetworzony obraz w jednym z następujących formatów: JPEG, PNG, WEBP.
Odpowiedź błędu: (HTTP Status: 500, 403)
{
"message": "Error message"
}
Rozmycie obrazu za pomocą żądania POST
POST https://blur-api-eu1.watermarkly.com/blur/
or
POST https://blur-api-us1.watermarkly.com/blur/
Przesyła obraz do przetworzenia.
Żądanie
- Metoda:
POST
- Content-Type:
application/octet-stream
- Nagłówki:
x-api-key
: Twój klucz API
- Parametry zapytania:
blur_intensity
(Opcjonalne): Wartość zmiennoprzecinkowa między 0.0 a 20.0, która reguluje intensywność rozmycia. Domyślnie: 1.0. Wartość 0.0 wyłącza rozmycie.file_size
(Opcjonalne): Określa żądany rozmiar pliku wyjściowego w bajtach. Usługa spróbuje zwrócić obraz, który nie przekracza tego rozmiaru.width
(Opcjonalne): Określa żądaną szerokość obrazu wyjściowego.height
(Opcjonalne): Określa żądaną wysokość obrazu wyjściowego.format
(Opcjonalne): Określa żądany format obrazu wyjściowego. Możliwe wartości: JPEG, PNG, WEBP.logo_url
(Opcjonalne): URL pliku logo do umieszczenia na tablicach rejestracyjnych. Może to być URL HTTP lub URL danych. Upewnij się, że adres URL jest odpowiednio zakodowany przed przesłaniem jako parametr żądania.logo_size
(Opcjonalne): Określa rozmiar logo jako wartość od 0.1 do 1.0.plate_screws
(Opcjonalne): Dodaje śruby do tablic rejestracyjnych. Działa tylko w połączeniu z parametrem logo_url.
Odpowiedź
Poprawna odpowiedź: (HTTP Status: 200) Usługa zwraca przetworzony obraz w jednym z następujących formatów: JPEG, PNG, WEBP.
Odpowiedź błędu: (HTTP Status: 500, 403)
{
"message": "Error message"
}
Szczegóły przetwarzania
- Przetworzone obrazy nie są przechowywane na naszych serwerach.
- Usługa akceptuje obrazy w formatach JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
- Obrazy AVIF i HEIF zostaną przekonwertowane na JPEG, chyba że określono inny format.
- Maksymalny rozmiar wejściowego obrazu:
- Żądania GET: 20MB lub 6000x6000 pikseli.
- Żądania POST: 6MB lub 6000x6000 pikseli.
- Limity API:
- 500 równoległych żądań
- 500 żądań na sekundę
- 100 000 żądań dziennie
- Jeśli potrzebujesz wyższych limitów, skontaktuj się z nami pod adresem api-support@watermarkly.com.
Bezpieczeństwo i prywatność
- Żądania API wymagają uwierzytelnienia za pomocą klucza API.
- Pliki klientów nie są wykorzystywane do trenowania modeli AI.
- Całe przetwarzanie odbywa się na infrastrukturze AWS. Możemy wdrożyć API w wybranym przez Ciebie regionie bez dodatkowych opłat.
Przykłady użycia
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);
}
})();