REST-API voor het vervagen van gezichten en kentekenplaten op foto’s

De Watermarkly Blur API detecteert en vervaagt automatisch kentekenplaten en gezichten op afbeeldingen.

API voor het vervagen van gezichten en kentekenplaten op afbeeldingen

Deze service is volledig gehost op AWS-infrastructuur en waarborgt privacy door geen klantbestanden te gebruiken voor AI-modeltraining.
We maken gebruik van AWS Lambda, waarmee we duizenden parallelle verzoeken betrouwbaar kunnen verwerken en de dienst in meerdere regio’s wereldwijd kunnen aanbieden.

Functies

  • Detecteert en vervaagt automatisch kentekenplaten en gezichten op afbeeldingen.
  • Biedt de mogelijkheid om kentekenplaten te vervangen door uw projectlogo.
  • Kan afbeeldingen optioneel schalen, bijsnijden of converteren.
  • Ondersteunt tot 500 verzoeken per seconde.
  • Verwerkt afbeeldingen parallel voor snellere prestaties.
  • Maximale ondersteunde afbeeldingsgrootte: 6000x6000 pixels.

Als u snellere verwerking, ondersteuning voor grotere afbeeldingen of een hogere verzoeksnelheid nodig heeft, neem dan contact met ons op via api-support@watermarkly.com.

Met de API kunt u kentekenplaten vervangen door uw bedrijfslogo.

API voor het vervagen van gezichten en kentekenplaten op afbeeldingen

API Eindpunten

Regio’s

Momenteel bieden we de API aan in twee regio’s:

Je kunt het eindpunt gebruiken dat voor jou het handigst is. Het tweede eindpunt kan worden gebruikt als back-up voor het geval een AWS-regio uitvalt. Als je de API in een andere regio nodig hebt, laat het ons weten.

Verzoekmethoden

Je kunt afbeeldingen verwerken met GET of POST-verzoeken.
Als je afbeeldingen openbaar toegankelijk zijn, raden we GET-verzoeken aan, omdat deze iets sneller zijn dan POST-verzoeken.

Afbeelding vervagen met een GET-verzoek (Aanbevolen)

GET https://blur-api-eu1.watermarkly.com/blur/?url={image_url}

or

GET https://blur-api-us1.watermarkly.com/blur/?url={image_url}

De service downloadt de afbeelding van image_url en verwerkt deze.

Verzoek

  • Methode: GET
  • URL-queryparameters:
    • url (Vereist): De volledige URL van de afbeelding die moet worden verwerkt.
    • blur_intensity (Optioneel): Een drijvendekommagetal tussen 0.0 en 20.0 dat de intensiteit van de vervaging aanpast. Standaard: 1.0. 0.0 schakelt de vervaging uit.
    • file_size (Optioneel): Specificeert de gewenste uitvoerbestandsgrootte in bytes. De service probeert een afbeelding terug te geven die deze grootte niet overschrijdt.
    • width (Optioneel): Specificeert de gewenste breedte van de uitvoerafbeelding.
    • height (Optioneel): Specificeert de gewenste hoogte van de uitvoerafbeelding.
    • format (Optioneel): Specificeert het gewenste uitvoerformaat van de afbeelding. Mogelijke waarden: JPEG, PNG, WEBP.
    • logo_url (Optioneel): De URL van een logobestand dat op kentekenplaten moet worden geplaatst. Dit kan een HTTP-URL of een data-URL zijn. Zorg ervoor dat de URL correct is gecodeerd voordat u deze als verzoekparameter doorgeeft.
    • logo_size (Optioneel): Specificeert de logo-grootte als een getal tussen 0.1 en 1.0.
    • plate_screws (Optioneel): Voegt schroeven toe aan kentekenplaten. Werkt alleen samen met de logo_url-parameter.

Antwoord

Succesvol antwoord: (HTTP Status: 200) De service retourneert de verwerkte afbeelding in een van de volgende formaten: JPEG, PNG, WEBP.

Foutantwoord: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Afbeelding vervagen met een POST-verzoek

POST https://blur-api-eu1.watermarkly.com/blur/

or

POST https://blur-api-us1.watermarkly.com/blur/

Dient een afbeelding in voor verwerking.

Verzoek

  • Methode: POST
  • Content-Type: application/octet-stream
  • Headers:
    • x-api-key: Uw API-sleutel
  • Queryparameters:
    • blur_intensity (Optioneel): Een float-waarde tussen 0.0 en 20.0 die de intensiteit van de vervaging aanpast. Standaard: 1.0. De waarde 0.0 schakelt vervaging uit.
    • file_size (Optioneel): Geeft de gewenste bestandsgrootte in bytes aan. De service probeert een afbeelding te retourneren die deze grootte niet overschrijdt.
    • width (Optioneel): Geeft de gewenste breedte van de uitvoerafbeelding aan.
    • height (Optioneel): Geeft de gewenste hoogte van de uitvoerafbeelding aan.
    • format (Optioneel): Geeft het gewenste uitvoerformaat aan. Mogelijke waarden: JPEG, PNG, WEBP.
    • logo_url (Optioneel): De URL van een logobestand om op kentekenplaten te plaatsen. Dit kan een HTTP- of een data-URL zijn. Zorg ervoor dat de URL correct is gecodeerd voordat u deze als parameter opgeeft.
    • logo_size (Optioneel): Geeft de grootte van het logo op als een getal tussen 0.1 en 1.0.
    • plate_screws (Optioneel): Voegt schroeven toe aan kentekenplaten. Werkt alleen in combinatie met de logo_url-parameter.

Reactie

Succesvolle reactie: (HTTP Status: 200) De service retourneert de verwerkte afbeelding in een van de volgende formaten: JPEG, PNG, WEBP.

Foutreactie: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Verwerkingsdetails

  • Verwerkte afbeeldingen worden niet opgeslagen op onze servers.
  • De service accepteert afbeeldingen in de formaten JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
  • AVIF- en HEIF-afbeeldingen worden omgezet naar JPEG, tenzij een ander formaat is opgegeven.
  • Maximale invoergrootte van afbeeldingen:
    • GET-verzoeken: 20MB of 6000x6000 pixels.
    • POST-verzoeken: 6MB of 6000x6000 pixels.
  • API-verzoeklimieten:
    • 500 parallelle verzoeken
    • 500 verzoeken per seconde
    • 100.000 verzoeken per dag
  • Indien u hogere limieten nodig heeft, neem dan contact met ons op via api-support@watermarkly.com.

Beveiliging en privacy

  • API-verzoeken vereisen authenticatie via een API-sleutel.
  • Klantbestanden worden niet gebruikt voor AI-modeltraining.
  • Alle verwerking vindt plaats op AWS-infrastructuur. Wij kunnen de API gratis implementeren in een regio naar keuze.

Voorbeelden van gebruik

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