18 ポイント 投稿者 xguru 2022-12-28 | 1件のコメント | WhatsAppで共有
  • ゲームでキャラクターが外国語で話すと、そのキャラクターの頭上に元の言語で字幕を表示した後、リアルタイムで自分の言語に翻訳される
  • この機能を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件のコメント

 
chicol 2022-12-28

動作方式の設計が見事ですね。