SOUND / YAMNet
YAMNet
reComputer RK3576
YAMNet-Audioereignisklassifizierung mit 521 AudioSet-Klassen auf reComputer RK3576 und RK3588.
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.
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:latestREST API
Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "yamnet-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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. 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
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:latestSchritt B: mit einem Befehl starten
Für 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-yamnet:latestAufruf: http://<Board_IP>:8000
Für 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-yamnet:latestAufruf: 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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --topk 5 --threshold 0.1 --hop_seconds 1Verwenden 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:
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):
{
"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
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.rknnaus, 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
| Komponente | Datei |
|---|---|
| YAMNet-Modell | model/yamnet.rknn |
| AudioSet-Klassenlabels | model/yamnet_class_map.txt |
Modelle ändern
- Legen Sie das konvertierte Modell unter
model/yamnet.rknnund die abgestimmte 521-Label-Map untermodel/yamnet_class_map.txtab. - Behalten Sie Mono mit 16 kHz, die feste 3-Sekunden-Eingabe und die Reihenfolge der Ausgabeklassen bei.
- 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:
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_yamnetEingaben und Ausgaben
Eingabe: in Mono mit 16 kHz konvertiertes Audio. Ausgabe: Gesamtvorhersagen, Fenstersegmente und zusammengeführte Audioereignisse.