SOUND / YAMNet

YAMNet

reComputer RK3576

Clasificación de eventos de audio YAMNet en 521 clases de AudioSet para reComputer RK3576 y RK3588.

18 descargas
Precisión
RKNN

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.

Desplegar
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

API REST

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

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

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:

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. 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

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

Paso B: ejecutar con un solo comando

Para 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

Acceda mediante: http://<Board_IP>:8000


Para 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

Acceda 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

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

Use --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:

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'

Formato de respuesta (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 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

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

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

ComponenteArchivo
Modelo YAMNetmodel/yamnet.rknn
Etiquetas de clases de AudioSetmodel/yamnet_class_map.txt

Modificar los modelos

  1. Coloque el modelo convertido en model/yamnet.rknn y el mapa alineado de 521 etiquetas en model/yamnet_class_map.txt.
  2. Conserve la entrada mono de 16 kHz, fija de 3 segundos, y el orden de las clases de salida.
  3. 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:

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

Entradas y salidas

Entrada: audio convertido a mono de 16 kHz. Salida: predicciones globales, segmentos por ventana y eventos de audio combinados.