- Dans le jeu, lorsqu’un personnage parle dans une langue étrangère, des sous-titres s’affichent d’abord au-dessus de sa tête dans la langue d’origine, puis sont traduits en temps réel dans sa propre langue
- Présentation détaillée du code et du fonctionnement permettant de reproduire cette fonctionnalité à l’aide de la reconnaissance vocale profonde, de la reconnaissance faciale, etc.
- OpenAI Whisper + NVDIA NeMo + DeepL + RetinaFace + DeepFace + Sckikit-learn + Gradio + Modal + PIL/OpenCV + ffpmpeg
Fonctionnement
- Téléchargement d’une vidéo YouTube avec
yt-dlp
- Séparation de la vidéo et de l’audio avec
ffmpeg
- Pour l’audio
- Passage dans Whisper pour générer les transcriptions, puis traduction avec DeepL
- Passage dans NeMo pour extraire l’ID du locuteur (la personne qui parle)
- Appariement des deux sur la base des timestamps pour générer un texte avec l’ID du locuteur
- Pour la vidéo
- Extraction de la position des visages avec MTCNN/RetinaFace, accélérée via une parallélisation avec Modal
- Extraction d’embeddings pour chaque visage avec DeepFace/Scikit-Learn et attribution d’un ID unique
- Appariement entre FaceID et SpeakerID avec l’indice de Jaccard
- Annotation des frames avec PIL/OpenCV à partir des métadonnées de frame générées
- Génération de la vidéo avec le writer
ffmpeg
1 commentaires
La conception du fonctionnement est vraiment ingénieuse.