SOUND / Zipformer

Zipformer

reComputer RK3588

Chinees-Engelse streaming-spraakherkenning met Zipformer en RKNN op reComputer RK3576 en RK3588.

18 downloads
Precisie
RKNN

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.

Implementeren
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

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

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

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:

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. 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

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

Stap B: met één opdracht starten

Voor 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

Openen via: http://<Board_IP>:8000


Voor 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

Openen 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

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

Gebruik --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:

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

Antwoordformaat (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. 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:

json
{"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 meldt sample_rate: 16000 en format: pcm_s16le.
  • partial: Bevat een bijgewerkt resultaat nadat voldoende audio is verwerkt.
  • final: Bevat het volledige resultaat na de actie stop.
  • 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

OnderdeelBestand
Encodermodel/encoder.rknn
Decodermodel/decoder.rknn
Joinermodel/joiner.rknn
Tweetalige woordenlijstmodel/vocab.txt

Modellen wijzigen

  1. Plaats de geconverteerde modellen van encoder, decoder en joiner in model/ met de bovenstaande bestandsnamen.
  2. Houd alle drie de RKNN-bestanden afgestemd op dezelfde woordenlijst en hetzelfde streamingcachecontract.
  3. 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:

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

Invoer 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.