SOUND / Zipformer

Zipformer

reComputer RK3588

reComputer RK3576およびRK3588上でRKNNにより高速化された中国語・英語ストリーミング音声認識モデル。

18 ダウンロード
精度
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-zipformer:latest

REST API

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

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

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "zipformer-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. プロジェクトの実行(単一コマンド、デュアルモードプレビュー)

このプロジェクトは中国語・英語の音声認識を提供します。Web 画面はアップロードファイルの全文文字起こしと、途中結果付きのブラウザーマイクによるストリーミング文字起こしに対応します。

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

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-zipformer:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-zipformer: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-zipformer: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-zipformer:latest

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

ブラウザーは WebSocket 経由でマイクの PCM を送るため、ホストの /dev/snd マッピングは不要です。

3. コマンドライン推論

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

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


🔌 API ドキュメント

サービスはファイル全体の文字起こし用 REST インターフェースと、ストリーミング PCM 用 WebSocket インターフェースを提供します。REST ルートは http://<Board_IP>:8000/docs の OpenAPI に記載されています。

1. ファイル文字起こしインターフェース

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

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

  • file:必須の音声ファイル。サービスは推論前にファイルをデコードして 16 kHz にリサンプリングします。アップロード上限は 64 MB です。

使用例:

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

レスポンス形式(JSON):

json
{
  "success": true,
  "model": "zipformer",
  "platform": "rk3576",
  "inference_time_ms": 164.3,
  "result": {
    "text": "example transcript",
    "tokens": [12, 34],
    "timestamps": [3, 8],
    "audio_duration_seconds": 2.4,
    "processed": true
  }
}

2. ストリーミング文字起こしインターフェース

エンドポイント: WS /api/models/zipformer/stream

モノラル 16 kHz、符号付き 16 ビット・リトルエンディアンの PCM をバイナリ WebSocket メッセージとして送信します。収録が完了したら、次を送ります:

json
{"action":"stop"}

{"action":"reset"} を送ると、現在のストリーミングセッションを破棄して再開始します。サーバーメッセージには以下の種類があります:

  • ready:セッションの準備完了を示し、sample_rate: 16000 と format: pcm_s16le を報告します。
  • partial:十分な音声を処理した後の更新結果を含みます。
  • final:stop 操作後の完成した結果を含みます。
  • error:不正な PCM フレーム構造またはランタイム障害を報告します。

3. システム状態と設定

  • ヘルスエンドポイント: GET /api/health
  • 設定エンドポイント: GET /api/config
  • 現在の設定レスポンス: {}。Zipformer に実行中に変更できるランタイム設定がないためです。

POST /api/config に空でないデータを送ると拒否されます。サービス起動時にエンコーダー、デコーダー、joiner、語彙をまとめて読み込みます。


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

コードの説明

  • web_service.py:
    • REST API:アップロード音声をデコードし、全文の文字起こしを返します。
    • WebSocket API:ストリーミングセッションを維持し、ready、partial、final、error メッセージを出力します。
  • task_runtime.py:
    • 音声処理:モノラル 16 kHz 音声から Kaldi 互換のフィルターバンク特徴を生成します。
    • ストリーミング状態:チャンク間でエンコーダーキャッシュ、トークン履歴、タイムスタンプを保持します。
    • RKNN 推論:エンコーダー、デコーダー、joiner のパイプラインを実行します。
  • inference.py:単発のコマンドラインファイル文字起こしを提供します。

モデルファイル

構成要素ファイル
エンコーダーmodel/encoder.rknn
デコーダーmodel/decoder.rknn
Joinermodel/joiner.rknn
二言語語彙model/vocab.txt

モデルの変更

  1. 上記のファイル名で、変換済みエンコーダー、デコーダー、joiner を model/ に配置します。
  2. 三つの RKNN ファイルは同じ語彙およびストリーミングキャッシュ仕様に対応させます。
  3. ファイル全体の推論と、バイナリ PCM の WebSocket ストリーミングの両方を検証します。

これらのファイルは 一本の Zipformer パイプラインの各段階であり、別サイズのモデルではありません。上流プロジェクトは現在、各プラットフォームに 一バンドルを提供しており、独立した量子化選択機能はありません。

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

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

bash
docker build -f docker/rk3576/zipformer.dockerfile \
    -t rk3576-zipformer:local src/rk3576_zipformer

docker build -f docker/rk3588/zipformer.dockerfile \
    -t rk3588-zipformer:local src/rk3588_zipformer

入力と出力

入力:音声ファイル、またはモノラル16 kHz符号付き16ビット・リトルエンディアンPCM。出力:中英テキスト、トークンID、タイムスタンプ、処理時間。