REST API do rozmywania twarzy i tablic rejestracyjnych na zdjęciach

Watermarkly Blur API automatycznie wykrywa i rozmywa tablice rejestracyjne oraz twarze na obrazach.

API do rozmywania twarzy i tablic rejestracyjnych na obrazach

Usługa jest w pełni hostowana na infrastrukturze AWS i zapewnia prywatność, nie wykorzystując plików klientów do trenowania modeli AI.
Korzystamy z AWS Lambda, co pozwala nam niezawodnie obsługiwać tysiące równoczesnych żądań i oferować usługę w różnych regionach na całym świecie.

Funkcje

  • Automatycznie wykrywa i rozmywa tablice rejestracyjne oraz twarze na obrazach.
  • Umożliwia zastąpienie tablic rejestracyjnych logo Twojego projektu.
  • Opcjonalnie zmienia rozmiar, przycina lub konwertuje przetworzone obrazy.
  • Obsługuje do 500 żądań na sekundę.
  • Przetwarza obrazy równolegle dla lepszej wydajności.
  • Maksymalny obsługiwany rozmiar obrazu: 6000x6000 pikseli.

Jeśli potrzebujesz szybszego przetwarzania, obsługi większych obrazów lub większej liczby żądań, skontaktuj się z nami pod adresem api-support@watermarkly.com.

API także pozwala zastąpić tablice rejestracyjne logo Twojej firmy.

API do rozmywania twarzy i tablic rejestracyjnych na obrazach

Punkty końcowe API

Regiony

Obecnie oferujemy API w dwóch regionach:

Możesz używać dowolnego punktu końcowego, który jest dla Ciebie wygodniejszy. Możesz również używać drugiego punktu końcowego jako rozwiązania awaryjnego, jeśli jedna z regionów AWS ulegnie awarii. Jeśli potrzebujesz API w innym regionie, daj nam znać.

Metody żądań

Możesz przesyłać obrazy do przetwarzania za pomocą żądań GET lub POST.
Jeśli Twoje obrazy są publicznie dostępne, zalecamy używanie żądań GET, ponieważ są one nieco szybsze niż żądania POST.

Rozmycie obrazu za pomocą żądania GET (Zalecane)

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

or

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

Usługa pobiera obraz z image_url i przetwarza go.

Żądanie

  • Metoda: GET
  • Parametry zapytania URL:
    • url (Wymagane): Pełny adres URL obrazu do przetworzenia.
    • blur_intensity (Opcjonalne): Wartość zmiennoprzecinkowa między 0.0 a 20.0, dostosowująca intensywność rozmycia. Domyślnie: 1.0. 0.0 wyłącza rozmycie.
    • file_size (Opcjonalne): Określa żądany rozmiar wyjściowego pliku w bajtach. Usługa spróbuje zwrócić obraz, który nie przekracza tej wielkości.
    • width (Opcjonalne): Określa żądaną szerokość obrazu wyjściowego.
    • height (Opcjonalne): Określa żądaną wysokość obrazu wyjściowego.
    • format (Opcjonalne): Określa żądany format obrazu wyjściowego. Możliwe wartości: JPEG, PNG, WEBP.
    • logo_url (Opcjonalne): Adres URL pliku logo do umieszczenia na tablicach rejestracyjnych. Może to być adres URL HTTP lub URL danych. Upewnij się, że URL jest poprawnie zakodowany przed przekazaniem go jako parametr żądania.
    • logo_size (Opcjonalne): Określa rozmiar logo jako liczbę od 0.1 do 1.0.
    • plate_screws (Opcjonalne): Dodaje śruby do tablic rejestracyjnych. Działa tylko w połączeniu z parametrem logo_url.

Odpowiedź

Pomyślna odpowiedź: (HTTP Status: 200) Usługa zwraca przetworzony obraz w jednym z następujących formatów: JPEG, PNG, WEBP.

Odpowiedź błędu: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Rozmycie obrazu za pomocą żądania POST

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

or

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

Przesyła obraz do przetworzenia.

Żądanie

  • Metoda: POST
  • Content-Type: application/octet-stream
  • Nagłówki:
    • x-api-key: Twój klucz API
  • Parametry zapytania:
    • blur_intensity (Opcjonalne): Wartość zmiennoprzecinkowa między 0.0 a 20.0, która reguluje intensywność rozmycia. Domyślnie: 1.0. Wartość 0.0 wyłącza rozmycie.
    • file_size (Opcjonalne): Określa żądany rozmiar pliku wyjściowego w bajtach. Usługa spróbuje zwrócić obraz, który nie przekracza tego rozmiaru.
    • width (Opcjonalne): Określa żądaną szerokość obrazu wyjściowego.
    • height (Opcjonalne): Określa żądaną wysokość obrazu wyjściowego.
    • format (Opcjonalne): Określa żądany format obrazu wyjściowego. Możliwe wartości: JPEG, PNG, WEBP.
    • logo_url (Opcjonalne): URL pliku logo do umieszczenia na tablicach rejestracyjnych. Może to być URL HTTP lub URL danych. Upewnij się, że adres URL jest odpowiednio zakodowany przed przesłaniem jako parametr żądania.
    • logo_size (Opcjonalne): Określa rozmiar logo jako wartość od 0.1 do 1.0.
    • plate_screws (Opcjonalne): Dodaje śruby do tablic rejestracyjnych. Działa tylko w połączeniu z parametrem logo_url.

Odpowiedź

Poprawna odpowiedź: (HTTP Status: 200) Usługa zwraca przetworzony obraz w jednym z następujących formatów: JPEG, PNG, WEBP.

Odpowiedź błędu: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Szczegóły przetwarzania

  • Przetworzone obrazy nie są przechowywane na naszych serwerach.
  • Usługa akceptuje obrazy w formatach JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
  • Obrazy AVIF i HEIF zostaną przekonwertowane na JPEG, chyba że określono inny format.
  • Maksymalny rozmiar wejściowego obrazu:
    • Żądania GET: 20MB lub 6000x6000 pikseli.
    • Żądania POST: 6MB lub 6000x6000 pikseli.
  • Limity API:
    • 500 równoległych żądań
    • 500 żądań na sekundę
    • 100 000 żądań dziennie
  • Jeśli potrzebujesz wyższych limitów, skontaktuj się z nami pod adresem api-support@watermarkly.com.

Bezpieczeństwo i prywatność

  • Żądania API wymagają uwierzytelnienia za pomocą klucza API.
  • Pliki klientów nie są wykorzystywane do trenowania modeli AI.
  • Całe przetwarzanie odbywa się na infrastrukturze AWS. Możemy wdrożyć API w wybranym przez Ciebie regionie bez dodatkowych opłat.

Przykłady użycia

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