音声テキスト変換(ASR) – アーキテクチャ設計
概要
ASR(自動音声認識)モジュールは FastAPI ベースのWebアプリケーションで、音声ファイルのテキスト変換とマイクによるリアルタイム認識機能を提供します。本モジュールはコア音声認識エンジンとして sherpa-onnx を使用し、中国語の音声認識に対応しています。
システムアーキテクチャ
+-------------------+
| Web浏览器前端 |
+-------------------+
|
HTTP/WebSocket
|
+-------------------+
| FastAPI服务器 |
+-------------------+
|
+-----+-----+
| |
| ASR核心 |<---> 配置管理
| 服务模块 |
+-----------+
|
+----+----+
| |
| VAD模块 | 音频处理
| |
+----+----+
|
sherpa-onnx
语音识别引擎
コアコンポーネント
1. メインアプリケーション(main.py)
- FastAPI アプリケーションのエントリポイント
- リアルタイム認識用 WebSocket エンドポイントの処理
- ファイルアップロード用 HTTP エンドポイントの処理
- アプリケーションのライフサイクル管理
- WebSocket 接続の管理
2. ASRコアサービス(app/asr.py)
- 音声ファイル認識機能
- マイクによるリアルタイム認識機能
- sherpa-onnx エンジンの統合
- VAD(音声区間検出)の統合
- 音声のリサンプリング処理
- 複数の音声フォーマットに対応(WAV、MP3、M4A、FLAC、OGG)
3. 設定管理(config/)
- YAML設定ファイルの解析(
config/config.yaml) - 設定クラスの定義と検証(
config/config_manager.py) - 設定のホットリロード対応
- デフォルト設定の生成
4. フロントエンド画面(static/)
- HTML ユーザーインターフェース(
static/index.html) - JavaScript クライアントロジック(
static/js/app.js) - CSS スタイル(
static/css/style.css) - WebSocket によるリアルタイム通信
- ファイルアップロード画面
実際のコード構成
asr/
├── app/
│ └── asr.py # ASR核心服务实现
├── config/
│ ├── config_manager.py # 配置管理器
│ └── config.yaml # 配置文件
├── docs/ # 文档
├── models/ # 模型文件
│ ├── asr/ # ASR模型
│ └── vad/ # VAD模型
├── static/ # 前端静态资源
│ ├── css/
│ ├── js/
│ └── index.html
├── main.py # 应用入口
├── requirements.txt # 依赖包
└── README.md # 项目说明
データフロー
音声ファイル認識の流れ
- ユーザーがWeb画面から音声ファイルをアップロードします
- FastAPI がファイルを受け取り、ASRサービスに渡します
- ASRサービスが音声フォーマットの判定と変換を行います
- soundfile/pydub を使用して音声フォーマットを解析します
- 音声を16kHzにリサンプリングします(モデルの要件)
- sherpa-onnx を呼び出して音声認識を行います
- 認識結果をフロントエンドに返します
マイクによるリアルタイム認識の流れ
- ユーザーが「リアルタイム認識開始」ボタンをクリックします
- ブラウザが WebSocket でサーバーに接続します
- ASRサービスが音声ストリームの監視を開始します(sounddevice)
- VAD(sherpa-onnx VAD)でリアルタイム音声データを処理します
- 音声区間を sherpa-onnx ASR モデルに送って認識します
- 認識結果を WebSocket でリアルタイムに送信します
- フロントエンドの JavaScript が結果を受信して表示します
技術スタック
- Webフレームワーク :FastAPI
- 音声認識 :sherpa-onnx(Paraformer モデル)
- VAD :Silero VAD(ONNXモデル、sherpa-onnx に統合)
- 音声処理 :sounddevice、soundfile、pydub、numpy
- フロントエンド :HTML、CSS、JavaScript(ネイティブ実装、フレームワーク不使用)
- 設定 :PyYAML
- 非同期処理:Python asyncio、threading
音声処理の詳細
サンプリングレートの処理
- ASRモデルには16kHzのサンプリングレートが必要です
- 入力デバイスのサンプリングレートを自動検出します
- リアルタイムのリサンプリングに対応しています(異なるサンプリングレートのデバイスと互換)
対応フォーマット
- WAV:直接対応
- MP3/M4A/FLAC/OGG:pydub で変換
- チャンネルの自動変換(ステレオからモノラルへ)
VAD処理
- Silero VAD モデルを使用
- 音声区間検出と無音区間による分割
- 適応的な音声セグメント処理
デプロイアーキテクチャ
客户端浏览器
↓ HTTP/WebSocket
负载均衡器 (可选)
↓
ASR应用服务器
↓
本地sherpa-onnx模型
パフォーマンス最適化
- メモリ管理:音声バッファを管理し、メモリリークを防ぎます
- スレッドセーフ:WebSocket コールバックはスレッドセーフな仕組みを使用します
- リソースの解放:アプリ終了時に音声デバイスとモデルのリソースを適切に解放します
- エラー処理:充実した例外処理とログ記録を備えています
ドキュメント