Skip to content

Latest commit

 

History

18 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎙️ Speaker Identity & Voice Enhancement Interface

📌 Objectif

Ce projet propose une interface interactive permettant de :

  1. Charger une vidéo ou un fichier audio en entrée
  2. Identifier et segmenter les voix dans l’enregistrement (diarisation)
  3. Estimer pour chaque voix le genre, l’âge approximatif, ou une ID anonyme
  4. Permettre de moduler le volume de chaque locuteur (amplifier/diminuer)

⚙️ Fonctionnalités principales

  • 🔊 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

🖥️ Interface (Streamlit)

Une interface simple (app.py) permettant de :

  1. Charger une vidéo ou un fichier audio (mp4, mov, mkv, avi, webm, mp3, wav, m4a, flac…)
  2. Détecter automatiquement le nombre de locuteurs et créer un slot par voix détectée (VAD Silero + embeddings vocaux ECAPA-TDNN normalisés + clustering par similarité, lissage temporel, répartition des chevauchements — aucun nombre de personnes à indiquer)
  3. Identifier chaque voix : genre & âge estimés automatiquement par le modèle audeering wav2vec2 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
  4. 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
  5. Prévisualiser chaque voix isolée, puis générer et télécharger le mix final (WAV)

Installation

pip install -r requirements.txt

ffmpeg doit être installé sur le système (ex. sudo apt install ffmpeg).

speechbrain installe torch (CUDA) par défaut (~2,5 Go). Pour un torch CPU uniquement (plus léger), installez d'abord la paire assortie, sinon torchaudio (CUDA) échouera au chargement avec une erreur libcudart :

pip install "torch==2.11.0" "torchaudio==2.11.0+cpu" --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt

Lancement

streamlit run app.py

⚠️ Genre & âge sont estimés par le modèle audeering (wav2vec2, âge en années + female/male/child) via audonnx — téléchargé au premier lancement (~363 Mo) ; si audonnx est 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 moteur pyannote-audio 3.1 (modèle pyannote/speaker-diarization-3.1) est disponible pour une diarisation encore plus avancée, voir ci-dessous.

Diarisation avancée avec pyannote-audio (optionnel)

  1. Acceptez la licence du modèle gated : https://huggingface.co/pyannote/speaker-diarization-3.1
  2. Créez un jeton d'accès : https://huggingface.co/settings/tokens
  3. 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).

Choix des modèles

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 audeering si 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.


🧰 Technologies utilisées

  • 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-audio 3.1 — modèle pyannote/speaker-diarization-3.1 (accès gated : licence + jeton Hugging Face)
  • Modèles de classification : réseaux de neurones pré-entraînés (optionnel)

About

No description or website provided.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Contributors

Languages