SOUND / Wav2Vec2
Wav2Vec2
reComputer RK3576
Engelse spraakherkenning met facebook/wav2vec2-base-960h, versneld met 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-wav2vec2: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": "wav2vec2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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 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
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: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-wav2vec2: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-wav2vec2:latestOpenen 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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --beam_width 8Gebruik --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;1kiest greedy decodering.
Gebruiksvoorbeeld:
curl -X POST "http://127.0.0.1:8000/api/models/wav2vec2/predict" \
-F 'file=@samples/test.wav' \
-F 'beam_width=8'Antwoordformaat (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
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.rknnuit 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
| Onderdeel | Bestand |
|---|---|
| Wav2Vec2-model | model/wav2vec2.rknn |
| Voorbeeldaudio | samples/test.wav |
Modellen wijzigen
- Plaats het geconverteerde model op
model/wav2vec2.rknn. - Behoud het invoercontract van vaste 20 seconden, mono 16 kHz en de volgorde van uitvoertokens die de meegeleverde CTC-woordenschat verwacht.
- 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:
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_wav2vec2Invoer en uitvoer
Invoer: audio omgezet naar mono 16 kHz. Uitvoer: Engelse transcriptie, segmentdetails en inferentietijd.