SOUND / YAMNet

YAMNet

reComputer RK3588

YAMNet-Audioereignisklassifizierung mit 521 AudioSet-Klassen auf reComputer RK3576 und RK3588.

18 Downloads
Präzision
RKNN

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Bereitstellen
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

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

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

Modelldetails

Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.

Schnellstart

1. Docker installieren

Führen Sie zur Installation von Docker folgende Befehle auf dem Entwicklungsboard aus:

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. Projekt ausführen (ein Befehl, Dual-Modus-Vorschau)

Dieses Projekt klassifiziert Audio über 521 AudioSet-Klassen. Die Weboberfläche akzeptiert hochgeladenes Audio oder Browser-Mikrofonaufnahmen und zeigt sowohl die Gesamt-Top-K-Vorhersagen als auch eine Ereigniszeitleiste mit gleitenden Fenstern an.

Schritt A: Images abrufen

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

Schritt B: mit einem Befehl starten

Für 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

Aufruf: http://<Board_IP>:8000


Für 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

Aufruf: http://<Board_IP>:8000

Browser-Aufnahmen werden an den Dienst hochgeladen, daher ist keine Zuordnung von Host-Audiogeräten erforderlich.

3. Inferenz über die Befehlszeile

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

Verwenden Sie im RK3588-Quellverzeichnis --platform rk3588.


🔌 API-Dokumentation

Die REST-API konvertiert Audio in Mono mit 16 kHz und analysiert feste Fenster von 3 Sekunden. Die Eingabedauer ist auf 300 Sekunden begrenzt.

1. Schnittstelle zur Klassifikation von Audioereignissen

Endpunkt: POST /api/models/yamnet/predict

Anfrageparameter (Multipart/Form-Data):

  • file: Erforderliche Audiodatei. Die Uploadgrenze beträgt 64 MB.
  • topk: Optionale Anzahl der Klassen mit den höchsten Bewertungen von 1 bis 20. Der Standardwert ist 5.
  • threshold: Optionale Mindestbewertung eines Ereignisses von 0 bis 1. Der Standardwert ist 0.1.
  • hop_seconds: Optionaler Abstand zwischen aufeinanderfolgenden Fenstern von 3 Sekunden, von 0.25 bis 3 Sekunden. Der Standardwert ist 1 Sekunde.

Anwendungsbeispiel:

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'

Antwortformat (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 enthält Gesamtbewertungen, segments die Ergebnisse je Fenster; events führt aufeinanderfolgende Fenster mit derselben bestbewerteten Klasse zusammen.

2. Schnittstelle zur Systemkonfiguration

Aktuelle Konfiguration abrufen

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

Konfiguration aktualisieren

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}'

Prüfen Sie mit GET /api/health die aktive Plattform, das geladene Modell und die Laufzeitfunktionen. Die interaktive OpenAPI-Dokumentation befindet sich unter /docs.


🛠️ Entwicklerhandbuch (Empfehlungen für den Produktionseinsatz)

Codebeschreibung

  • web_service.py:
    • Web-API: Verarbeitet hochgeladene Dateien, Browser-Aufnahmen, die Laufzeitkonfiguration und Klassifikationsantworten.
    • Validierung: Setzt Upload-, Dauer- und Parametergrenzen durch.
  • task_runtime.py:
    • Audioverarbeitung: Konvertiert die Eingabe in Mono mit 16 kHz und plant feste 3-Sekunden-Fenster.
    • Klassifikation: Führt yamnet.rknn aus, bewertet 521 Labels und wendet die Top-K- und Threshold-Einstellungen an.
    • Zeitleiste: Erzeugt Segmente je Fenster und führt aufeinanderfolgende Ereignisse zusammen.
  • inference.py: Bietet einmalige Klassifikation über die Befehlszeile.

Modelldateien

KomponenteDatei
YAMNet-Modellmodel/yamnet.rknn
AudioSet-Klassenlabelsmodel/yamnet_class_map.txt

Modelle ändern

  1. Legen Sie das konvertierte Modell unter model/yamnet.rknn und die abgestimmte 521-Label-Map unter model/yamnet_class_map.txt ab.
  2. Behalten Sie Mono mit 16 kHz, die feste 3-Sekunden-Eingabe und die Reihenfolge der Ausgabeklassen bei.
  3. Testen Sie kurze Clips, lange Eingaben mit gleitenden Fenstern und jede Parametrgrenze.

Das Upstream-Projekt bietet derzeit ein RKNN-Modell pro Plattform. topk, threshold und hop_seconds steuern die Nachverarbeitung und die Fensterplanung statt der Modellgröße oder Quantisierung.

Lokale Images erstellen

Im Stammverzeichnis von reComputer-RK-CV ausführen:

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

Eingaben und Ausgaben

Eingabe: in Mono mit 16 kHz konvertiertes Audio. Ausgabe: Gesamtvorhersagen, Fenstersegmente und zusammengeführte Audioereignisse.