VoiceStreamAI est une solution serveur et client JavaScript basée sur Python 3 qui permet la diffusion et la transcription audio en temps quasi réel à l'aide de WebSocket. Le système utilise la détection d'activité vocale (VAD) de Huggingface et le modèle Whisper d'OpenAI (le chuchotement plus rapide étant la valeur par défaut) pour une reconnaissance et un traitement précis de la parole.
Cela ne vous guidera pas en détail sur la façon d'utiliser CUDA dans Docker, voir par exemple ici.
Voici néanmoins les commandes pour Linux :
distribution= $( . /etc/os-release ; echo $ID$VERSION_ID )
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
&& curl -s -L https://nvidia.github.io/libnvidia-container/ $distribution /libnvidia-container.list |
sed ' s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g ' |
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Vous pouvez créer l'image du conteneur avec :
sudo docker build -t VoiceStreamAI .
Après avoir obtenu votre jeton VAD (voir sections suivantes), exécutez :
sudo docker volume create huggingface_models
sudo docker run --gpus all -p 8765:8765 -v huggingface_models:/root/.cache/huggingface -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
Le truc "volume" vous permettra de ne pas retélécharger les modèles huggingface à chaque fois que vous réexécutez le conteneur. Si vous n'en avez pas besoin, utilisez simplement :
sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
Pour configurer le serveur VoiceStreamAI , vous avez besoin de Python 3.8 ou version ultérieure et des packages suivants :
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
Installez ces packages en utilisant pip :
pip install -r requirements.txt
Côté client, vous avez besoin d’un navigateur Web moderne prenant en charge JavaScript.
Le serveur VoiceStreamAI peut être personnalisé via des arguments de ligne de commande, vous permettant de spécifier les paramètres des composants, de l'hôte et du port en fonction de vos besoins.
--vad-type
: Spécifie le type de pipeline de détection d'activité vocale (VAD) à utiliser (par défaut : pyannote
) .--vad-args
: Une chaîne JSON contenant des arguments supplémentaires pour le pipeline VAD. (obligatoire pour pyannote
: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
: Spécifie le type de pipeline de reconnaissance automatique de la parole (ASR) à utiliser (par défaut : faster_whisper
).--asr-args
: Une chaîne JSON contenant des arguments supplémentaires pour le pipeline ASR (on peut par exemple changer model_name
pour murmur)--host
: Définit l'adresse hôte du serveur WebSocket (par défaut : 127.0.0.1
).--port
: Définit le port sur lequel le serveur écoute (par défaut : 8765
).--certfile
: Le chemin d'accès au certificat SSL (fichier de certificat) si vous utilisez des websockets sécurisés (par défaut : None
)--keyfile
: Le chemin d'accès au fichier de clé SSL si vous utilisez des websockets sécurisés (par défaut : None
)Pour exécuter le serveur avec la configuration standard :
python3 -m src.main --vad-args ' {"auth_token": "vad token here"} '
Vous pouvez voir toutes les options de ligne de commande avec la commande :
python3 -m src.main --help
client/index.html
dans un navigateur Web.ws://localhost:8765
).Les composants VAD et ASR peuvent être facilement étendus pour intégrer de nouvelles techniques et utiliser des modèles avec une interface différente de celle des pipelines HuggingFace. De nouvelles stratégies de traitement/blocage peuvent être ajoutées dans server.py et utilisées par les clients spécifiques définissant la clé "processing_strategy" dans la configuration.
La détection d'activité vocale (VAD) dans VoiceStreamAI permet au système de distinguer les segments vocaux et non vocaux au sein d'un flux audio. L'objectif principal de la mise en œuvre du VAD est d'améliorer l'efficacité et la précision du processus de synthèse vocale :
VoiceStreamAI utilise un modèle Huggingface VAD pour garantir une détection fiable de la parole dans diverses conditions audio.
La stratégie de mise en mémoire tampon est conçue pour équilibrer le traitement en temps quasi réel et garantir une capture complète et précise des segments vocaux. Voici comment la mise en mémoire tampon est gérée :
Dans VoiceStreamAI , chaque client peut disposer d'une configuration unique qui adapte le processus de transcription à ses besoins spécifiques. Cette configuration personnalisée est réalisée via un système de messagerie où le client JavaScript envoie les détails de configuration au serveur Python. Cette section explique comment ces configurations sont structurées et transmises.
La configuration du client peut inclure divers paramètres tels que la préférence de langue, la longueur du bloc et le décalage du bloc. Par exemple:
language
: Spécifie la langue de transcription. S'il est défini sur autre chose que "multilingue", cela forcera l'inférence Whisper à être dans cette langue.processing_strategy
: Spécifie le type de traitement pour ce client, une sorte de modèle de stratégie. Pour l'instant, la stratégie n'utilise pas la POO mais elle est implémentée dans un if/else dans server.pychunk_length_seconds
: Définit la longueur de chaque morceau audio à traiterchunk_offset_seconds
: Détermine le temps de silence à la fin de chaque morceau nécessaire au traitement de l'audio (utilisé par la stratégie de traitement n° 1).Initialisation : Lorsqu'un client initialise une connexion avec le serveur, il peut éventuellement envoyer un message de configuration. Ce message est un objet JSON contenant des paires clé-valeur représentant les paramètres préférés du client.
Configuration du client JavaScript : sur le client de démonstration, la configuration est collectée à partir des éléments de l'interface utilisateur (comme les listes déroulantes et les champs de saisie). Une fois que l'audio commence à circuler, un objet JSON est créé et envoyé au serveur via WebSocket. Par exemple:
function sendAudioConfig ( ) {
const audioConfig = {
type : "config" ,
data : {
chunk_length_seconds : 5 ,
chunk_offset_seconds : 1 ,
processing_strategy : 1 ,
language : language ,
} ,
} ;
websocket . send ( JSON . stringify ( audioConfig ) ) ;
}
Lors de la mise en œuvre d'une nouvelle stratégie ASR, Vad ou Buffering, vous pouvez la tester avec :
pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN= < VAD_TOKEN_HERE >
ASR_TYPE=faster_whisper python -m unittest test.server.test_server
Veuillez vous assurer que les variables de fin sont en place, par exemple pour le jeton d'authentification VAD. Plusieurs autres tests sont en place, par exemple pour l'ASR autonome.
Actuellement, VoiceStreamAI traite l'audio en enregistrant des morceaux dans des fichiers, puis en exécutant ces fichiers via les modèles.
Forkez et clonez ce référentiel. Installez les dépendances et les outils associés.
pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g [email protected] [email protected]
Ajoutez vos modifications au référentiel et exécutez des vérifications de style de code manuellement, ou intégrez-les dans votre IDE/éditeur.
# For Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/
# For JavaScript
jshint client/ * .js
eslint client/ * .js
Enfin, poussez et créez une pull request.
Ce projet est ouvert aux contributions. N'hésitez pas à créer le référentiel et à soumettre des demandes d'extraction.