REST API. 写真の顔やナンバープレートをぼかす

WatermarklyぼかしAPIは、画像内の顔やナンバープレートを自動的に検出してぼかします。完全にAWSインフラストラクチャ上で動作し、プライバシーを最優先しています。お客様のファイルがAIモデルのトレーニングに使用されることはありません。 当社はAWS Lambdaを使用して数千のリクエストを並列処理し、世界中の複数のリージョンで信頼性の高いパフォーマンスと可用性を保証しています。

無料で試す

APIはAWS Marketplaceを通じて販売しています。料金:1リクエストあたり0.01ドル。7日間の無料トライアルオプションがあります。


主な機能

画像内のナンバープレートや顔を自動的に検出してぼかします

オプションで、ナンバープレートをプロジェクトや会社のロゴに置き換えることができます。

処理された画像のリサイズ、切り抜き、変換が可能です。

1秒あたり最大500リクエストをサポート。

高速なパフォーマンスのために画像を並列処理します。

サポートされる最大画像サイズ:6000 × 6000ピクセル。

APIリクエストにはAPIキーによる認証が必要です。

より高速な処理、より大きな画像のサポート、またはより高いリクエストレートが必要な場合は、api-support@watermarkly.comまでお問い合わせください。


出力例

女性の顔とナンバープレートがぼかされています。

画像上の顔やナンバープレートをぼかすためのAPI

ナンバープレートが会社のロゴに置き換えられ、女性の顔がぼかされています。

画像上の顔やナンバープレートをぼかすためのAPI

APIを入手する

APIはAWS Marketplaceを通じて販売しています。料金:1リクエストあたり0.01ドル。7日間の無料トライアルオプションがあります。


処理の詳細

  • 処理された画像は当社のサーバーには保存されません。
  • 本サービスは、JPEG、PNG、WEBP、AVIF、HEIC/HEIF形式の画像を受け付けます。
  • 別の形式が指定されない限り、AVIFおよびHEIF画像はJPEGに変換されます。
  • 最大入力画像サイズ:
    • GETリクエスト:20MBまたは6000x6000ピクセル。
    • POSTリクエスト:6MBまたは6000x6000ピクセル。
  • APIレート制限:
    • 500の並列リクエスト
    • 1秒あたり500リクエスト
    • 1日あたり100,000リクエスト

APIエンドポイント

リージョン

現在、2つのリージョンでAPIを提供しています:

どちらのエンドポイントでも、ご都合の良い方をお使いいただけます。単一のAWSリージョンがダウンした場合のフォールバックとして、もう一方のエンドポイントを使用することもできます。別のリージョンでAPIが必要な場合は、お知らせください。

リクエストメソッド

処理する画像は、GETまたはPOSTリクエストのいずれかを使用して送信できます。
画像が公開されている場合は、POSTリクエストよりもわずかに高速なGETリクエストを送信することをお勧めします。

GETリクエストを使用して画像をぼかす(推奨)

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

または

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

本サービスが image_url から画像をダウンロードして処理します。

リクエスト

  • メソッド: GET
  • ヘッダー:
    • x-api-key: あなたのAPIキー
  • URLクエリパラメータ:
    • url (必須): 処理対象の画像の完全なURL。
    • blur_intensity (任意): ぼかしの強度を調整する0.0から20.0の浮動小数点値。デフォルト:1.0。0.0を渡すとぼかしが無効になります。
    • file_size (任意): 希望する出力ファイルサイズをバイト単位で指定します。本サービスはこのサイズを超えない画像を返そうと試みます。
    • width (任意): 希望する出力画像の幅を指定します。
    • height (任意): 希望する出力画像の高さを指定します。
    • format (任意): 希望する出力画像の形式を指定します。指定可能な値:JPEG、PNG、WEBP。
    • logo_url (任意): ナンバープレートに配置するロゴファイルのURL。HTTP URLまたはデータURLを指定できます。リクエストパラメータとして渡す前に、URLが適切にエスケープされていることを確認してください。
    • logo_size (任意): ロゴのサイズを0.1から1.0の数値で指定します。
    • plate_screws (任意): ナンバープレートにプレートネジを追加します。logo_urlパラメータと併用した場合のみ有効です。

