SOUND / Zipformer

Zipformer

reComputer RK3576

Chinesisch-englische Streaming-Spracherkennung mit Zipformer und RKNN auf reComputer RK3576 und RK3588.

18 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Bereitstellen
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

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

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())

Modelldetails

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Schnellstart

1. Docker installieren

Führen Sie zur Installation von Docker folgende Befehle auf dem Entwicklungsboard aus:

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. Projekt ausführen (ein Befehl, Dual-Modus-Vorschau)

Dieses Projekt bietet chinesisch-englische Spracherkennung. Die Weboberfläche unterstützt die vollständige Transkription hochgeladener Dateien und die streamende Browser-Mikrofon-Transkription mit Teilergebnissen.

Schritt A: Images abrufen

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

Schritt B: mit einem Befehl starten

Für 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

Aufruf: http://<Board_IP>:8000


Für 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

Aufruf: http://<Board_IP>:8000

Der Browser sendet Mikrofon-PCM über WebSocket, daher ist keine Zuordnung des Host-Geräts /dev/snd erforderlich.

3. Inferenz über die Befehlszeile

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

Verwenden Sie im RK3588-Quellverzeichnis --platform rk3588.


🔌 API-Dokumentation

Der Dienst bietet eine REST-Schnittstelle für vollständige Dateitranskription und eine WebSocket-Schnittstelle für PCM-Streaming. OpenAPI dokumentiert die REST-Routen unter http://<Board_IP>:8000/docs.

1. Schnittstelle zur Dateitranskription

Endpunkt: POST /api/models/zipformer/predict

Anfrageparameter (Multipart/Form-Data):

  • file: Erforderliche Audiodatei. Der Dienst decodiert die Datei und resampelt sie vor der Inferenz auf 16 kHz. Die Uploadgrenze beträgt 64 MB.

Anwendungsbeispiel:

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

Antwortformat (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. Schnittstelle zur Streaming-Transkription

Endpunkt: WS /api/models/zipformer/stream

Senden Sie Mono-PCM mit 16 kHz, vorzeichenbehaftet, 16 Bit und Little-Endian als binäre WebSocket-Nachrichten. Wenn die Aufnahme abgeschlossen ist, senden Sie:

json
{"action":"stop"}

Senden Sie {"action":"reset"}, um die aktuelle Streaming-Sitzung zu verwerfen und neu zu beginnen. Servernachrichten verwenden die folgenden Typen:

  • ready: Die Sitzung ist bereit und meldet sample_rate: 16000 und format: pcm_s16le.
  • partial: Enthält ein aktualisiertes Ergebnis, sobald genügend Audio verarbeitet wurde.
  • final: Enthält das vollständige Ergebnis nach der Aktion stop.
  • error: Meldet ungültige PCM-Rahmung oder einen Laufzeitfehler.

3. Systemstatus und Konfiguration

  • Health-Endpunkt: GET /api/health
  • Konfigurationsendpunkt: GET /api/config
  • Aktuelle Konfigurationsantwort: {}, da Zipformer keine im Betrieb austauschbaren Laufzeiteinstellungen besitzt.

Nichtleere Daten an POST /api/config werden abgewiesen. Encoder, Decoder, Joiner und Vokabular werden beim Dienststart gemeinsam geladen.


🛠️ Entwicklerhandbuch (Empfehlungen für den Produktionseinsatz)

Codebeschreibung

  • web_service.py:
    • REST-API: Decodiert hochgeladenes Audio und gibt ein vollständiges Transkript zurück.
    • WebSocket-API: Verwaltet Streaming-Sitzungen und gibt ready-, partial-, final- und error-Nachrichten aus.
  • task_runtime.py:
    • Audioverarbeitung: Erzeugt Kaldi-kompatible Filterbank-Merkmale für Mono-16-kHz-Audio.
    • Streaming-Zustand: Bewahrt Encoder-Caches, Token-Historie und Zeitstempel über Chunk-Grenzen hinweg.
    • RKNN-Inferenz: Führt die Pipeline aus Encoder, Decoder und Joiner aus.
  • inference.py: Bietet einmalige Dateitranskription über die Befehlszeile.

Modelldateien

KomponenteDatei
Encodermodel/encoder.rknn
Decodermodel/decoder.rknn
Joinermodel/joiner.rknn
Zweisprachiges Vokabularmodel/vocab.txt

Modelle ändern

  1. Legen Sie die konvertierten Encoder-, Decoder- und Joiner-Modelle mit den obigen Dateinamen in model/ ab.
  2. Halten Sie alle drei RKNN-Dateien auf dasselbe Vokabular und denselben Streaming-Cache-Vertrag abgestimmt.
  3. Überprüfen Sie sowohl die Inferenz ganzer Dateien als auch das binäre PCM-WebSocket-Streaming.

Diese Dateien sind Stufen einer Zipformer-Pipeline und keine alternativen Modellgrößen. Das Upstream-Projekt bietet derzeit ein Paket pro Plattform und keinen separaten Quantisierungsauswahl-Parameter.

Lokale Images erstellen

Im Stammverzeichnis von reComputer-RK-CV ausführen:

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

Eingaben und Ausgaben

Eingabe: Audiodateien oder vorzeichenbehaftetes 16-Bit-Little-Endian-PCM, Mono, 16 kHz. Ausgabe: chinesisch-englischer Text, Token-IDs, Zeitstempel und verarbeitete Dauer.