VoiceStreamAI是一种基于 Python 3 的服务器和 JavaScript 客户端解决方案,可使用 WebSocket 实现近实时音频流和转录。该系统采用 Huggingface 的语音活动检测 (VAD) 和 OpenAI 的 Whisper 模型(默认为更快的耳语)来实现准确的语音识别和处理。
本文不会详细指导您如何在 docker 中使用 CUDA,请参阅此处的示例。
不过,这些是 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
您可以使用以下方式构建容器映像:
sudo docker build -t VoiceStreamAI .
获取 VAD 令牌(请参阅下一节)后运行:
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
“体积”的东西将允许您不必在每次重新运行容器时重新下载 Huggingface 模型。如果你不需要这个,只需使用:
sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
要设置VoiceStreamAI服务器,您需要 Python 3.8 或更高版本以及以下软件包:
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
使用 pip 安装这些包:
pip install -r requirements.txt
对于客户端,您需要一个支持 JavaScript 的现代 Web 浏览器。
VoiceStreamAI服务器可以通过命令行参数进行自定义,允许您根据需要指定组件、主机和端口设置。
--vad-type
:指定要使用的语音活动检测 (VAD) 管道的类型(默认值: pyannote
)。--vad-args
:包含 VAD 管道附加参数的 JSON 字符串。 ( pyannote
必需: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
:指定要使用的自动语音识别 (ASR) 管道的类型(默认值: faster_whisper
)。--asr-args
:包含 ASR 管道附加参数的 JSON 字符串(例如,可以将model_name
更改为 Whisper)--host
:设置 WebSocket 服务器的主机地址(默认值: 127.0.0.1
)。--port
:设置服务器侦听的端口(默认值: 8765
)。--certfile
:如果使用安全 Websockets,则为 SSL 证书(证书文件)的路径(默认值: None
)--keyfile
:SSL 密钥文件的路径(如果使用安全 Websocket)(默认值: None
)使用标准配置运行服务器:
python3 -m src.main --vad-args ' {"auth_token": "vad token here"} '
您可以使用以下命令查看所有命令行选项:
python3 -m src.main --help
client/index.html
文件。ws://localhost:8765
)。VAD 和 ASR 组件都可以轻松扩展,以集成新技术并使用具有与 HuggingFace 管道不同的接口的模型。新的处理/分块策略可以添加到 server.py 中,并由在配置中设置“processing_strategy”键的特定客户端使用。
VoiceStreamAI中的语音活动检测 (VAD) 使系统能够区分音频流中的语音和非语音片段。实施VAD的主要目的是提高语音转文本过程的效率和准确性:
VoiceStreamAI使用 Huggingface VAD 模型来确保在不同音频条件下可靠地检测语音。
缓冲策略旨在平衡近实时处理和确保完整准确地捕获语音片段。以下是管理缓冲的方式:
在VoiceStreamAI中,每个客户端都可以拥有独特的配置,根据其特定需求定制转录过程。这种个性化设置是通过消息系统实现的,其中 JavaScript 客户端将配置详细信息发送到 Python 服务器。本节介绍如何构建和传输这些配置。
客户端配置可以包括各种参数,例如语言偏好、块长度和块偏移。例如:
language
:指定转录语言。如果设置为“多语言”以外的任何内容,它将强制 Whisper 推理使用该语言processing_strategy
:指定此客户端的处理类型,一种策略模式。目前的策略不使用 OOP,但它们是在 server.py 中的 if/else 中实现的chunk_length_seconds
:定义要处理的每个音频块的长度chunk_offset_seconds
:确定处理音频所需的每个块末尾的静默时间(由processing_strategy nr 1使用)。初始化:当客户端初始化与服务器的连接时,它可以选择发送配置消息。此消息是一个 JSON 对象,其中包含表示客户端首选设置的键值对。
JavaScript 客户端设置:在演示客户端上,配置是从用户界面元素(例如下拉列表和输入字段)收集的。一旦音频开始流动,就会创建一个 JSON 对象并通过 WebSocket 发送到服务器。例如:
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 ) ) ;
}
实施新的 ASR、Vad 或缓冲策略时,您可以使用以下方法进行测试:
pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN= < VAD_TOKEN_HERE >
ASR_TYPE=faster_whisper python -m unittest test.server.test_server
请确保最终变量已就位,例如 VAD 身份验证令牌。其他几项测试也已到位,例如独立 ASR 的测试。
目前, VoiceStreamAI通过将块保存到文件然后通过模型运行这些文件来处理音频。
分叉并克隆此存储库。安装依赖项和相关工具。
pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g [email protected] [email protected]
将您的修改添加到存储库并手动运行代码样式检查,或将它们集成到您的 IDE/编辑器中。
# For Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/
# For JavaScript
jshint client/ * .js
eslint client/ * .js
最后,推送并创建拉取请求。
该项目开放供稿。请随意分叉存储库并提交拉取请求。