SOUND / YAMNet
YAMNet
reComputer RK3588
Classification d’événements audio YAMNet parmi 521 classes AudioSet sur reComputer RK3576 et RK3588.
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.
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:latestAPI REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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())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 :
# 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. 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
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 :
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:latestAccès via : http://<Board_IP>:8000
Pour 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:latestAccè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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --topk 5 --threshold 0.1 --hop_seconds 1Utilisez --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 :
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) :
{
"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
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
| Composant | Fichier |
|---|---|
| Modèle YAMNet | model/yamnet.rknn |
| Étiquettes de classes AudioSet | model/yamnet_class_map.txt |
Modifier les modèles
- Placez le modèle converti à
model/yamnet.rknnet la table alignée de 521 étiquettes àmodel/yamnet_class_map.txt. - Préservez l'entrée mono à 16 kHz, fixe de 3 secondes, et l'ordre des classes de sortie.
- 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 :
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_yamnetEntré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.