- ゲームでキャラクターが外国語で話すと、そのキャラクターの頭上に元の言語で字幕を表示した後、リアルタイムで自分の言語に翻訳される
- この機能をDL音声認識・顔認識などを使って実装してみたコードと、動作方式を詳しく紹介
- OpenAI Whisper + NVDIA NeMo + DeepL + RetinaFace + DeepFace + Sckikit-learn + Gradio + Modal + PIL/OpenCV + ffpmpeg
動作方式
- yt-dlp でYouTube動画をダウンロード
- ffmpeg で映像/音声を分離
- 音声は
- Whisper に入れて文字起こしを生成し、DeepLで翻訳
- NeMo に入れて話者ID(話している人)を抽出
- この2つをタイムスタンプベースでマッチングし、話者ID付きテキストを生成
- 映像は
- MTCNN/RetinaFaceで顔の位置を抽出。Modalで並列化して高速化。
- DeepFace/Scikit-Learn で各顔の埋め込みを抽出し、一意のIDを付与
- Jaccard IndexでFaceIDとSpeakerIDをマッチング
- 作成したフレームメタデータを使ってPIL/OpenCVでフレームにアノテーションを付与
- ffmpeg Writerで動画を生成
1件のコメント
動作方式の設計が見事ですね。