動画内に複数人が映っているときに、特定の人物だけを残したい、背景や周囲の人物をぼかしたい、人物を選択して追従処理したい、という場面があります。
今回は、そのためのローカルアプリとして Human Selected Mask を作りました。
GitHubで公開していますHuman Selected Mask|GitHub
この記事の内容
Human Selected Maskとは
Human Selected Mask は、動画内の人物を検出し、最初のフレームで選択した人物だけを残して動画を書き出すためのツールです。
内部では Detectron2 のインスタンスセグメンテーションを使い、動画の中に映っている人物を検出します。
ざっくりした流れは次のようになります。
動画を読み込む
↓
最初のフレームで人物を検出
↓
P001, P002, P003 のように人物IDを付ける
↓
残したい人物を選ぶ
↓
選択した人物を追従
↓
背景を黒・白・ぼかしにして動画を書き出す
現時点では、主に「選択した人物だけを残す」方向のアプリです。
いわゆる完全な自動モザイクアプリというより、人物を選択して、背景や周囲をマスクするための実験ツールに近いです。
できること
現時点でできることは、主に次の通りです。
- 動画の最初のフレームから人物を検出
- 検出された人物に
P001,P002,P003のようなIDを付与 - 残したい人物をブラウザ上で選択
- 選択した人物だけを残して動画を書き出し
- 背景を黒にする
- 背景を白にする
- 背景をぼかす
- 元動画のサイズ、FPS、フレーム数をできるだけ保持
ffmpegが使える場合は音声を再結合- ブラウザUIとCLIの両方に対応
ローカルで動くアプリなので、試験的な動画処理や、手元の検証には使いやすい構成にしています。
画面イメージ
ブラウザUIでは、動画を選択して解析すると、最初のフレームに映っている人物が検出されます。
その後、残したい人物IDを選びます。
P001
P002
P003
のような候補が出るので、対象人物を選択して、背景モードを決めて処理します。
背景モードは次の3種類です。
black
white
blur
black は背景を黒くします。
white は背景を白くします。
blur は背景をぼかします。
個人的には、確認用には blur が見やすく、人物抽出っぽく見せたい場合は black や white が使いやすいと感じています。
なぜ作ったのか
もともと骨格推定や動作分析の開発をしている中で、動画から人物の動きだけを取り出したい場面がありました。
たとえば、フォーム確認や動作分析では、背景や周囲の人がノイズになることがあります。
また、動画を外部に共有するときに、周囲の人物を目立たなくしたい場面もあります。
そこで、まずは次のようなローカルツールを作ることにしました。
動画内の人物を選んで、その人物だけを残せるローカルツール
最終的には、次のような用途にも広げたいと考えています。
- 動画内の人物追従
- 背景人物のぼかし
- 研修動画の匿名化
- スポーツやフィットネス動画のフォーム確認
- グリーンバック / ブルーバック風の人物抽出
- 動画匿名化の前処理
- 骨格推定や動線解析の前処理
技術構成
大まかな構成は次の通りです。
Backend:
Python / FastAPI / OpenCV / Detectron2
Frontend:
React / Vite
Video:
OpenCV / ffmpeg
Interface:
Browser UI / CLI
バックエンドは Python と FastAPI で作っています。
フロントエンドは React / Vite です。
動画処理には OpenCV を使い、音声の再結合には ffmpeg を使っています。
Detectron2 は Windows 環境でのセットアップが少し難しいことがあるので、リポジトリには setup.bat と run.bat も用意しています。
詳しくは GitHub の README を見てください。
リポジトリはこちらHuman Selected Mask|GitHub
CLIでも使える
ブラウザUIだけでなく、CLIからも使えるようにしています。
たとえば、最初のフレームを解析する場合は次のようなイメージです。
python cli.py analyze --input data\input.mp4 --output-dir outputs\manual --device auto --score-threshold 0.5
その後、選択した人物IDを指定して処理します。
python cli.py process --input data\input.mp4 --person-id P001 --output outputs\manual\output.mp4 --device auto --score-threshold 0.5 --tracking-threshold 0.3 --background-mode black
GUIで確認しながら使うこともできますし、慣れてきたらCLIでバッチ処理することもできます。
このあたりは、今後さらに改善していきたいところです。
注意点
まだ実験段階のアプリなので、万能ではありません。
特に、業務用の匿名化や外部公開に使う場合は、必ず目視確認が必要です。
現時点では、次のような制約があります。
- 最初のフレームに対象人物が映っている必要がある
- 人物が重なると追従が不安定になることがある
- 似た服装の人物が近くにいると対象が入れ替わる可能性がある
- 画質が低い動画では検出精度が落ちる
- ブレが強い動画では追従が難しい
- 顔やナンバーなどを完全に匿名化するツールではない
「AIで自動処理できるから確認不要」というより、次のような使い方が現実的だと思っています。
AIで大部分を処理して、人間が最後に確認する
今後追加したい機能
今後は、次のような機能を追加していきたいです。
任意フレームから人物を選択
選択人物だけをぼかす
選択人物以外をぼかす
複数人物の処理
グリーンバック / ブルーバック出力
低信頼度フレームの確認UI
マスクデータの書き出し
顔・ナンバー・名札などの匿名化補助
特に、代行作業や法人向けの動画処理を考えると、完全自動化よりも「確認しやすいUI」が重要になります。
AIが苦手な部分を人間が素早く直せるようにすることで、実用性がかなり上がるはずです。
開発方針
公開版は、人物選択・追従・マスク処理のOSSコアとして育てつつ、実務向けにはレビューUI、複数対象管理、処理ログ、削除証跡などを追加していく予定です。
どんな用途に向いているか
現時点で向いている用途は、次のようなものです。
- 特定人物だけを残した動画を作る
- 背景をぼかして主役を見やすくする
- フォーム確認動画で周囲を目立たなくする
- 研修動画や教材動画の前処理
- 人物抽出や動画マスク処理の実験
- Detectron2を使った動画処理の学習
逆に、現時点では次のような用途にはまだ注意が必要です。
- 顔モザイクの完全自動処理
- ナンバープレートの完全検出
- 名札や書類の自動匿名化
- 法人向けの厳密な個人情報マスキング
- 長尺動画の完全自動処理
このあたりは、今後の改善テーマです。
関連する開発メモ
骨格推定や動作可視化に興味がある方は、こちらの記事も関連します。
関連記事React Three Fiber と骨格推定を組み合わせて 3D 動作可視化を作る
動画処理、骨格推定、動作分析はかなり相性が良い領域です。
今回の Human Selected Mask も、最終的には骨格推定や動線解析の前処理として使えるようにしていきたいと考えています。
代行・カスタム相談について
このツールを使った動画処理、人物追従、背景ぼかし、匿名化ワークフロー、グリーンバック化などの相談も受け付けています。
たとえば、次のような内容です。
- 特定人物だけを残す動画加工
- 背景人物をぼかす処理
- 研修動画や教材動画の加工
- スポーツ・フィットネス動画の加工
- 動画匿名化の前処理
- 法人向けのローカル処理相談
- カスタム機能開発
相談はお問い合わせページからお願いします。
まとめ
Human Selected Mask は、Detectron2を使って動画内の人物を検出し、選択した人物だけを残すためのローカルアプリです。
まだ実験段階ではありますが、次のようなところまでは一通り動く形になっています。
- 人物検出
- 人物選択
- 動画マスク
- 背景ぼかし
- CLI処理
- ブラウザUI
今後は、人物追従の安定化、任意フレーム選択、複数人物対応、グリーンバック出力、匿名化補助などを追加していく予定です。
動画内の人物を扱う処理は、フォーム確認、研修動画、教材作成、匿名化、動作分析などに広げやすい分野です。
まずはこのツールを土台にして、実際の動画処理で使いながら改善していこうと思います。
Human Selected Maskhttps://github.com/43taro108/human_selected_mask

コメント