API REST pour flouter les visages et les plaques d’immatriculation sur les photos

L’API Watermarkly Blur détecte et floute automatiquement les plaques d’immatriculation et les visages sur les images.

API pour flouter les visages et les plaques d'immatriculation sur les images

Ce service est entièrement hébergé sur l’infrastructure AWS et garantit la confidentialité en ne utilisant pas les fichiers clients pour l’entraînement des modèles d’IA.
Nous utilisons AWS Lambda, ce qui nous permet de gérer des milliers de requêtes parallèles de manière fiable et d’offrir le service dans plusieurs régions du monde.

Fonctionnalités

  • Détecte et floute automatiquement les plaques d’immatriculation et les visages sur les images.
  • Permet de remplacer les plaques d’immatriculation par le logo de votre projet.
  • Redimensionne, recadre ou convertit les images traitées en option.
  • Prend en charge jusqu’à 500 requêtes par seconde.
  • Traite les images en parallèle pour de meilleures performances.
  • Taille d’image maximale prise en charge : 6000x6000 pixels.

Si vous avez besoin d’un traitement plus rapide, de la prise en charge d’images plus grandes ou d’un taux de requêtes plus élevé, veuillez nous contacter à api-support@watermarkly.com.

L’API vous permet de remplacer les plaques d’immatriculation par le logo de votre entreprise.

API pour flouter les visages et les plaques d'immatriculation sur les images

Points de terminaison de l’API

Régions

Actuellement, nous proposons l’API dans deux régions :

Vous êtes libre d’utiliser l’endpoint qui vous convient le mieux. Vous pouvez utiliser le second endpoint comme solution de secours en cas de panne d’une région AWS. Si vous avez besoin de l’API dans une autre région, veuillez nous en informer.

Méthodes de requête

Vous pouvez soumettre des images pour traitement en utilisant des requêtes GET ou POST.
Si vos images sont accessibles publiquement, nous recommandons l’utilisation des requêtes GET, car elles sont légèrement plus rapides que les requêtes POST.

Flouter une image avec une requête GET (Recommandé)

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

or

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

Le service télécharge l’image depuis l’image_url et la traite.

Requête

  • Méthode : GET
  • Paramètres de requête d’URL :
    • url (Obligatoire): L’URL complète de l’image à traiter.
    • blur_intensity (Optionnel): Une valeur flottante entre 0.0 et 20.0 ajustant l’intensité du flou. Par défaut : 1.0. 0.0 désactive le flou.
    • file_size (Optionnel): Spécifie la taille de fichier de sortie souhaitée en octets. Le service tentera de retourner une image ne dépassant pas cette taille.
    • width (Optionnel): Spécifie la largeur de sortie souhaitée de l’image.
    • height (Optionnel): Spécifie la hauteur de sortie souhaitée de l’image.
    • format (Optionnel): Spécifie le format d’image de sortie souhaité. Valeurs possibles : JPEG, PNG, WEBP.
    • logo_url (Optionnel): L’URL d’un fichier logo à placer sur les plaques d’immatriculation. Peut être une URL HTTP ou une URL de données. Assurez-vous que l’URL est correctement encodée avant de l’envoyer en tant que paramètre de requête.
    • logo_size (Optionnel): Spécifie la taille du logo en tant que valeur comprise entre 0.1 et 1.0.
    • plate_screws (Optionnel): Ajoute des vis aux plaques d’immatriculation. Fonctionne uniquement avec le paramètre logo_url.

Réponse

Réponse réussie: (HTTP Status: 200) Le service renvoie l’image traitée dans l’un des formats suivants : JPEG, PNG, WEBP.

Réponse d’erreur: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Flouter une image avec une requête POST

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

or

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

Soumet une image pour traitement.

Requête

  • Méthode : POST
  • Content-Type : application/octet-stream
  • En-têtes :
    • x-api-key : Votre clé API
  • Paramètres de requête :
    • blur_intensity (Optionnel): Une valeur flottante entre 0.0 et 20.0 qui ajuste l’intensité du flou. Par défaut : 1.0. La valeur 0.0 désactive le flou.
    • file_size (Optionnel): Spécifie la taille souhaitée du fichier de sortie en octets. Le service tente de renvoyer une image ne dépassant pas cette taille.
    • width (Optionnel): Spécifie la largeur souhaitée de l’image de sortie.
    • height (Optionnel): Spécifie la hauteur souhaitée de l’image de sortie.
    • format (Optionnel): Spécifie le format d’image souhaité. Valeurs possibles : JPEG, PNG, WEBP.
    • logo_url (Optionnel): URL d’un fichier logo à placer sur les plaques d’immatriculation. Peut être une URL HTTP ou une URL de données. Assurez-vous que l’URL est correctement échappée avant de l’envoyer comme paramètre.
    • logo_size (Optionnel): Spécifie la taille du logo sous forme d’un nombre entre 0.1 et 1.0.
    • plate_screws (Optionnel): Ajoute des vis aux plaques d’immatriculation. Fonctionne uniquement avec le paramètre logo_url.

Réponse

Réponse réussie : (HTTP Status: 200) Le service renvoie l’image traitée dans l’un des formats suivants : JPEG, PNG, WEBP.

Réponse d’erreur : (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Détails du traitement

  • Les images traitées ne sont pas stockées sur nos serveurs.
  • Le service accepte les images aux formats JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
  • Les images AVIF et HEIF seront converties en JPEG, sauf indication contraire.
  • Taille maximale de l’image en entrée :
    • Requêtes GET : 20MB ou 6000x6000 pixels.
    • Requêtes POST : 6MB ou 6000x6000 pixels.
  • Limites de l’API :
    • 500 requêtes en parallèle
    • 500 requêtes par seconde
    • 100 000 requêtes par jour
  • Si vous avez besoin de limites plus élevées, contactez-nous à api-support@watermarkly.com.

Sécurité et confidentialité

  • Les requêtes API nécessitent une authentification via une clé API.
  • Les fichiers clients ne sont pas utilisés pour l’entraînement des modèles d’IA.
  • Tout le traitement s’effectue sur l’infrastructure AWS. Nous pouvons déployer l’API dans une région de votre choix sans frais supplémentaires.

Exemples d’utilisation

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