SOUND / YAMNet

YAMNet

reComputer RK3588

Classification d’événements audio YAMNet parmi 521 classes AudioSet sur reComputer RK3576 et RK3588.

18 téléchargements
Précision
RKNN

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Armbian 26.8.7 Gnome ou version ultérieure avec OTA overlayroot : Configurez le stockage de Docker avant de lancer des conteneurs pour éviter les erreurs de montage overlay.

Déployer
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

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

Détails du modèle

Armbian 26.8.7 Gnome ou version ultérieure avec OTA overlayroot : Configurez le stockage de Docker avant de lancer des conteneurs pour éviter les erreurs de montage overlay.

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer Docker :

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. Exécuter le projet (une commande, aperçu à deux modes)

Ce projet classe l'audio parmi 521 classes AudioSet. L'interface web accepte les fichiers audio téléversés ou les enregistrements du microphone du navigateur et affiche à la fois les prédictions Top-K globales et une chronologie d'événements à fenêtre glissante.

Étape A : récupérer les images

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

Étape B : exécuter en une commande

Pour 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

Accès via : http://<Board_IP>:8000


Pour 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

Accès via : http://<Board_IP>:8000

L'enregistrement du navigateur est téléversé vers le service ; aucun mappage du périphérique audio de l'hôte n'est donc nécessaire.

3. Inférence en ligne de commande

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

Utilisez --platform rk3588 lorsque vous exécutez le répertoire source RK3588.


🔌 Documentation de l'API

L'API REST convertit l'audio en mono à 16 kHz et analyse des fenêtres fixes de 3 secondes. La durée d'entrée est limitée à 300 secondes.

1. Interface de classification d'événements audio

Point d'accès : POST /api/models/yamnet/predict

Paramètres de la requête (Multipart/Form-Data) :

  • file : Fichier audio obligatoire. La limite de téléversement est 64 MB.
  • topk : Nombre facultatif de classes aux scores les plus élevés, de 1 à 20. La valeur par défaut est 5.
  • threshold : Score minimal facultatif d'un événement, de 0 à 1. La valeur par défaut est 0.1.
  • hop_seconds : Intervalle facultatif entre fenêtres successives de 3 secondes, de 0.25 à 3 secondes. La valeur par défaut est 1 seconde.

Exemple d'utilisation :

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'

Format de réponse (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 contient les scores globaux, segments les résultats par fenêtre et events fusionne les fenêtres consécutives ayant la même classe principale.

2. Interface de configuration du système

Obtenir la configuration actuelle

  • Point d'accès : GET /api/config
  • Réponse par défaut : {"topk": 5, "threshold": 0.1, "hop_seconds": 1.0}

Mettre à jour la configuration

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

Utilisez GET /api/health pour examiner la plateforme active, le modèle chargé et les capacités de l'environnement d'exécution. La documentation OpenAPI interactive est à /docs.


🛠️ Guide du développeur (recommandations de production)

Description du code

  • web_service.py :
    • API web : Gère les fichiers téléversés, les enregistrements du navigateur, la configuration en cours d'exécution et les réponses de classification.
    • Validation : Applique les limites de téléversement, de durée et de paramètres.
  • task_runtime.py :
    • Traitement audio : Convertit l'entrée en mono à 16 kHz et planifie des fenêtres fixes de 3 secondes.
    • Classification : Exécute yamnet.rknn, classe 521 étiquettes et applique les réglages Top-K et de seuil.
    • Chronologie : Produit les segments par fenêtre et fusionne les événements consécutifs.
  • inference.py : Fournit la classification en une exécution en ligne de commande.

Fichiers du modèle

ComposantFichier
Modèle YAMNetmodel/yamnet.rknn
Étiquettes de classes AudioSetmodel/yamnet_class_map.txt

Modifier les modèles

  1. Placez le modèle converti à model/yamnet.rknn et la table alignée de 521 étiquettes à model/yamnet_class_map.txt.
  2. Préservez l'entrée mono à 16 kHz, fixe de 3 secondes, et l'ordre des classes de sortie.
  3. Testez les extraits courts, les entrées longues à fenêtre glissante et les bornes de chaque paramètre.

Le projet amont fournit actuellement un modèle RKNN par plateforme. topk, threshold et hop_seconds contrôlent le post-traitement et la planification des fenêtres, pas la taille ou la quantification du modèle.

Construire les images locales

Exécutez depuis la racine de 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

Entrées et sorties

Entrée : audio converti en mono 16 kHz. Sortie : prédictions globales, segments par fenêtre et événements audio fusionnés.