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は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を提供しています:
- 欧州: https://blur-api-eu1.watermarkly.com/ (eu-north-1)
- 米国: https://blur-api-us1.watermarkly.com/ (us-east-2)
どちらのエンドポイントでも、ご都合の良い方をお使いいただけます。単一の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);
}
})();