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.
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 Eindpunten
Regio’s
Momenteel bieden we de API aan in twee regio’s:
- Europa: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- Verenigde Staten: https://blur-api-us1.watermarkly.com/ (us-east-2)
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);
}
})();