| name | blur-faces |
| description | 写真に写っている人物の顔を検出してぼかし、匿名化した画像を作成する。YuNet による 2 パス顔検出、ガウスぼかし、拡大クロップでの目視検証、取りこぼしの手動追いぼかしまでのワークフロー。「顔をぼかして」「顔にモザイク」「写真の顔を隠して」「人物を匿名化して」などのリクエストで使用する。 |
Blur Faces
写真内の顔を OpenCV の YuNet で検出してガウスぼかしをかける。群衆写真では自動検出だけだと必ず取りこぼしが出るため、目視検証と手動追いぼかしまでを 1 セットのワークフローとして実行する。
ワークフロー
1. 自動検出とぼかし
uv run --with opencv-python-headless python scripts/blur_faces.py 入力画像 出力画像
- 元画像は上書きせず、
元ファイル名-blurred.jpg のような別名で出力する
- YuNet モデルは初回実行時に
~/.cache/blur-faces/ へ自動ダウンロードされる
- 等倍(しきい値 0.35)と 2 倍拡大(しきい値 0.4)の 2 パスで検出し、小さい顔や斜めの顔を拾う
2. 目視検証(必須)
出力画像全体を Read で確認したうえで、人物が密集している領域を拡大クロップして取りこぼしを探す。
uv run --with opencv-python-headless python scripts/crop_zoom.py 出力画像 crop1.jpg X0,Y0,X1,Y1
- クロップは重なりを持たせて複数領域を切り出し、それぞれ Read で確認する
- 見落としやすいもの: 横顔、下を向いた顔、マスク着用、眼鏡、画像端で見切れた顔、壇上や後方の小さい顔
3. 取りこぼしの手動追いぼかし
見つけた未処理の顔は、元画像のピクセル座標で --manual X,Y,W,H を追加して再実行する(複数指定可)。
uv run --with opencv-python-headless python scripts/blur_faces.py 入力画像 出力画像 --manual 140,1055,70,75 --manual 1290,1180,90,95
- クロップ画像上の座標は「クロップ座標 ÷ ズーム倍率 + クロップ原点」で元画像座標へ戻す
- 再実行後、ステップ 2 の検証を繰り返し、取りこぼしゼロを確認してから完了とする
オプション
| オプション | 説明 | デフォルト |
|---|
--manual X,Y,W,H | 手動ぼかしボックスの追加(複数指定可) | なし |
--pad | 検出ボックスの拡張率 | 0.25 |
--model | YuNet ONNX モデルのパス | ~/.cache/blur-faces/face_detection_yunet_2023mar.onnx |
--zoom | crop_zoom.py の拡大倍率 | 2 |
注意事項
- macOS の Vision framework(VNDetectFaceRectanglesRequest)は正面顔向けで、下を向いた顔や横顔が多い会場写真ではほとんど検出できない。この用途では YuNet を使う
- YuNet でもマスク着用や強い横顔は落とすことがあるため、目視検証を省略しない
- ぼかし強度はボックス幅に比例したカーネルで自動調整される
- 出力が JPEG の場合は品質 92 で保存される