SOUND / YAMNet

YAMNet

reComputer RK3576

YAMNet-audiogebeurtenisclassificatie over 521 AudioSet-klassen 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/rk3576-yamnet: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": "yamnet-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "yamnet-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 classificeert audio over 521 AudioSet-klassen. De webinterface accepteert geüploade audio of browsermicrofoonopnamen en toont zowel algemene Top-K-voorspellingen als een gebeurtenistijdlijn met een schuivend venster.

Stap A: images ophalen

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

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

Opnamen uit de browser worden naar de service geüpload, dus toewijzing van het audio-apparaat van de host is niet vereist.

3. Inferentie via de opdrachtregel

bash
python inference.py --platform rk3576 --model_dir model \
    --file samples/test.wav --topk 5 --threshold 0.1 --hop_seconds 1

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


🔌 API-documentatie

De REST-API zet audio om naar mono 16 kHz en analyseert vaste vensters van 3 seconden. De invoerduur is beperkt tot 300 seconden.

1. Interface voor classificatie van audiogebeurtenissen

Endpoint: POST /api/models/yamnet/predict

Aanvraagparameters (Multipart/Form-Data):

  • file: Verplicht audiobestand. De uploadlimiet is 64 MB.
  • topk: Optioneel aantal hoogst scorende klassen, van 1 tot 20. De standaardwaarde is 5.
  • threshold: Optionele minimale gebeurtenisscore, van 0 tot 1. De standaardwaarde is 0.1.
  • hop_seconds: Optionele afstand tussen opeenvolgende vensters van 3 seconden, van 0.25 tot 3 seconden. De standaardwaarde is 1 seconde.

Gebruiksvoorbeeld:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yamnet/predict" \
    -F 'file=@samples/test.wav' \
    -F 'topk=5' \
    -F 'threshold=0.1' \
    -F 'hop_seconds=1'

Antwoordformaat (JSON):

json
{
  "success": true,
  "model": "yamnet",
  "platform": "rk3576",
  "inference_time_ms": 76.1,
  "result": {
    "duration_seconds": 4.5,
    "sample_rate": 16000,
    "window_seconds": 3.0,
    "hop_seconds": 1.0,
    "top_class": {"id": 0, "label": "Speech", "score": 0.83},
    "predictions": [],
    "segments": [],
    "events": []
  }
}

predictions bevat totaalscores, segments de resultaten per venster en events voegt opeenvolgende vensters met dezelfde hoogst scorende klasse samen.

2. Interface voor systeemconfiguratie

Huidige configuratie ophalen

  • Endpoint: GET /api/config
  • Standaardantwoord: {"topk": 5, "threshold": 0.1, "hop_seconds": 1.0}

Configuratie bijwerken

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"topk": 10, "threshold": 0.2, "hop_seconds": 0.5}'

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


🛠️ Handleiding voor ontwikkelaars (productieadvies)

Beschrijving van de code

  • web_service.py:
    • Web-API: handelt geüploade bestanden, browseropnamen, runtimeconfiguratie en classificatieantwoorden af.
    • Validatie: dwingt de limieten voor upload, duur en parameters af.
  • task_runtime.py:
    • Audioverwerking: zet de invoer om naar mono 16 kHz en plant vaste vensters van 3 seconden.
    • Classificatie: voert yamnet.rknn uit, rangschikt 521 labels en past de Top-K- en drempelinstellingen toe.
    • Tijdlijn: levert segmenten per venster en voegt opeenvolgende gebeurtenissen samen.
  • inference.py: biedt eenmalige classificatie via de opdrachtregel.

Modelbestanden

OnderdeelBestand
YAMNet-modelmodel/yamnet.rknn
AudioSet-klassenlabelsmodel/yamnet_class_map.txt

Modellen wijzigen

  1. Plaats het geconverteerde model op model/yamnet.rknn en de afgestemde map met 521 labels op model/yamnet_class_map.txt.
  2. Behoud de vaste invoer van mono 16 kHz en 3 seconden en de volgorde van de uitvoerklassen.
  3. Test korte fragmenten, lange invoer met een schuivend venster en elke parametergrens.

Het upstream-project levert momenteel één RKNN-model per platform. topk, threshold en hop_seconds regelen nabewerking en de vensterplanning in plaats van modelgrootte of kwantisering.

Lokale images bouwen

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

bash
docker build -f docker/rk3576/yamnet.dockerfile \
    -t rk3576-yamnet:local src/rk3576_yamnet

docker build -f docker/rk3588/yamnet.dockerfile \
    -t rk3588-yamnet:local src/rk3588_yamnet

Invoer en uitvoer

Invoer: audio omgezet naar mono 16 kHz. Uitvoer: algemene voorspellingen, segmenten per venster en samengevoegde audiogebeurtenissen.