SOUND / Wav2Vec2

Wav2Vec2

reComputer RK3588

reComputer RK3576およびRK3588上でRKNNにより高速化されたfacebook/wav2vec2-base-960h英語音声認識モデル。

38 ダウンロード
精度
RKNN

使用しているデバイスを選択してください。セットアップガイドとドキュメントがそれに応じて更新されます。

はじめる

OTA overlayroot が有効な Armbian 26.8.7 Gnome 以降: コンテナを実行する前に Docker のストレージを設定してください overlay のマウントエラーを防ぐために必要です。

デプロイ
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-wav2vec2:latest

REST API

REST API を使用して推論を実行します。以下のコマンドをコピーしてください。

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "wav2vec2-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "wav2vec2-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

モデル詳細

OTA overlayroot が有効な Armbian 26.8.7 Gnome 以降: コンテナを実行する前に Docker のストレージを設定してください overlay のマウントエラーを防ぐために必要です。

クイックスタート

1. Docker のインストール

開発ボードで以下のコマンドを実行して Docker をインストールします:

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. プロジェクトの実行(単一コマンド、デュアルモードプレビュー)

このプロジェクトは facebook/wav2vec2-base-960h に基づく英語自動音声認識を提供します。Web 画面で音声ファイルをアップロードするか、ブラウザーのマイクで録音できます。

ステップ A:イメージの取得

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-wav2vec2:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-wav2vec2:latest

ステップ B:ワンクリックで実行

対象:RK3588:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-wav2vec2:latest

アクセス先: http://<Board_IP>:8000


対象:RK3576:

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-wav2vec2:latest

アクセス先: http://<Board_IP>:8000

ブラウザーのマイク権限には通常 HTTPS または信頼された環境・localhost が必要です。マイク権限がなくてもファイルをアップロードでき、コンテナにホストの /dev/snd をマッピングする必要はありません。

3. コマンドライン推論

bash
python inference.py --platform rk3576 --model_dir model \
    --file samples/test.wav --beam_width 8

RK3588 のソースディレクトリで実行する場合は --platform rk3588 を使用してください。


🔌 API ドキュメント

このプロジェクトはアップロードした音声を同期で文字起こしします。推論前にモノラル 16 kHz への変換、無音除去、音量の正規化、クリッピングの検査を行います。

1. 音声認識インターフェース

エンドポイント: POST /api/models/wav2vec2/predict

リクエストパラメータ(Multipart/Form-Data):

  • file:必須の WAV、または libsndfile 対応の音声ファイル。アップロード上限は 64 MB です。
  • beam_width:CTC デコード幅。省略可能で、範囲は 1~32、既定値は 8 です。1 は貪欲デコードを選択します。

使用例:

bash
curl -X POST "http://127.0.0.1:8000/api/models/wav2vec2/predict" \
    -F 'file=@samples/test.wav' \
    -F 'beam_width=8'

レスポンス形式(JSON):

json
{
  "success": true,
  "model": "wav2vec2",
  "platform": "rk3576",
  "inference_time_ms": 812.4,
  "result": {
    "text": "EXAMPLE TRANSCRIPT",
    "frames": 999,
    "sample_rate": 16000,
    "original_duration_seconds": 4.2,
    "processed_duration_seconds": 4.0,
    "segments": 1,
    "beam_width": 8,
    "truncated": false,
    "warnings": []
  }
}

RKNN モデルの入力は固定 20 秒です。長い録音は切り詰めずに重複する区間へ分割して結果を結合します。beam_width を大きくすると CPU 側のデコード処理が増え、文字起こしが改善する場合がありますが、RKNN モデル自体は変わりません。

2. システム設定インターフェース

現在の設定の取得

  • エンドポイント: GET /api/config
  • レスポンス: {"beam_width": 8}

設定の更新

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"beam_width": 1}'

GET /api/health で現在のプラットフォーム、モデルの準備状態、読み込み済み RKNN ファイル、ランタイムの機能を確認します。OpenAPI ドキュメントは /docs にあります。


🛠️ 開発者ガイド(本番環境向け推奨事項)

コードの説明

  • web_service.py:
    • Web API:ブラウザーからの音声アップロード、マイク録音、設定、同期文字起こしを処理します。
    • 検証:空ファイル、64 MB を超えるファイル、不正なビーム幅を拒否します。
  • task_runtime.py:
    • 音声処理:音声のデコード、モノラル 16 kHz への変換、無音除去、音量正規化を行い、重複する 20 秒区間を作成します。
    • RKNN 推論:各区間で wav2vec2.rknn を実行します。
    • CTC デコーダー:貪欲デコードとビームサーチに対応し、区間ごとの文字起こしを結合します。
  • inference.py:単発のコマンドライン文字起こしを提供します。

モデルファイル

構成要素ファイル
Wav2Vec2 モデルmodel/wav2vec2.rknn
サンプル音声samples/test.wav

モデルの変更

  1. 変換済みモデルを model/wav2vec2.rknn に配置します。
  2. 固定 20 秒、モノラル 16 kHz 入力と、同梱 CTC 語彙が想定する出力トークン順序を維持します。
  3. 置換モデルの公開前に、短い入力と長い音声の重複区間処理をテストします。

上流プロジェクトは現在、各プラットフォームに固定形状の RKNN モデルを 一つ提供しています。beam_width はデコーダーを変更するもので、別のサイズや量子化を選択するものではありません。

ローカルイメージのビルド

reComputer-RK-CV のルートディレクトリから実行します:

bash
docker build -f docker/rk3576/wav2vec2.dockerfile \
    -t rk3576-wav2vec2:local src/rk3576_wav2vec2

docker build -f docker/rk3588/wav2vec2.dockerfile \
    -t rk3588-wav2vec2:local src/rk3588_wav2vec2

入力と出力

入力:モノラル16 kHzに変換された音声。出力:英語の文字起こし、セグメント詳細、推論時間。