
Este repositorio implementa una tubería en cascada de voz a voz que consiste en las siguientes partes:
La tubería proporciona un enfoque completamente abierto y modular, con un enfoque en aprovechar los modelos disponibles a través de la biblioteca Transformers en el Hub de la cara abrazada. El código está diseñado para una fácil modificación, y ya admitemos implementaciones de biblioteca específicas y específicas del dispositivo:
Vad
Stt
LLM
TTS
Clon el repositorio:
git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speechInstale las dependencias requeridas usando UV:
uv pip install -r requirements.txt Para los usuarios de Mac, use el archivo requirements_mac.txt en su lugar:
uv pip install -r requirements_mac.txtSi quieres usar Melo TTS, también debes ejecutar:
python -m unidic downloadLa tubería se puede ejecutar de dos maneras:
Ejecute la tubería en el servidor:
python s2s_pipeline.py --recv_host 0.0.0.0 --send_host 0.0.0.0Ejecute el cliente localmente para manejar la entrada de micrófono y recibir audio generado:
python listen_and_play.py --host < IP address of your server >python s2s_pipeline.py --local_mac_optimal_settingsEsta configuración:
--device mps para usar MP para todos los modelos.https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
docker compose up
Aproveche la compilación de la antorcha para Whisper y Parler-TTS. El uso de Parler-TTS permite la transmisión de salida de audio, sin embargo, reduce la latencia sobrealtada :
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 Por el momento, los modos que capturan gráficos CUDA no son compatibles con la transmisión de parler-tts ( reduce-overhead , max-autotune ).
La tubería actualmente es compatible con inglés, francés, español, chino, japonés y coreano.
Se consideran dos casos de uso:
--language , especificando el código de idioma de destino (el valor predeterminado es 'EN').--language a 'Auto'. En este caso, Whisper detecta el idioma para cada mensaje hablado, y se solicita al LLM con " Please reply to my message in ... " para asegurarse de que la respuesta esté en el lenguaje detectado.Tenga en cuenta que debe usar puntos de control STT y LLM compatibles con los idiomas de destino. Para la parte STT, Parler-TTS aún no es multilingüe (¡aunque esa característica llegará pronto?). Mientras tanto, debe usar Melo (que admite inglés, francés, español, chino, japonés y coreano) o chat-tts.
Para detección de lenguaje automático:
python s2s_pipeline.py
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct O para un idioma en particular, chino en este ejemplo
python s2s_pipeline.py
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct Para detección de lenguaje automático:
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 O para un idioma en particular, chino en este ejemplo
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 Nota: Referencias para todos los argumentos de CLI se pueden encontrar directamente en las clases de argumentos o ejecutando
python s2s_pipeline.py -h.
Ver clase ModulearGuments. Permite establecer:
--device común (si uno quiere que cada parte se ejecute en el mismo dispositivo)--mode local o serverVer Clase Vadhandlerarguments. Notablemente:
--thresh : valor umbral para activar la detección de actividad de voz.--min_speech_ms : duración mínima de la actividad de voz detectada que se considerará el habla.--min_silence_ms : la longitud mínima de los intervalos de silencio para segmentar el habla, equilibrar el corte de oraciones y la reducción de la latencia. model_name , torch_dtype y device están expuestos para cada implementación del discurso al texto, el modelo de idioma y el texto al habla. Especifique la parte de tubería específica con el prefijo correspondiente (por ejemplo, stt , lm o tts , verifique las clases de argumentos de las implementaciones para obtener más detalles).
Por ejemplo:
--lm_model_name google/gemma-2b-it Otros parámetros de generación del método de generación del modelo se pueden establecer utilizando el prefijo de la pieza + _gen_ , por ejemplo, --stt_gen_max_new_tokens 128 . Estos parámetros se pueden agregar a la clase de argumentos de la pieza de la tubería si ya no están expuestos.
@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} }
}