REST API. Rozmazat obličeje a SPZ na fotkách

Watermarkly Blur API automaticky detekuje a rozmazává obličeje a SPZ v obrázcích. Běží výhradně na infrastruktuře AWS a prioritou je soukromí – vaše soubory nejsou nikdy použity k trénování AI modelů. K paralelnímu zpracování tisíců požadavků používáme AWS Lambda, což zajišťuje spolehlivý výkon a dostupnost v několika regionech po celém světě.

Vyzkoušet zdarma

API prodáváme prostřednictvím AWS Marketplace. Cena: 0,01 USD / požadavek. K dispozici je možnost bezplatné 7denní zkušební verze.


Hlavní funkce

✓ Automaticky detekuje a rozmazává SPZ a obličeje v obrázcích

✓ Volitelně nahrazuje SPZ logem vašeho projektu nebo společnosti.

✓ Dokáže měnit velikost, ořezávat nebo převádět zpracované obrázky.

✓ Podporuje až 500 požadavků za sekundu.

✓ Zpracovává obrázky paralelně pro rychlejší výkon.

✓ Maximální podporovaná velikost obrázku: 6000 × 6000 pixelů.

✓ Požadavky API vyžadují autentizaci pomocí API klíče.

Pokud potřebujete rychlejší zpracování, podporu pro větší obrázky nebo vyšší frekvenci požadavků, kontaktujte nás prosím na api-support@watermarkly.com.


Příklady výstupu

Obličej ženy a SPZ jsou rozmazané.

API pro rozmazávání obličejů a SPZ na obrázcích

SPZ je nahrazena logem společnosti a obličej ženy je rozmazaný.

API pro rozmazávání obličejů a SPZ na obrázcích

Získat API

API prodáváme prostřednictvím AWS Marketplace. Cena: 0,01 USD / požadavek. K dispozici je možnost bezplatné 7denní zkušební verze.


Podrobnosti o zpracování

  • Zpracované obrázky nejsou ukládány na našich serverech.
  • Služba přijímá obrázky ve formátech JPEG, PNG, WEBP, AVIF, HEIC/HEIF.
  • Obrázky AVIF a HEIF budou převedeny na JPEG, pokud není specifikován jiný formát.
  • Maximální velikost vstupního obrázku:
    • GET požadavky: 20 MB nebo 6000x6000 pixelů.
    • POST požadavky: 6 MB nebo 6000x6000 pixelů.
  • Limity API:
    • 500 paralelních požadavků
    • 500 požadavků za sekundu
    • 100 000 požadavků za den

API Endpointy

Regiony

V současné době poskytujeme API ve dvou regionech:

Můžete použít kterýkoli endpoint, který vám více vyhovuje. Druhý endpoint můžete použít jako záložní pro případ výpadku jednoho regionu AWS. Pokud potřebujete API v jiném regionu, dejte nám prosím vědět.

Metody požadavků

Obrázky ke zpracování můžete odesílat pomocí požadavků GET nebo POST.
Pokud jsou vaše obrázky veřejně dostupné, doporučujeme používat požadavky GET, protože jsou o něco rychlejší než požadavky POST.

Rozmazat obrázek pomocí požadavku GET (doporučeno)

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

nebo

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

Zajistí stažení obrázku z image_url a jeho zpracování.

Požadavek

  • Metoda: GET
  • Hlavičky:
    • x-api-key: Váš API klíč
  • Parametry URL dotazu:
    • url (povinné): Úplná URL obrázku, který má být zpracován.
    • blur_intensity (volitelné): Hodnota typu float mezi 0.0 a 20.0, která upravuje intenzitu rozmazání. Výchozí: 1.0. Zadání 0.0 rozmazání vypne.
    • file_size (volitelné): Určuje požadovanou velikost výstupního souboru v bajtech. Služba se pokusí vrátit obrázek, který tuto velikost nepřekročí.
    • width (volitelné): Určuje požadovanou šířku výstupního obrázku.
    • height (volitelné): Určuje požadovanou výšku výstupního obrázku.
    • format (volitelné): Určuje požadovaný formát výstupního obrázku. Možné hodnoty: JPEG, PNG, WEBP.
    • logo_url (volitelné): URL souboru s logem, které má být umístěno na SPZ. Může to být HTTP URL nebo data URL. Před předáním parametru se ujistěte, že je URL správně escapována.
    • logo_size (volitelné): Určuje velikost loga jako číslo od 0.1 do 1.0.
    • plate_screws (volitelné): Přidá šrouby na SPZ. Účinné pouze společně s parametrem logo_url.
    • detection_threshold (volitelné): Hodnota typu float mezi 0.01 a 1.0, která řídí práh spolehlivosti pro detekci obličejů a SPZ. Nižší hodnoty detekují více objektů, ale mohou vést k falešným detekcím; vyšší hodnoty detekují méně objektů, ale s větší přesností. Výchozí: 0.15 pro obličeje, 0.3 pro SPZ.
    • blur_padding (volitelné): Celočíselná hodnota od 0 do 100, která řídí přidaný okraj (v pixelech) kolem detekovaných obličejů a SPZ. Zvýšení této hodnoty rozšíří rozmazanou oblast za hranice detekované oblasti. Výchozí: 0 (žádný dodatečný okraj).

