Ce projet propose une interface interactive permettant de :
- Charger une vidéo ou un fichier audio en entrée
- Identifier et segmenter les voix dans l’enregistrement (diarisation)
- Estimer pour chaque voix le genre, l’âge approximatif, ou une ID anonyme
- Permettre de moduler le volume de chaque locuteur (amplifier/diminuer)
- 🔊 Extraction audio depuis une vidéo
- 🧠 Diarisation des locuteurs (séparation par voix)
- 🧬 Identification des caractéristiques des locuteurs :
- Genre (homme/femme)
- Âge estimé (enfant/adulte/personne âgée)
- 🎚️ Amplification ciblée par locuteur
- 🖥️ Interface utilisateur simple pour tout contrôler
Une interface simple (app.py) permettant de :
- Charger une vidéo ou un fichier audio (mp4, mov, mkv, avi, webm, mp3, wav, m4a, flac…)
- Détecter automatiquement le nombre de locuteurs et créer un slot par voix détectée (VAD Silero + embeddings vocaux
ECAPA-TDNNnormalisés + clustering par similarité, lissage temporel, répartition des chevauchements — aucun nombre de personnes à indiquer) - Identifier chaque voix : genre & âge estimés automatiquement par le modèle
audeeringwav2vec2 age/gender (audonnx+ ONNX, ~363 Mo, licence CC BY-NC-SA — usage non commercial), avec secours par heuristiques de hauteur de voix et possibilité de correction manuelle - Ajuster le volume de chaque voix :
- manuellement, avec un curseur par acteur (−20 dB à +20 dB)
- automatiquement pour tous (
✨ Auto-adjust all voices) en équilibrant la loudness
- Prévisualiser chaque voix isolée, puis générer et télécharger le mix final (WAV)
pip install -r requirements.txt
ffmpegdoit être installé sur le système (ex.sudo apt install ffmpeg).
speechbraininstalletorch(CUDA) par défaut (~2,5 Go). Pour untorchCPU uniquement (plus léger), installez d'abord la paire assortie, sinontorchaudio(CUDA) échouera au chargement avec une erreurlibcudart:pip install "torch==2.11.0" "torchaudio==2.11.0+cpu" --index-url https://download.pytorch.org/whl/cpu pip install -r requirements.txt
streamlit run app.py
⚠️ Genre & âge sont estimés par le modèleaudeering(wav2vec2, âge en années + female/male/child) viaaudonnx— téléchargé au premier lancement (~363 Mo) ; siaudonnxest absent ou hors ligne, on retombe sur des heuristiques (médiane de la fréquence fondamentale). Corrigez les valeurs manuellement si besoin.La diarisation utilise par défaut la VAD Silero (détection de parole précise, secours énergétique) puis les embeddings
ECAPA-TDNN(speechbrain) avec détection automatique du nombre de locuteurs, embeddings normalisés L2 et lissage temporel des fenêtres (les chevauchements de voix sont répartis entre les locuteurs concernés). Un clustering MFCC sert de dernier secours. Le moteurpyannote-audio3.1 (modèlepyannote/speaker-diarization-3.1) est disponible pour une diarisation encore plus avancée, voir ci-dessous.
- Acceptez la licence du modèle gated : https://huggingface.co/pyannote/speaker-diarization-3.1
- Créez un jeton d'accès : https://huggingface.co/settings/tokens
- Dans la barre latérale, choisissez le moteur pyannote (advanced) (ou Auto) et collez le jeton dans le champ Hugging Face token (ou exportez
HF_TOKEN).
Le moteur pyannote gère lui-même la VAD, le nombre de locuteurs et le chevauchement de voix ; il est plus lent mais plus précis. Sans jeton valide, l'application retombe automatiquement sur ECAPA-TDNN (et affiche un avertissement si seul le clustering MFCC est utilisable).
Le panneau 🧩 Model settings de la barre latérale laisse l'utilisateur choisir chaque modèle du pipeline :
- Moteur de diarisation : Auto (pyannote 3.1 si jeton, sinon ECAPA-TDNN), ECAPA-TDNN (local), ou pyannote (avancé).
- VAD : Auto (Silero), Silero (neural), ou énergétique (léger).
- Estimateur genre & âge : Auto (wav2vec2
audeeringsi disponible), wav2vec2 (audeering), ou heuristiques de hauteur de voix (rapide, hors ligne).
Changer un de ces choix invalide l'analyse en cours et demande de relancer 🔍 Analyse voices.
- Langage : Python 3.10+
- Interface utilisateur :
Streamlit - Traitement audio :
ffmpeg,librosa,soundfile,numpy - VAD :
silero-vad(détection de parole précise, secours énergétique) - Embeddings vocaux :
ECAPA-TDNN(speechbrain) — détection automatique du nombre de locuteurs - Clustering locuteurs :
scikit-learn(KMeans sur embeddings normalisés L2 + lissage temporel, secours MFCC) - Diarisation (avancée) :
pyannote-audio3.1 — modèlepyannote/speaker-diarization-3.1(accès gated : licence + jeton Hugging Face) - Modèles de classification : réseaux de neurones pré-entraînés (optionnel)