SOUND / YAMNet
YAMNet
reComputer RK3576
Clasificación de eventos de audio YAMNet en 521 clases de AudioSet para reComputer RK3576 y RK3588.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de 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/rk3576-yamnet:latestAPI REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
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())Detalles del modelo
Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.
Inicio rápido
1. Instalar Docker
Ejecute los siguientes comandos en la placa de desarrollo para instalar 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. Ejecutar el proyecto (un comando, vista previa de dos modos)
Este proyecto clasifica audio en 521 clases de AudioSet. La interfaz web acepta audio cargado o grabaciones del micrófono del navegador, y muestra tanto predicciones Top-K globales como una cronología de eventos con ventana deslizante.
Paso A: descargar las imágenes
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:latestPaso B: ejecutar con un solo comando
Para 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:latestAcceda mediante: http://<Board_IP>:8000
Para 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:latestAcceda mediante: http://<Board_IP>:8000
La grabación del navegador se carga en el servicio, por lo que no hace falta mapear el dispositivo de audio del host.
3. Inferencia por línea de comandos
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --topk 5 --threshold 0.1 --hop_seconds 1Use --platform rk3588 al ejecutar el directorio fuente de RK3588.
🔌 Documentación de la API
La API REST convierte el audio a mono de 16 kHz y analiza ventanas fijas de 3 segundos. La duración de entrada está limitada a 300 segundos.
1. Interfaz de clasificación de eventos de audio
Punto de acceso: POST /api/models/yamnet/predict
Parámetros de la solicitud (Multipart/Form-Data):
file: Archivo de audio obligatorio. El límite de carga es 64 MB.topk: Número opcional de clases con mayor puntuación, de 1 a 20. El valor predeterminado es 5.threshold: Puntuación mínima opcional del evento, de 0 a 1. El valor predeterminado es 0.1.hop_seconds: Separación opcional entre ventanas sucesivas de 3 segundos, de 0.25 a 3 segundos. El valor predeterminado es 1 segundo.
Ejemplo de uso:
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'Formato de respuesta (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 contiene las puntuaciones globales, segments contiene resultados por ventana y events combina ventanas consecutivas cuya clase principal es la misma.
2. Interfaz de configuración del sistema
Obtener la configuración actual
- Punto de acceso:
GET /api/config - Respuesta predeterminada:
{"topk": 5, "threshold": 0.1, "hop_seconds": 1.0}
Actualizar la configuración
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}'Use GET /api/health para consultar la plataforma activa, el modelo cargado y las capacidades del entorno de ejecución. La documentación interactiva de OpenAPI está en /docs.
🛠️ Guía para desarrolladores (recomendaciones de producción)
Descripción del código
web_service.py:- API web: Gestiona archivos cargados, grabaciones del navegador, configuración en tiempo de ejecución y respuestas de clasificación.
- Validación: Aplica los límites de carga, duración y parámetros.
task_runtime.py:- Procesamiento de audio: Convierte la entrada a mono de 16 kHz y programa ventanas fijas de 3 segundos.
- Clasificación: Ejecuta
yamnet.rknn, ordena 521 etiquetas y aplica los ajustes Top-K y de umbral. - Cronología: Produce segmentos por ventana y combina eventos consecutivos.
inference.py: Proporciona clasificación de una sola ejecución por línea de comandos.
Archivos del modelo
| Componente | Archivo |
|---|---|
| Modelo YAMNet | model/yamnet.rknn |
| Etiquetas de clases de AudioSet | model/yamnet_class_map.txt |
Modificar los modelos
- Coloque el modelo convertido en
model/yamnet.rknny el mapa alineado de 521 etiquetas enmodel/yamnet_class_map.txt. - Conserve la entrada mono de 16 kHz, fija de 3 segundos, y el orden de las clases de salida.
- Pruebe clips cortos, entradas largas con ventana deslizante y los límites de cada parámetro.
Actualmente, el proyecto original proporciona un modelo RKNN por plataforma. topk, threshold y hop_seconds controlan el posprocesamiento y la programación de ventanas, no el tamaño ni la cuantización del modelo.
Crear imágenes locales
Ejecute desde la raíz 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_yamnetEntradas y salidas
Entrada: audio convertido a mono de 16 kHz. Salida: predicciones globales, segmentos por ventana y eventos de audio combinados.