
Ce référentiel implémente un pipeline en cascade de parole, composé des parties suivantes:
Le pipeline fournit une approche entièrement ouverte et modulaire, en mettant l'accent sur la mise en œuvre de modèles disponibles via la bibliothèque Transformers sur le centre de face étreint. Le code est conçu pour une modification facile, et nous prenons déjà en charge les implémentations de bibliothèque spécifiques au périphérique et externes:
Vad
STT
LLM
Tts
Clone le référentiel:
git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speechInstallez les dépendances requises à l'aide des UV:
uv pip install -r requirements.txt Pour les utilisateurs de Mac, utilisez plutôt le fichier requirements_mac.txt :
uv pip install -r requirements_mac.txtSi vous souhaitez utiliser Melo TTS, vous devez également courir:
python -m unidic downloadLe pipeline peut être exécuté de deux manières:
Exécutez le pipeline sur le serveur:
python s2s_pipeline.py --recv_host 0.0.0.0 --send_host 0.0.0.0Exécutez le client localement pour gérer l'entrée du microphone et recevoir l'audio généré:
python listen_and_play.py --host < IP address of your server >python s2s_pipeline.py --local_mac_optimal_settingsCe paramètre:
--device mps pour utiliser les MP pour tous les modèles.https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
docker compose up
Tirez parti de la compilation de la torche pour Whisper et Parler-TTS. L'utilisation de Parler-TTS permet le streaming de sortie audio, réduisant avant la latence OverEreal :
python s2s_pipeline.py
--lm_model_name microsoft/Phi-3-mini-4k-instruct
--stt_compile_mode reduce-overhead
--tts_compile_mode default
--recv_host 0.0.0.0
--send_host 0.0.0.0 Pour le moment, les modes capturant les graphiques CUDA ne sont pas compatibles avec le streaming Parler-TTS ( reduce-overhead , max-autotune ).
Le pipeline soutient actuellement l'anglais, le français, l'espagnol, le chinois, le japonais et le coréen.
Deux cas d'utilisation sont pris en compte:
--language , en spécifiant le code de la langue cible (la valeur par défaut est «en»).--language vers «Auto». Dans ce cas, Whisper détecte la langue pour chaque invite parlée, et le LLM est invité à " Please reply to my message in ... " pour vous assurer que la réponse est dans la langue détectée.Veuillez noter que vous devez utiliser les points de contrôle STT et LLM compatibles avec les langues cibles. Pour la partie STT, Parler-Tts n'est pas encore multilingue (bien que cette fonctionnalité arrive bientôt!?). En attendant, vous devez utiliser Melo (qui soutient l'anglais, le français, l'espagnol, le chinois, le japonais et le coréen) ou le chat-TTS.
Pour la détection automatique du langage:
python s2s_pipeline.py
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct Ou pour une langue en particulier, le chinois dans cet exemple
python s2s_pipeline.py
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct Pour la détection automatique du langage:
python s2s_pipeline.py
--local_mac_optimal_settings
--device mps
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct-4bit Ou pour une langue en particulier, le chinois dans cet exemple
python s2s_pipeline.py
--local_mac_optimal_settings
--device mps
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct-4bit Remarque: Les références pour tous les arguments CLI peuvent être trouvées directement dans les classes d'arguments ou en exécutant
python s2s_pipeline.py -h.
Voir la classe ModulearGuments. Permet de définir:
--device commun (si l'on veut que chaque pièce fonctionne sur le même appareil)--mode local ou serverVoir la classe VadHandlerarGuments. Notamment:
--thresh : Valeur de seuil pour déclencher la détection d'activité vocale.--min_speech_ms : Durée minimale de l'activité vocale détectée à considérer la parole.--min_silence_ms : Longueur minimale des intervalles de silence pour la segmentation de la parole, la coupe d'équilibrage de la phrase et la réduction de latence. model_name , torch_dtype et device sont exposés pour chaque implémentation du discours au texte, du modèle de langue et du texte à la parole. Spécifiez la pièce de pipeline ciblée avec le préfixe correspondant (par exemple stt , lm ou tts , consultez les classes d'arguments des implémentations pour plus de détails).
Par exemple:
--lm_model_name google/gemma-2b-it D'autres paramètres de génération de la méthode de génération du modèle peuvent être définis en utilisant le préfixe de la pièce + _gen_ , par exemple, --stt_gen_max_new_tokens 128 . Ces paramètres peuvent être ajoutés à la classe d'arguments de la partie du pipeline s'il n'est pas déjà exposé.
@misc { Silero VAD,
author = { Silero Team } ,
title = { Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier } ,
year = { 2021 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/snakers4/silero-vad} } ,
commit = { insert_some_commit_here } ,
email = { hello @ silero.ai }
} @misc { gandhi2023distilwhisper ,
title = { Distil-Whisper: Robust Knowledge Distillation via Large-Scale Pseudo Labelling } ,
author = { Sanchit Gandhi and Patrick von Platen and Alexander M. Rush } ,
year = { 2023 } ,
eprint = { 2311.00430 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CL }
} @misc { lacombe-etal-2024-parler-tts ,
author = { Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi } ,
title = { Parler-TTS } ,
year = { 2024 } ,
publisher = { GitHub } ,
journal = { GitHub repository } ,
howpublished = { url{https://github.com/huggingface/parler-tts} }
}