SOUND / Zipformer
Zipformer
reComputer RK3576
Chinees-Engelse streaming-spraakherkenning met Zipformer en RKNN op reComputer RK3576 en RK3588.
Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.
Aan de slag
Armbian 26.8.7 Gnome of nieuwer met OTA overlayroot: Configureer de Docker-opslag voordat je containers start om overlay-mountfouten te voorkomen.
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:latestREST API
Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.
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())Modeldetails
Armbian 26.8.7 Gnome of nieuwer met OTA overlayroot: Configureer de Docker-opslag voordat je containers start om overlay-mountfouten te voorkomen.
Snel aan de slag
1. Docker installeren
Voer de volgende opdrachten uit op het ontwikkelbord om Docker te installeren:
# 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. Het project uitvoeren (één opdracht, voorbeeld van beide modi)
Dit project biedt Chinees-Engelse spraakherkenning. De webinterface ondersteunt volledige transcriptie van geüploade bestanden en streaming transcriptie via de browsermicrofoon met gedeeltelijke resultaten.
Stap A: images ophalen
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:latestStap B: met één opdracht starten
Voor 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:latestOpenen via: http://<Board_IP>:8000
Voor 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:latestOpenen via: http://<Board_IP>:8000
De browser verstuurt microfoon-PCM via WebSocket, dus toewijzing van /dev/snd
op de host is niet vereist.
3. Inferentie via de opdrachtregel
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wavGebruik --platform rk3588 wanneer u vanuit de RK3588-bronmap werkt.
🔌 API-documentatie
De service biedt een REST-interface voor volledige bestandstranscriptie en een WebSocket-interface voor streaming PCM. OpenAPI documenteert de REST-routes op http://<Board_IP>:8000/docs.
1. Bestandstranscriptie-interface
Endpoint: POST /api/models/zipformer/predict
Aanvraagparameters (Multipart/Form-Data):
file: Verplicht audiobestand. De service decodeert het bestand en resamplet het vóór inferentie naar 16 kHz. De uploadlimiet is 64 MB.
Gebruiksvoorbeeld:
curl -X POST "http://127.0.0.1:8000/api/models/zipformer/predict" \
-F 'file=@samples/test.wav'Antwoordformaat (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. Streamingtranscriptie-interface
Endpoint: WS /api/models/zipformer/stream
Verzend mono 16 kHz signed 16-bit little-endian PCM als binaire WebSocket-berichten. Verzend na afloop van de opname:
{"action":"stop"}Verzend {"action":"reset"} om de huidige streamingsessie te verwerpen en opnieuw te beginnen. Serverberichten gebruiken de volgende typen:
ready: De sessie is gereed en meldtsample_rate: 16000enformat: pcm_s16le.partial: Bevat een bijgewerkt resultaat nadat voldoende audio is verwerkt.final: Bevat het volledige resultaat na de actiestop.error: Meldt ongeldige PCM-framing of een runtimefout.
3. Systeemstatus en configuratie
- Health-endpoint:
GET /api/health - Configuratie-endpoint:
GET /api/config - Huidig configuratieantwoord:
{}, omdat Zipformer geen tijdens het uitvoeren wijzigbare runtime-instellingen heeft.
Niet-lege gegevens naar POST /api/config worden afgewezen. De encoder, decoder, joiner en woordenlijst worden samen geladen wanneer de service start.
🛠️ Handleiding voor ontwikkelaars (productieadvies)
Beschrijving van de code
web_service.py:- REST-API: decodeert geüploade audio en geeft een volledige transcriptie terug.
- WebSocket-API: beheert streamingsessies en verstuurt ready-, partial-, final- en error-berichten.
task_runtime.py:- Audioverwerking: maakt Kaldi-compatibele filterbankkenmerken voor mono 16 kHz audio.
- Streamingstatus: bewaart encodercaches, tokenhistorie en tijdstempels tussen chunks.
- RKNN-inferentie: voert de pipeline van encoder, decoder en joiner uit.
inference.py: biedt eenmalige bestandstranscriptie via de opdrachtregel.
Modelbestanden
| Onderdeel | Bestand |
|---|---|
| Encoder | model/encoder.rknn |
| Decoder | model/decoder.rknn |
| Joiner | model/joiner.rknn |
| Tweetalige woordenlijst | model/vocab.txt |
Modellen wijzigen
- Plaats de geconverteerde modellen van encoder, decoder en joiner in
model/met de bovenstaande bestandsnamen. - Houd alle drie de RKNN-bestanden afgestemd op dezelfde woordenlijst en hetzelfde streamingcachecontract.
- Controleer zowel inferentie op volledige bestanden als binaire PCM-streaming via WebSocket.
Deze bestanden zijn fasen van één Zipformer-pipeline en geen alternatieve modelgroottes. Het upstream-project levert momenteel één bundel per platform en geen aparte kwantiseringskiezer.
Lokale images bouwen
Voer dit uit vanuit de hoofdmap van reComputer-RK-CV:
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_zipformerInvoer en uitvoer
Invoer: audiobestanden of mono 16 kHz signed 16-bit little-endian PCM. Uitvoer: Chinees-Engelse tekst, token-ID’s, tijdstempels en verwerkte duur.