VoiceStreamAI es un servidor basado en Python 3 y una solución de cliente JavaScript que permite la transmisión y transcripción de audio casi en tiempo real mediante WebSocket. El sistema emplea la detección de actividad de voz (VAD) de Huggingface y el modelo Whisper de OpenAI (el susurro más rápido es el predeterminado) para un reconocimiento y procesamiento de voz precisos.
Esto no lo guiará en detalle sobre cómo usar CUDA en la ventana acoplable; consulte, por ejemplo, aquí.
Aún así, estos son los comandos para 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
Puedes construir la imagen del contenedor con:
sudo docker build -t VoiceStreamAI .
Después de obtener su token VAD (consulte las siguientes secciones), ejecute:
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
El "volumen" le permitirá no volver a descargar los modelos de Huggingface cada vez que vuelva a ejecutar el contenedor. Si no necesita esto, simplemente use:
sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
Para configurar el servidor VoiceStreamAI , necesita Python 3.8 o posterior y los siguientes paquetes:
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
Instale estos paquetes usando pip:
pip install -r requirements.txt
Para el lado del cliente, necesita un navegador web moderno con soporte para JavaScript.
El servidor VoiceStreamAI se puede personalizar mediante argumentos de línea de comando, lo que le permite especificar componentes, host y configuraciones de puerto según sus necesidades.
--vad-type
: especifica el tipo de canalización de detección de actividad de voz (VAD) que se utilizará (predeterminado: pyannote
).--vad-args
: una cadena JSON que contiene argumentos adicionales para la canalización VAD. (requerido para pyannote
: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
: especifica el tipo de canalización de reconocimiento automático de voz (ASR) que se utilizará (predeterminado: faster_whisper
).--asr-args
: una cadena JSON que contiene argumentos adicionales para la canalización ASR (por ejemplo, se puede cambiar model_name
por susurro)--host
: establece la dirección de host para el servidor WebSocket (predeterminado: 127.0.0.1
).--port
: establece el puerto en el que escucha el servidor (predeterminado: 8765
).--certfile
: la ruta al certificado SSL (archivo de certificado) si se utilizan websockets seguros (predeterminado: None
)--keyfile
: la ruta al archivo de clave SSL si se utilizan websockets seguros (predeterminado: None
)Para ejecutar el servidor con la configuración estándar:
python3 -m src.main --vad-args ' {"auth_token": "vad token here"} '
Puedes ver todas las opciones de la línea de comando con el comando:
python3 -m src.main --help
client/index.html
en un navegador web.ws://localhost:8765
).Tanto los componentes VAD como ASR se pueden ampliar fácilmente para integrar nuevas técnicas y utilizar modelos con una interfaz diferente a las tuberías de HuggingFace. Se pueden agregar nuevas estrategias de procesamiento/fragmentación en server.py y ser utilizadas por clientes específicos configurando la clave "processing_strategy" en la configuración.
La detección de actividad de voz (VAD) en VoiceStreamAI permite al sistema distinguir entre segmentos de voz y no habla dentro de una transmisión de audio. El objetivo principal de implementar VAD es mejorar la eficiencia y precisión del proceso de conversión de voz a texto:
VoiceStreamAI utiliza un modelo VAD de Huggingface para garantizar una detección confiable del habla en diversas condiciones de audio.
La estrategia de almacenamiento en búfer está diseñada para equilibrar el procesamiento casi en tiempo real y garantizar una captura completa y precisa de los segmentos de voz. Así es como se gestiona el almacenamiento en búfer:
En VoiceStreamAI , cada cliente puede tener una configuración única que adapta el proceso de transcripción a sus necesidades específicas. Esta configuración personalizada se logra a través de un sistema de mensajería donde el cliente JavaScript envía detalles de configuración al servidor Python. Esta sección explica cómo se estructuran y transmiten estas configuraciones.
La configuración del cliente puede incluir varios parámetros, como la preferencia de idioma, la longitud del fragmento y el desplazamiento del fragmento. Por ejemplo:
language
: especifica el idioma de la transcripción. Si se configura en cualquier otro idioma que no sea "multilenguaje", forzará que la inferencia de Whisper esté en ese idioma.processing_strategy
: especifica el tipo de procesamiento para este cliente, una especie de patrón de estrategia. La estrategia por ahora no utiliza programación orientada a objetos, pero se implementa en if/else en server.pychunk_length_seconds
: define la duración de cada fragmento de audio que se procesará.chunk_offset_seconds
: determina el tiempo de silencio al final de cada fragmento necesario para procesar el audio (utilizado por la estrategia_procesamiento n.º 1).Inicialización : cuando un cliente inicializa una conexión con el servidor, opcionalmente puede enviar un mensaje de configuración. Este mensaje es un objeto JSON que contiene pares clave-valor que representan la configuración preferida del cliente.
Configuración del cliente JavaScript : en el cliente de demostración, la configuración se recopila a partir de los elementos de la interfaz de usuario (como menús desplegables y campos de entrada). Una vez que el audio comienza a fluir, se crea un objeto JSON y se envía al servidor a través de WebSocket. Por ejemplo:
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 ) ) ;
}
Al implementar una nueva estrategia ASR, Vad o Buffering, puedes probarla con:
pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN= < VAD_TOKEN_HERE >
ASR_TYPE=faster_whisper python -m unittest test.server.test_server
Asegúrese de que las variables finales estén en su lugar, por ejemplo, para el token de autenticación VAD. Se han realizado otras pruebas, por ejemplo para el ASR independiente.
Actualmente, VoiceStreamAI procesa audio guardando fragmentos en archivos y luego ejecutando estos archivos a través de los modelos.
Bifurca y clona este repositorio. Instalar dependencias y herramientas relacionadas.
pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g [email protected] [email protected]
Agregue sus modificaciones al repositorio y ejecute comprobaciones de estilo de código manualmente, o intégrelas en su IDE/editor.
# For Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/
# For JavaScript
jshint client/ * .js
eslint client/ * .js
Finalmente, envíe y cree una solicitud de extracción.
Este proyecto está abierto a contribuciones. No dudes en bifurcar el repositorio y enviar solicitudes de extracción.