レスポンス

成功時のレスポンス: (HTTPステータス: 200) 本サービスは、JPEG、PNG、WEBPのいずれかの形式で処理された画像を返します。

エラーレスポンス: (HTTPステータス: 500, 403)

{
  "message": "エラーメッセージ"
}

POSTリクエストを使用して画像をぼかす

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

または

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

処理のために画像を送信します。

リクエスト

  • メソッド: POST
  • Content-Type: application/octet-stream
  • ヘッダー:
    • x-api-key: あなたのAPIキー
  • クエリパラメータ:
    • blur_intensity (任意): ぼかしの強度を調整する0.0から20.0の浮動小数点値。デフォルト:1.0。0.0を渡すとぼかしが無効になります。
    • file_size (任意): 希望する出力ファイルサイズをバイト単位で指定します。本サービスはこのサイズを超えない画像を返そうと試みます。
    • width (任意): 希望する出力画像の幅を指定します。
    • height (任意): 希望する出力画像の高さを指定します。
    • format (任意): 希望する出力画像の形式を指定します。指定可能な値:JPEG、PNG、WEBP。
    • logo_url (任意): ナンバープレートに配置するロゴファイルのURL。HTTP URLまたはデータURLを指定できます。リクエストパラメータとして渡す前に、URLが適切にエスケープされていることを確認してください。
    • logo_size (任意): ロゴのサイズを0.1から1.0の数値で指定します。
    • plate_screws (任意): ナンバープレートにプレートネジを追加します。logo_urlパラメータと併用した場合のみ有効です。

レスポンス

成功時のレスポンス: (HTTPステータス: 200) 本サービスは、JPEG、PNG、WEBPのいずれかの形式で処理された画像を返します。

エラーレスポンス: (HTTPステータス: 500, 403)

{
  "message": "エラーメッセージ"
}

使用例

Python

import requests
import urllib.parse

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

input_path = ''       # ローカル画像のパス
output_path = ''      # ローカル出力のパス

# 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:
        # APIレート制限を超過、少し待機
        time.sleep(0.1)
        response = requests.post(API_URL, headers={'x-api-key': API_KEY}, data=image_file)
# 処理された画像をローカルに保存
with open(output_path, 'wb') as f:
    f.write(response.content)


# 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})
# レスポンスをローカルに保存
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/';

// 指定されたミリ秒間、実行を停止するためのヘルパー関数
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

(async () => {
  // POSTリクエストを使用して画像をぼかす
  try {
    const inputPath = 'input_path_here';   // 実際の入力パスに置き換えてください
    const outputPath = 'output_path_here'; // 実際の出力パスに置き換えてください

    // 画像ファイルをバイナリデータとして非同期で読み込む
    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レート制限を超過、少し待機
      await sleep(100); // 0.1秒間スリープ
      response = await fetch(API_URL, {
        method: 'POST',
        headers: {
          'x-api-key': API_KEY,
          'Content-Type': 'application/octet-stream'
        },
        body: imageData
      });
    }
    // 処理された画像をローカルに非同期で保存
    const arrayBuffer = await response.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer);
    await fs.writeFile(outputPath, buffer);
  } catch (error) {
    console.error('POSTリクエスト中にエラーが発生しました:', error);
  }

  // GETリクエストを使用して画像をぼかす
  try {
    const outputPath = 'output_path_here'; // 実際の出力パスに置き換えてください
    const encodedUrl = encodeURIComponent("https://nikitin.io/eqe.jpg"); // URLをエンコード
    const response = await fetch(`${API_URL}?url=${encodedUrl}`, {
      method: 'GET',
      headers: {
        'x-api-key': API_KEY
      }
    });
    // レスポンスをローカルに非同期で保存
    const arrayBuffer = await response.arrayBuffer();
    const buffer = Buffer.from(arrayBuffer);
    await fs.writeFile(outputPath, buffer);
  } catch (error) {
    console.error('GETリクエスト中にエラーが発生しました:', error);
  }
})();