
Este repositório implementa um oleoduto em cascata de fala a fala que consiste nas seguintes partes:
O oleoduto fornece uma abordagem totalmente aberta e modular, com foco na alavancagem dos modelos disponíveis na Biblioteca Transformers no hub de rosto abraçados. O código foi projetado para facilitar a modificação e já suportamos implementações de bibliotecas específicas e externas de dispositivos:
Vad
STT
Llm
TTS
Clone o repositório:
git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speechInstale as dependências necessárias usando UV:
uv pip install -r requirements.txt Para usuários de Mac, use o arquivo requirements_mac.txt :
uv pip install -r requirements_mac.txtSe você quiser usar o Melo TTS, também precisa executar:
python -m unidic downloadO oleoduto pode ser executado de duas maneiras:
Execute o pipeline no servidor:
python s2s_pipeline.py --recv_host 0.0.0.0 --send_host 0.0.0.0Execute o cliente localmente para lidar com a entrada de microfone e receber áudio gerado:
python listen_and_play.py --host < IP address of your server >python s2s_pipeline.py --local_mac_optimal_settingsEsta configuração:
--device mps para usar MPS para todos os modelos.https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html
docker compose up
Aproveite a compilação da tocha para sussurros e parler-tts. O uso do Parler-TTS permite o streaming de saída de áudio, reduzindo a latência do Overeall :
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 No momento, os modos que capturam gráficos CUDA não são compatíveis com o streaming de parler-TTS ( reduce-overhead , max-autotune ).
Atualmente, o oleoduto suporta inglês, francês, espanhol, chinês, japonês e coreano.
Dois casos de uso são considerados:
--language , especificando o código do idioma de destino (o padrão é 'EN').--language para 'Auto'. Nesse caso, o Whisper detecta o idioma para cada prompt falado, e o LLM é solicitado com " Please reply to my message in ... " para garantir que a resposta esteja no idioma detectado.Observe que você deve usar pontos de verificação STT e LLM compatíveis com o (s) idioma (s) de destino. Para a parte STT, o Parler-TTS ainda não é multilíngue (embora esse recurso esteja chegando em breve!?). Enquanto isso, você deve usar Melo (que suporta inglês, francês, espanhol, chinês, japonês e coreano) ou bate-papo.
Para detecção automática de linguagem:
python s2s_pipeline.py
--stt_model_name large-v3
--language auto
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct Ou para um idioma em particular, chinês neste exemplo
python s2s_pipeline.py
--stt_model_name large-v3
--language zh
--mlx_lm_model_name mlx-community/Meta-Llama-3.1-8B-Instruct Para detecção automática de linguagem:
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 para um idioma em particular, chinês neste exemplo
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: As referências para todos os argumentos da CLI podem ser encontradas diretamente nas classes de argumentos ou executando
python s2s_pipeline.py -h.
Consulte Classe de Modulearments. Permite definir:
--device (se alguém deseja que cada parte seja executada no mesmo dispositivo)--mode local ou serverVeja a classe VadHandlerRarguments. Notavelmente:
--thresh : Valor limite para acionar a detecção de atividades de voz.--min_speech_ms : duração mínima da atividade de voz detectada a ser considerada fala.--min_silence_ms : Comprimento mínimo de intervalos de silêncio para segmentar a fala, equilibrando o corte das frases e a redução de latência. model_name , torch_dtype e device são expostos a cada implementação do discurso em texto, modelo de idioma e texto para a fala. Especifique a parte do pipeline direcionada com o prefixo correspondente (por exemplo, stt , lm ou tts , verifique as classes de argumentos das implementações para obter mais detalhes).
Por exemplo:
--lm_model_name google/gemma-2b-it Outros parâmetros de geração do método de geração do modelo podem ser definidos usando o prefixo da peça + _gen_ , por exemplo, --stt_gen_max_new_tokens 128 . Esses parâmetros podem ser adicionados à classe de argumentos da parte do pipeline, se ainda não estiver exposta.
@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} }
}