REST-API zum Verwischen von Gesichtern und Nummernschildern auf Fotos
Die Watermarkly Blur API erkennt und verwischt automatisch Nummernschilder und Gesichter in Bildern.
Dieser Dienst wird vollständig auf der AWS-Infrastruktur gehostet und gewährleistet den Datenschutz, indem er keine Kundendateien für das Training von KI-Modellen verwendet.
Wir nutzen AWS Lambda, wodurch wir Tausende paralleler Anfragen zuverlässig verarbeiten und den Dienst in mehreren Regionen weltweit anbieten können.
Funktionen
- Erkennt und verwischt automatisch Nummernschilder und Gesichter in Bildern.
- Ermöglicht das Ersetzen von Nummernschildern durch Ihr Projektlogo.
- Optionales Skalieren, Zuschneiden oder Konvertieren der verarbeiteten Bilder.
- Unterstützt bis zu 500 Anfragen pro Sekunde.
- Verarbeitet Bilder parallel für eine schnellere Leistung.
- Maximale unterstützte Bildgröße: 6000x6000 Pixel.
Falls Sie eine schnellere Verarbeitung, Unterstützung für größere Bilder oder eine höhere Anfragelast benötigen, kontaktieren Sie uns bitte unter api-support@watermarkly.com.
Die API ermöglicht es Ihnen, Nummernschilder durch Ihr Firmenlogo zu ersetzen.
API-Endpunkte
Regionen
Derzeit bieten wir die API in zwei Regionen an:
- Europa: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- Vereinigte Staaten: https://blur-api-us1.watermarkly.com/ (us-east-2)
Sie können das für Sie bequemere Endpunkt verwenden. Der zweite Endpunkt kann als Fallback genutzt werden, falls eine einzelne AWS-Region ausfällt. Falls Sie die API in einer anderen Region benötigen, lassen Sie es uns bitte wissen.
Anfragemethoden
Sie können Bilder zur Verarbeitung entweder über GET oder POST-Anfragen senden.
Falls Ihre Bilder öffentlich zugänglich sind, empfehlen wir die Verwendung von GET-Anfragen, da sie etwas schneller sind als POST-Anfragen.
Bild mit GET-Anfrage verwischen (Empfohlen)
GET https://blur-api-eu1.watermarkly.com/blur/?url={image_url}
or
GET https://blur-api-us1.watermarkly.com/blur/?url={image_url}
Der Dienst lädt das Bild von der image_url
herunter und verarbeitet es.
Anfrage
- Methode: GET
- URL-Abfrageparameter:
url
(Erforderlich): Die vollständige URL des zu verarbeitenden Bildes.blur_intensity
(Optional): Ein Gleitkommawert zwischen 0,0 und 20,0, der die Unschärfeintensität anpasst. Standard: 1,0. 0,0 deaktiviert die Unschärfe.file_size
(Optional): Gibt die gewünschte Ausgabedateigröße in Byte an. Der Dienst versucht, ein Bild bereitzustellen, das diese Größe nicht überschreitet.width
(Optional): Gibt die gewünschte Ausgabe-Bildbreite an.height
(Optional): Gibt die gewünschte Ausgabe-Bildhöhe an.format
(Optional): Gibt das gewünschte Ausgabe-Bildformat an. Mögliche Werte: JPEG, PNG, WEBP.logo_url
(Optional): Die URL einer Logodatei, die auf Kennzeichen platziert werden soll. Kann eine HTTP-URL oder eine Daten-URL sein. Stellen Sie sicher, dass die URL vor der Übertragung als Anfrageparameter korrekt codiert ist.logo_size
(Optional): Gibt die Logo-Größe als Zahl zwischen 0,1 und 1,0 an.plate_screws
(Optional): Fügt Schrauben zu Kennzeichen hinzu. Funktioniert nur zusammen mit dem logo_url-Parameter.
Antwort
Erfolgreiche Antwort: (HTTP Status: 200) Der Dienst gibt das verarbeitete Bild in einem der folgenden Formate zurück: JPEG, PNG, WEBP.
Fehlermeldung: (HTTP Status: 500, 403)
{
"message": "Error message"
}
Bild mit POST-Anfrage verwischen
POST https://blur-api-eu1.watermarkly.com/blur/
or
POST https://blur-api-us1.watermarkly.com/blur/
Reicht ein Bild zur Verarbeitung ein.
Anfrage
- Methode:
POST
- Content-Type:
application/octet-stream
- Headers:
x-api-key
: Ihr API-Schlüssel
- Query-Parameter:
blur_intensity
(Optional): Ein Float-Wert zwischen 0,0 und 20,0, der die Unschärfeintensität anpasst. Standardwert: 1,0. Der Wert 0,0 deaktiviert die Unschärfe.file_size
(Optional): Gibt die gewünschte Dateigröße der Ausgabe in Byte an. Der Dienst versucht, ein Bild zurückzugeben, das diese Größe nicht überschreitet.width
(Optional): Gibt die gewünschte Breite des Ausgabebildes an.height
(Optional): Gibt die gewünschte Höhe des Ausgabebildes an.format
(Optional): Gibt das gewünschte Bildformat an. Mögliche Werte: JPEG, PNG, WEBP.logo_url
(Optional): Die URL einer Logodatei, die auf Nummernschildern platziert werden soll. Kann eine HTTP-URL oder eine Daten-URL sein. Stellen Sie sicher, dass die URL ordnungsgemäß codiert ist, bevor Sie sie als Anfrageparameter übergeben.logo_size
(Optional): Gibt die Größe des Logos als Wert zwischen 0,1 und 1,0 an.plate_screws
(Optional): Fügt Schrauben zu den Nummernschildern hinzu. Funktioniert nur in Kombination mit dem Parameter logo_url.
Antwort
Erfolgreiche Antwort: (HTTP Status: 200) Der Dienst gibt das verarbeitete Bild in einem der folgenden Formate zurück: JPEG, PNG, WEBP.
Fehlermeldung: (HTTP Status: 500, 403)
{
"message": "Error message"
}
Verarbeitungsdetails
- Verarbeitete Bilder werden nicht auf unseren Servern gespeichert.
- Der Dienst akzeptiert Bilder in den Formaten JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
- AVIF- und HEIF-Bilder werden in JPEG konvertiert, sofern kein anderes Format angegeben ist.
- Maximale Eingangsbildgröße:
- GET-Anfragen: 20MB oder 6000x6000 Pixel.
- POST-Anfragen: 6MB oder 6000x6000 Pixel.
- API-Ratenbeschränkungen:
- 500 parallele Anfragen
- 500 Anfragen pro Sekunde
- 100.000 Anfragen pro Tag
- Falls Sie höhere Limits benötigen, kontaktieren Sie uns bitte unter api-support@watermarkly.com.
Sicherheit und Datenschutz
- API-Anfragen erfordern eine Authentifizierung mittels eines API-Schlüssels.
- Kundendateien werden nicht für das Training von KI-Modellen verwendet.
- Die gesamte Verarbeitung erfolgt auf AWS-Infrastruktur. Wir können die API kostenlos in einer Region Ihrer Wahl bereitstellen.
Anwendungsbeispiele
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);
}
})();