Odpověď

Úspěšná odpověď: (HTTP Status: 200) Služba vrátí zpracovaný obrázek v jednom z následujících formátů: JPEG, PNG, WEBP.

Chybová odpověď: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Rozmazat obrázek pomocí požadavku POST

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

nebo

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

Odešle obrázek ke zpracování.

Požadavek

  • Metoda: POST
  • Content-Type: application/octet-stream
  • Hlavičky:
    • x-api-key: Váš API klíč
  • Parametry dotazu:
    • blur_intensity (volitelné): Hodnota typu float mezi 0.0 a 20.0, která upravuje intenzitu rozmazání. Výchozí: 1.0. Zadání 0.0 rozmazání vypne.
    • file_size (volitelné): Určuje požadovanou velikost výstupního souboru v bajtech. Služba se pokusí vrátit obrázek, který tuto velikost nepřekročí.
    • width (volitelné): Určuje požadovanou šířku výstupního obrázku.
    • height (volitelné): Určuje požadovanou výšku výstupního obrázku.
    • format (volitelné): Určuje požadovaný formát výstupního obrázku. Možné hodnoty: JPEG, PNG, WEBP.
    • logo_url (volitelné): URL souboru s logem, které má být umístěno na SPZ. Může to být HTTP URL nebo data URL. Před předáním parametru se ujistěte, že je URL správně escapována.
    • logo_size (volitelné): Určuje velikost loga jako číslo od 0.1 do 1.0.
    • plate_screws (volitelné): Přidá šrouby na SPZ. Účinné pouze společně s parametrem logo_url.
    • detection_threshold (volitelné): Hodnota typu float mezi 0.01 a 1.0, která řídí práh spolehlivosti pro detekci obličejů a SPZ. Nižší hodnoty detekují více objektů, ale mohou vést k falešným detekcím; vyšší hodnoty detekují méně objektů, ale s větší přesností. Výchozí: 0.15 pro obličeje, 0.3 pro SPZ.
    • blur_padding (volitelné): Celočíselná hodnota od 0 do 100, která řídí přidaný okraj (v pixelech) kolem detekovaných obličejů a SPZ. Zvýšení této hodnoty rozšíří rozmazanou oblast za hranice detekované oblasti. Výchozí: 0 (žádný dodatečný okraj).

Odpověď

Úspěšná odpověď: (HTTP Status: 200) Služba vrátí zpracovaný obrázek v jednom z následujících formátů: JPEG, PNG, WEBP.

Chybová odpověď: (HTTP Status: 500, 403)

{
  "message": "Error message"
}

Příklady použití

Python

import requests
import urllib.parse

API_KEY = 'your_api_key'
API_URL = 'https://blur-api-eu1.watermarkly.com/blur/'

input_path = ''       # Cesta k lokálnímu obrázku
output_path = ''      # Cesta k výstupnímu obrázku

# Rozmazat obrázek pomocí požadavku POST
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:
        # Překročen limit požadavků, chvíli počkejte
        time.sleep(0.1)
        response = requests.post(API_URL, headers={'x-api-key': API_KEY}, data=image_file)
# Uložit zpracovaný obrázek lokálně
with open(output_path, 'wb') as f:
    f.write(response.content)


# Rozmazat obrázek pomocí požadavku GET
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})
# Uložit odpověď lokálně
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/';

// Pomocná funkce pro pozastavení provádění na daný počet milisekund
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

(async () => {
  // Rozmazat obrázek pomocí požadavku POST
  try {
    const inputPath = 'input_path_here';   // Nahraďte skutečnou cestou k souboru
    const outputPath = 'output_path_here'; // Nahraďte skutečnou cestou k souboru

    // Asynchronní načtení souboru s obrázkem jako binárních dat
    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) {
      // Překročen limit požadavků, chvíli počkejte
      await sleep(100); // spát 0,1 sekundy
      response = await fetch(API_URL, {
        method: 'POST',
        headers: {
          'x-api-key': API_KEY,
          'Content-Type': 'application/octet-stream'
        },
        body: imageData
      });
    }
    // Asynchronní uložení zpracovaného obrázku lokálně
    const arrayBuffer = await response.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer);
    await fs.writeFile(outputPath, buffer);
  } catch (error) {
    console.error('Chyba během požadavku POST:', error);
  }

  // Rozmazat obrázek pomocí požadavku GET
  try {
    const outputPath = 'output_path_here'; // Nahraďte skutečnou cestou k souboru
    const encodedUrl = encodeURIComponent("https://nikitin.io/eqe.jpg"); // Enkódovat URL
    const response = await fetch(`${API_URL}?url=${encodedUrl}`, {
      method: 'GET',
      headers: {
        'x-api-key': API_KEY
      }
    });
    // Asynchronní uložení odpovědi lokálně
    const arrayBuffer = await response.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer);
    await fs.writeFile(outputPath, buffer);
  } catch (error) {
    console.error('Chyba během požadavku GET:', error);
  }
})();