REST-API zum Verwischen von Gesichtern und Nummernschildern auf Fotos

Die Watermarkly Blur API erkennt und verwischt automatisch Nummernschilder und Gesichter in Bildern.

API zum Verwischen von Gesichtern und Nummernschildern auf 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 zum Verwischen von Gesichtern und Nummernschildern auf Bildern

API-Endpunkte

Regionen

Derzeit bieten wir die API in zwei Regionen an:

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