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.

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.

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