VoiceStreamAI ist eine auf Python 3 basierende Server- und JavaScript-Clientlösung, die Audio-Streaming und -Transkription nahezu in Echtzeit mithilfe von WebSocket ermöglicht. Das System nutzt die Sprachaktivitätserkennung (VAD) von Huggingface und das Whisper-Modell von OpenAI (schnelleres Flüstern ist die Standardeinstellung) für eine genaue Spracherkennung und -verarbeitung.
Hier erfahren Sie nicht im Detail, wie Sie CUDA in Docker verwenden, siehe zum Beispiel hier.
Dennoch sind dies die Befehle für 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
Sie können das Container-Image erstellen mit:
sudo docker build -t VoiceStreamAI .
Nachdem Sie Ihr VAD-Token erhalten haben (siehe nächste Abschnitte), führen Sie Folgendes aus:
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
Dank der „Volumen“-Funktion müssen Sie die Huggingface-Modelle nicht jedes Mal erneut herunterladen, wenn Sie den Container erneut ausführen. Wenn Sie dies nicht benötigen, verwenden Sie einfach:
sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
Um den VoiceStreamAI -Server einzurichten, benötigen Sie Python 3.8 oder höher und die folgenden Pakete:
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
Installieren Sie diese Pakete mit pip:
pip install -r requirements.txt
Für die Client-Seite benötigen Sie einen modernen Webbrowser mit JavaScript-Unterstützung.
Der VoiceStreamAI -Server kann über Befehlszeilenargumente angepasst werden, sodass Sie Komponenten, Host- und Porteinstellungen entsprechend Ihren Anforderungen festlegen können.
--vad-type
: Gibt den Typ der zu verwendenden Voice Activity Detection (VAD)-Pipeline an (Standard: pyannote
).--vad-args
: Eine JSON-Zeichenfolge, die zusätzliche Argumente für die VAD-Pipeline enthält. (erforderlich für pyannote
: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
: Gibt den Typ der zu verwendenden ASR-Pipeline (Automatische Spracherkennung) an (Standard: faster_whisper
).--asr-args
: Ein JSON-String, der zusätzliche Argumente für die ASR-Pipeline enthält (man kann zum Beispiel model_name
in whisper ändern)--host
: Legt die Hostadresse für den WebSocket-Server fest (Standard: 127.0.0.1
).--port
: Legt den Port fest, auf dem der Server lauscht (Standard: 8765
).--certfile
: Der Pfad zum SSL-Zertifikat (Zertifikatsdatei), wenn sichere WebSockets verwendet werden (Standard: None
)--keyfile
: Der Pfad zur SSL-Schlüsseldatei bei Verwendung sicherer WebSockets (Standard: None
)Zum Betrieb des Servers mit der Standardkonfiguration:
python3 -m src.main --vad-args ' {"auth_token": "vad token here"} '
Sie können alle Befehlszeilenoptionen mit dem folgenden Befehl anzeigen:
python3 -m src.main --help
client/index.html
in einem Webbrowser.ws://localhost:8765
).Sowohl die VAD- als auch die ASR-Komponenten können problemlos erweitert werden, um neue Techniken zu integrieren und Modelle mit einer anderen Schnittstelle als HuggingFace-Pipelines zu verwenden. Neue Verarbeitungs-/Chunking-Strategien können in server.py hinzugefügt und von den spezifischen Clients verwendet werden, die den Schlüssel „processing_strategy“ in der Konfiguration festlegen.
Die Sprachaktivitätserkennung (VAD) in VoiceStreamAI ermöglicht es dem System, innerhalb eines Audiostreams zwischen Sprach- und Nicht-Sprachsegmenten zu unterscheiden. Der Hauptzweck der Implementierung von VAD besteht darin, die Effizienz und Genauigkeit des Speech-to-Text-Prozesses zu verbessern:
VoiceStreamAI verwendet ein Huggingface VAD-Modell, um eine zuverlässige Erkennung von Sprache unter verschiedenen Audiobedingungen sicherzustellen.
Die Pufferungsstrategie ist darauf ausgelegt, ein Gleichgewicht zwischen der Verarbeitung nahezu in Echtzeit und der Gewährleistung einer vollständigen und genauen Erfassung von Sprachsegmenten herzustellen. So wird die Pufferung verwaltet:
In VoiceStreamAI kann jeder Kunde eine einzigartige Konfiguration haben, die den Transkriptionsprozess an seine spezifischen Bedürfnisse anpasst. Diese personalisierte Einrichtung wird über ein Nachrichtensystem erreicht, bei dem der JavaScript-Client Konfigurationsdetails an den Python-Server sendet. In diesem Abschnitt wird erläutert, wie diese Konfigurationen aufgebaut und übertragen werden.
Die Client-Konfiguration kann verschiedene Parameter wie Sprachpräferenz, Chunk-Länge und Chunk-Offset umfassen. Zum Beispiel:
language
: Gibt die Sprache für die Transkription an. Bei einer anderen Einstellung als „mehrsprachig“ wird die Whisper-Inferenz in dieser Sprache erzwungenprocessing_strategy
: Gibt die Art der Verarbeitung für diesen Client an, eine Art Strategiemuster. Die Strategie verwendet derzeit kein OOP, ist aber in einem if/else in server.py implementiertchunk_length_seconds
: Definiert die Länge jedes zu verarbeitenden Audio-Chunkschunk_offset_seconds
: Bestimmt die Stillezeit am Ende jedes Blocks, die zum Verarbeiten von Audio benötigt wird (verwendet von processing_strategy Nr. 1).Initialisierung : Wenn ein Client eine Verbindung mit dem Server initialisiert, kann er optional eine Konfigurationsnachricht senden. Diese Nachricht ist ein JSON-Objekt, das Schlüssel-Wert-Paare enthält, die die bevorzugten Einstellungen des Clients darstellen.
JavaScript-Client-Setup : Auf dem Demo-Client wird die Konfiguration aus den Elementen der Benutzeroberfläche (wie Dropdown-Listen und Eingabefeldern) erfasst. Sobald der Audiofluss beginnt, wird ein JSON-Objekt erstellt und über WebSocket an den Server gesendet. Zum Beispiel:
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 ) ) ;
}
Wenn Sie eine neue ASR-, Vad- oder Pufferstrategie implementieren, können Sie diese testen mit:
pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN= < VAD_TOKEN_HERE >
ASR_TYPE=faster_whisper python -m unittest test.server.test_server
Bitte stellen Sie sicher, dass die Endvariablen vorhanden sind, beispielsweise für das VAD-Authentifizierungstoken. Es gibt mehrere weitere Tests, beispielsweise für den Standalone-ASR.
Derzeit verarbeitet VoiceStreamAI Audio, indem es Blöcke in Dateien speichert und diese Dateien dann durch die Modelle laufen lässt.
Forken und klonen Sie dieses Repository. Installieren Sie Abhängigkeiten und zugehörige Tools.
pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g [email protected] [email protected]
Fügen Sie Ihre Änderungen zum Repository hinzu und führen Sie Codestilprüfungen manuell durch oder integrieren Sie sie in Ihre IDE/Ihren Editor.
# For Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/
# For JavaScript
jshint client/ * .js
eslint client/ * .js
Zum Schluss pushen und eine Pull-Anfrage erstellen.
Dieses Projekt ist offen für Beiträge. Fühlen Sie sich frei, das Repository zu forken und Pull-Requests einzureichen.