SOUND / Wav2Vec2

Wav2Vec2

reComputer RK3576

Engelse spraakherkenning met facebook/wav2vec2-base-960h, versneld met RKNN op reComputer RK3576 en RK3588.

38 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/rk3576-wav2vec2: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": "wav2vec2-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "wav2vec2-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 Engelse automatische spraakherkenning op basis van facebook/wav2vec2-base-960h. Gebruik de webinterface om een audiobestand te uploaden of audio op te nemen met de browsermicrofoon.

Stap A: images ophalen

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

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

Microfoontoestemming in de browser vereist vaak HTTPS of een vertrouwde context/localhost. Uploaden van bestanden blijft beschikbaar zonder microfoontoestemming en de container vereist geen toewijzing van /dev/snd op de host.

3. Inferentie via de opdrachtregel

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

Gebruik --platform rk3588 wanneer u vanuit de RK3588-bronmap werkt.


🔌 API-documentatie

Het project biedt synchrone transcriptie van geüploade audio. Vóór inferentie wordt audio omgezet naar mono 16 kHz, wordt stilte verwijderd, wordt het niveau genormaliseerd en wordt op clipping gecontroleerd.

1. Spraakherkenningsinterface

Endpoint: POST /api/models/wav2vec2/predict

Aanvraagparameters (Multipart/Form-Data):

  • file: Verplicht WAV-bestand of ander door libsndfile ondersteund audiobestand. De uploadlimiet is 64 MB.
  • beam_width: Optionele CTC-decodeerbreedte van 1 tot 32. De standaardwaarde is 8; 1 kiest greedy decodering.

Gebruiksvoorbeeld:

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

Antwoordformaat (JSON):

json
{
  "success": true,
  "model": "wav2vec2",
  "platform": "rk3576",
  "inference_time_ms": 812.4,
  "result": {
    "text": "EXAMPLE TRANSCRIPT",
    "frames": 999,
    "sample_rate": 16000,
    "original_duration_seconds": 4.2,
    "processed_duration_seconds": 4.0,
    "segments": 1,
    "beam_width": 8,
    "truncated": false,
    "warnings": []
  }
}

Het RKNN-model heeft een vaste invoerduur van 20 seconden. Langere opnamen worden in overlappende segmenten opgesplitst en samengevoegd, niet afgekapt. Een grotere beam_width verhoogt het decodeerwerk op de CPU en kan de transcriptie verbeteren; het RKNN-model verandert daardoor niet.

2. Interface voor systeemconfiguratie

Huidige configuratie ophalen

  • Endpoint: GET /api/config
  • Antwoord: {"beam_width": 8}

Configuratie bijwerken

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"beam_width": 1}'

Controleer met GET /api/health het actieve platform, de modelgereedheid, het geladen RKNN-bestand en de runtimefuncties. OpenAPI-documentatie staat op /docs.


🛠️ Handleiding voor ontwikkelaars (productieadvies)

Beschrijving van de code

  • web_service.py:
    • Web-API: handelt audiouploads vanuit de browser, microfoonopnamen, configuratie en synchrone transcriptie af.
    • Validatie: wijst lege bestanden, bestanden groter dan 64 MB en ongeldige beam-breedtes af.
  • task_runtime.py:
    • Audioverwerking: decodeert audio, zet deze om naar mono 16 kHz, verwijdert stilte, normaliseert niveaus en maakt overlappende segmenten van 20 seconden.
    • RKNN-inferentie: voert wav2vec2.rknn uit voor elk segment.
    • CTC-decoder: ondersteunt greedy en beam-search-decoding en voegt de segmenttranscripties samen.
  • inference.py: biedt eenmalige transcriptie via de opdrachtregel.

Modelbestanden

OnderdeelBestand
Wav2Vec2-modelmodel/wav2vec2.rknn
Voorbeeldaudiosamples/test.wav

Modellen wijzigen

  1. Plaats het geconverteerde model op model/wav2vec2.rknn.
  2. Behoud het invoercontract van vaste 20 seconden, mono 16 kHz en de volgorde van uitvoertokens die de meegeleverde CTC-woordenschat verwacht.
  3. Test zowel korte invoer als de segmentatie van overlappende lange audio voordat u de vervanging publiceert.

Het upstream-project levert momenteel één RKNN-model met vaste vorm per platform. beam_width wijzigt de decoder in plaats van een andere grootte of kwantisering te kiezen.

Lokale images bouwen

Voer dit uit vanuit de hoofdmap van reComputer-RK-CV:

bash
docker build -f docker/rk3576/wav2vec2.dockerfile \
    -t rk3576-wav2vec2:local src/rk3576_wav2vec2

docker build -f docker/rk3588/wav2vec2.dockerfile \
    -t rk3588-wav2vec2:local src/rk3588_wav2vec2

Invoer en uitvoer

Invoer: audio omgezet naar mono 16 kHz. Uitvoer: Engelse transcriptie, segmentdetails en inferentietijd.