SOUND / Zipformer
Zipformer
reComputer RK3588
Chinesisch-englische Streaming-Spracherkennung mit Zipformer und RKNN auf reComputer RK3576 und RK3588.
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.
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:latestREST API
Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "zipformer-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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 docker2. 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
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:latestSchritt B: mit einem Befehl starten
Für RK3588:
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:latestAufruf: http://<Board_IP>:8000
Für RK3576:
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:latestAufruf: 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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wavVerwenden 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:
curl -X POST "http://127.0.0.1:8000/api/models/zipformer/predict" \
-F 'file=@samples/test.wav'Antwortformat (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:
{"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 meldetsample_rate: 16000undformat: pcm_s16le.partial: Enthält ein aktualisiertes Ergebnis, sobald genügend Audio verarbeitet wurde.final: Enthält das vollständige Ergebnis nach der Aktionstop.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
| Komponente | Datei |
|---|---|
| Encoder | model/encoder.rknn |
| Decoder | model/decoder.rknn |
| Joiner | model/joiner.rknn |
| Zweisprachiges Vokabular | model/vocab.txt |
Modelle ändern
- Legen Sie die konvertierten Encoder-, Decoder- und Joiner-Modelle mit den obigen
Dateinamen in
model/ab. - Halten Sie alle drei RKNN-Dateien auf dasselbe Vokabular und denselben Streaming-Cache-Vertrag abgestimmt.
- Ü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:
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_zipformerEingaben und Ausgaben
Eingabe: Audiodateien oder vorzeichenbehaftetes 16-Bit-Little-Endian-PCM, Mono, 16 kHz. Ausgabe: chinesisch-englischer Text, Token-IDs, Zeitstempel und verarbeitete Dauer.