dimastatz/whisper-flow
Whisper-Flow is a framework designed to enable real-time transcription of audio content using OpenAI’s Whisper model. Rather than processing entire files after upload (“batch mode”), Whisper-Flow accepts a continuous stream of audio chunks and produces incremental transcripts immediately.
Whisper Flow – OpenAI Whisper を基盤としたリアルタイム音声認識
何ができるか – Whisper Flow は OpenAI Whisper の音声認識モデルを、WebSocket を通じてライブ音声ストリームを受け取り、部分的・最終的な認識結果を JSON 形式で返す軽量な FastAPI サービスでラップしています。通常はファイル全体を処理する Whisper を、低遅延のストリーミング ASR エンジンに変換します。
動作方法
- クライアントは
ws://<host>:8181/wsを開き、バイナリフレームで 16 kHz、モノラル、int16 の PCM 音声を送信します。 - サーバーは受信したチャンクをバッファリングし、時間窓(タブリングウィンドウ)にグループ化して、各セグメントに対して Whisper を実行します。
- 各推論処理の後、JSON ペイロードが戻されます:
{"is_partial": true|false, "data": {"text": "…"}, "time": <ms>}is_partialは、出力がまだ変更される可能性があるかどうかを示します。音声の停止、ウィンドウ制限の到達、またはクライアントがflush/stopコントロールフレームを送信したときに最終結果が発行されます。 - 小さな HTTP エンドポイント(
GET /ready)は、プロトコルバージョンと利用可能な Whisper モデルファイルを報告します。
主要コンポーネント
| モジュール | 役割 |
|---|---|
whisperflow.transcriber |
Whisper モデル(デフォルトは tiny.en.pt)を読み込み、同期(transcribe_pcm_chunks)および非同期(transcribe_pcm_chunks_async)のヘルパーを提供します。 |
whisperflow.streaming |
TranscribeSession を実装し、クライアントごとの状態を管理し、音声チャンクをバッファリングし、トランスクリプターを呼び出し、WebSocket に JSON 結果を送信します。 |
| FastAPI サーバー | WebSocket エンドポイント、ヘルスチェック(/health)、バッチ認識用 POST(/transcribe_pcm_chunk)を公開します。 |
導入方法
- インストール – Python 3.8+、PortAudio(PyAudio 用)、その後
./run.sh -localを実行します。これにより仮想環境が作成され、requirements.txtのインストール、フォーマット、Lint、テストスイートの実行が行われます。 - 実行 –
./run.sh -run-serverでポート 8181 でサービスを起動します。http://localhost:8181/healthで確認してください。 - 利用 – いずれかの方法で使用できます:WebSocket クライアントで PCM 音声ストリームを送信する、またはパッケージをインストール(
pip install whisperflow)して README の例のようにライブラリを直接呼び出す。
パフォーマンス – Apple M1(16 GB RAM)上で LibriSpeech を用いたベンチマークでは、平均遅延は部分結果あたり約 275 ms、単語誤り率(WER)は約 7 % であり、1 秒未満のリアルタイム要件を満たしています。
デプロイオプション
- Docker –
./run.sh -dockerでイメージ(whisperflow-image)をビルドし、ポート 8181 を公開するコンテナを実行します。 - Python パッケージ – ライブラリは他のプロジェクトにインポート可能で、カスタム WebSocket サーバーの構築や既存のパイプラインとの統合が可能です。
ロードマップ – v1.3 では、py‑speech エコシステム全体を通じてパッケージを公開することを目指しています。
すべての詳細はリポジトリの README から直接取得されています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト