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
最後,推送並建立拉取請求。
本項目開放供稿。請隨意分叉儲存庫並提交拉取請求。