概要
生成したフィギュア動画で、Jev・SAM・SAM Agentによる検出とモザイク処理を比較しました。
「SNSに不適切なところ」という曖昧な指示と、露出部位を具体的に指定した場合の結果を紹介します。
まずはモザイク動画と結果
左上が元映像、右上がSAM、左下がSAM Agent、右下がJevです。
青い実線はフィギュア(figure)、赤い破線は不適切表現または肌の露出部位。
2種類の検出を別々に実行して重ね、色塗りはせず、赤枠の矩形全体にモザイクをかけています。
肌の形に沿ったマスクではありません。
肌動画:「SNSに不適切なところを探して」
赤枠の元の指示は以下です。過度な肌の露出や裸、性的表現、暴力・流血など、SNSに不適切な視覚表現を広く指定しています。
Visual content inappropriate for social media, including excessive skin exposure, nudity, sexual content, graphic violence, gore, and other inappropriate visual expressions
曖昧な指示にも反応しますが、SAM Agentでも途中でモザイクが外れます。
肌動画:「フィギュアの胸・腹・腕の露出した肌を探して」
赤枠の指示を以下に変更し、フィギュアの胸・腹・腕の露出した肌を具体的に指定しました。
exposed skin on the figurine's chest, abdomen and arms
対象を具体化すると、全方式で検出が増えました。
ただし、SAMは露出前にも反応しました。
メカ動画:「SNSに不適切なところを探して」
赤枠には最初の肌動画と同じ不適切表現のプロンプトを使い、内部がメカの映像でも反応するかを確認しました。
Visual content inappropriate for social media, including excessive skin exposure, nudity, sexual content, graphic violence, gore, and other inappropriate visual expressions
フィギュアには青枠が出ますが、不適切表現では全方式で検出0件でした。
ここまでの結果のまとめ
SAM AgentとJevは、「SNSに不適切なところ」という対象が曖昧な文章でも、画像から該当すると判断した領域を検出できました。
ただし、肌の露出後119フレームのうち、不適切表現で検出できたのはSAM Agentが109フレーム、Jevが14フレームで、今回の条件ではJevは見逃しが大幅に多い結果でした。
肌動画では、対象を具体的に指定すると全方式で検出が増えました。
ただし、SAMは露出前にも反応し、SAM AgentとJevは露出後も途中でモザイクが外れました。
メカ動画の不適切表現は全方式で検出0件でした。
実験設定と検出方法
入力は生成したフィギュア動画2本で、どちらも1280×720・24fps・145フレーム、約6.04秒です。
各フレームを静止画として判定し、検出したBounding Boxの矩形内にモザイクをかけています。
検出条件は、物体を指定する figure、曖昧な目的を指定する「SNSに不適切な表現」、具体的に指定する「胸・腹・腕の露出した肌」の3種類です。
不適切表現と部位指定は同じ意味ではなく、指示の具体性による違いを比較しています。
| 方式 | 検出方法 |
|---|---|
| SAM | SAM 3.1に元の指示をそのまま渡す |
| SAM Agent | Qwenが指示を具体化し、SAM 3.1の候補を確認。1フレームでLLM最大3回、SAM最大2回 |
| Jev | 存在確率と位置を同時に質問。存在確率0.80以上、Box信頼度0.60以上で採用 |
SAM AgentはSAM 3のAgent設計を参考にした独自実装です。
公式実装の完全な再現ではなく、モデルと呼び出し回数の制限は今回の実験設定です。
入力動画・ソースコード・設定・完成動画とGIF・検出数の集計は、実装リポジトリで公開しています。
検出数の比較
3条件の検出数と、肌の露出前・露出後に分けた結果は、GitHubの比較表にまとめています。
肌の部位指定でSAM AgentとJevが最初に検出した **frame 26(27枚目、約1.08秒)**を基準に、次の2区間で集計します。
- 肌露出前:frame 0〜25。
-
肌露出後:frame 26〜144。
この検証では、肌露出後の119フレームをすべて検出対象と仮定します。
「検出」は枠が1個以上あるフレーム数、「見逃し」は肌露出後に枠がないフレーム数です。
人手の正解マスクによる評価ではなく、枠の位置・範囲やSNS規約への適否は採点していません。
肌動画
| 検出条件 | 方式 | 肌露出前の検出 / 26 | 肌露出後の検出 / 119 | 見逃し |
|---|---|---|---|---|
| 不適切表現 | SAM | 0 | 0 | 119 |
| 不適切表現 | SAM Agent | 0 | 109 | 10 |
| 不適切表現 | Jev | 0 | 14 | 105 |
| 露出部位を明示 | SAM | 26 | 119 | 0 |
| 露出部位を明示 | SAM Agent | 0 | 116 | 3 |
| 露出部位を明示 | Jev | 0 | 94 | 25 |
未検出の理由にも違いがあります。
-
SAM Agent:不適切表現では「フィギュアなので不適切とは言えない」と判断した例があります。
部位指定では、腕だけの候補を胸・腹も覆えていないとして不採用にした例もあり、未検出すべてが画像認識の失敗とは限りません。 - Jev:部位指定での未検出は、存在確率を満たしたものの、Box信頼度が閾値未満だったためです。
メカ動画の結果
肌の露出がないメカ動画では、不適切表現の検出は全方式で0件でした。
一方、同じ動画の figure は全方式で検出できました(145フレーム中、SAMは145、SAM Agentは140、Jevは145)。
ライブ配信に組み込むには
映像と音声をバッファにため、AIの判定とモザイク処理が終わってから配信する構成を考えます。
遅延を許容し、必要な処理能力を確保できれば、SAM Agentも配信フィルターの候補になります。
ただし、見逃しや枠の範囲不足は遅延だけでは解決しません。
今回のフレーム処理をライブ配信に組み込む構成案です。
映像と音声にディレイを設け、判定が終わるまで待たせれば、モザイクを反映してから配信できます。
以下は、SAM 3.1にfal.ai、AgentのLLMにOpenRouter経由のQwenを利用した、今回の構成での1フレームあたりの平均処理時間です。API通信や待ち時間も含みます。
| 方式 | 不適切表現 | 露出部位を明示 |
|---|---|---|
| SAM | 1.87秒 | 3.40秒 |
| SAM Agent | 12.07秒 | 15.08秒 |
| Jev | 0.41秒 | 0.34秒 |
ディレイの長さは、処理時間のばらつきと並列処理数に合わせて決めます。
高速化するなら、SAMをローカルGPUで動かす、AgentのLLMを応答の速いモデルに替える、といった方法が考えられます。
現在の構成で1時間配信すると、いくらかかるか
1280×720・24fpsで1対象を全フレーム判定する場合を試算します。
肌動画の不適切表現145フレームの実測から、1時間分(86,400フレーム)へ換算しました。単価は2026年10月20日の確認値です。
req=リクエスト、M token=100万トークン、frame=フレーム。
| 方式・課金項目 | 単価 | 実測平均 |
|---|---|---|
| SAM | $0.01 /req | 1 req/frame |
| SAM Agent:SAM | $0.01 /req | 141 ÷ 145 ≒ 0.972 req/frame |
| SAM Agent:LLM | 入力:$0.03 /M token 出力:$0.13 /M token |
入出力合算 約$0.000148 /frame |
| Jev | 入力:$0.042 /M token 出力:無料 |
403,933 ÷ 145 ≒ 2,786 token/frame |
SAM AgentのLLM費用は、APIに記録された利用料を使っています。
| 方式 | 計算($/frame) | 1時間分の計算 | 1時間あたりの料金 |
|---|---|---|---|
| SAM | 1 × 0.01 = 0.01 | 0.01 × 86,400 | $864.00 |
| SAM Agent | 0.972 × 0.01 + 0.000148 ≒ 0.009872 | 0.009872 × 86,400 | $852.94 |
| Jev | 2,786 × 0.042 ÷ 10⁶ ≒ 0.000117 | 0.000117 × 86,400 | $10.10 |
映像や呼び出し回数によって利用料は変わります。税・手数料や配信設備など、API以外の費用は含みません。
Jevは約 \$10/時間 と比較的安価ですが、SAM・SAM Agentは約 \$850〜\$860/時間となり、この構成で継続配信するには料金面が厳しそうです。
まとめ
Jev・SAM・SAM Agentで検出とモザイク処理を比較し、指示の具体性によって結果が変わることを確認できました。
費用も試算でき、Jevであれば比較的安価に自動モザイクを実現できそうです。
次はOBSなどに組み込む方法を作り、24時間配信者のポロリやVtuberのうっかり顔出しを守ってみたいですね。



