VoiceStreamAIは、WebSocket を使用したほぼリアルタイムのオーディオ ストリーミングと文字起こしを可能にする、Python 3 ベースのサーバーおよび JavaScript クライアント ソリューションです。このシステムは、正確な音声認識と処理のために、Huggingface の音声アクティビティ検出 (VAD) と OpenAI の Whisper モデル (デフォルトは Faster-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
「ボリューム」を使用すると、コンテナーを再実行するたびにハグフェイス モデルを再ダウンロードする必要がなくなります。これが必要ない場合は、次のようにしてください。
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
ウィスパーに変更できます)--host
: WebSocket サーバーのホスト アドレスを設定します (デフォルト: 127.0.0.1
)。--port
: サーバーがリッスンするポートを設定します (デフォルト: 8765
)。--certfile
: 安全な WebSocket を使用する場合の SSL 証明書 (証明書ファイル) へのパス (デフォルト: None
)--keyfile
: 安全な WebSocket を使用する場合の SSL キー ファイルへのパス (デフォルト: 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
: 文字起こしの言語を指定します。 「多言語」以外に設定すると、ウィスパー推論がその言語で強制的に行われます。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
最後に、プッシュしてプル リクエストを作成します。
このプロジェクトは寄付を募集しています。自由にリポジトリをフォークしてプル リクエストを送信してください。