HumansXドキュメントセンター 公式サイトへ ↗

音声テキスト変換 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               # 项目说明

データフロー

音声ファイル認識の流れ

  1. ユーザーが Web 画面から音声ファイルをアップロードします
  2. FastAPI がファイルを受け取り、ASR サービスに渡します
  3. ASR サービスが音声フォーマットの検出と変換を行います
  4. soundfile/pydub で音声フォーマットを解析します
  5. 音声を 16kHz にリサンプリングします(モデルの要件)
  6. sherpa-onnx を呼び出して音声認識を行います
  7. 認識結果をフロントエンドに返します

マイクからのリアルタイム認識の流れ

  1. ユーザーが「リアルタイム認識開始」ボタンをクリックします
  2. ブラウザが WebSocket でサーバーに接続します
  3. ASR サービスが音声ストリームの監視(sounddevice)を開始します
  4. リアルタイムの音声データを VAD(sherpa-onnx VAD)で処理します
  5. 音声区間を sherpa-onnx ASR モデルに送って認識します
  6. 認識結果を WebSocket でリアルタイムにプッシュします
  7. フロントエンドの 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模型

パフォーマンス最適化

  1. メモリ管理: 音声バッファを管理し、メモリリークを防止します
  2. スレッドセーフ: WebSocket のコールバックにスレッドセーフな仕組みを使用します
  3. リソース解放: アプリケーション終了時にオーディオデバイスとモデルのリソースを正しく解放します
  4. エラー処理: 充実した例外処理とログ記録