SOUND / Wav2Vec2

Wav2Vec2

reComputer RK3576

Reconocimiento de voz en inglés con facebook/wav2vec2-base-960h acelerado mediante RKNN en reComputer RK3576 y RK3588.

38 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-wav2vec2:latest

API REST

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

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "wav2vec2-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "wav2vec2-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 proporciona reconocimiento automático de voz en inglés basado en facebook/wav2vec2-base-960h. Use la interfaz web para cargar un archivo de audio o grabar con el micrófono del navegador.

Paso A: descargar las imágenes

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-wav2vec2:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-wav2vec2: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-wav2vec2: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-wav2vec2:latest

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

El permiso del micrófono del navegador suele requerir HTTPS o un contexto de confianza/localhost. La carga de archivos sigue disponible sin permiso de micrófono y el contenedor no requiere mapear /dev/snd del host.

3. Inferencia por línea de comandos

bash
python inference.py --platform rk3576 --model_dir model \
    --file samples/test.wav --beam_width 8

Use --platform rk3588 al ejecutar el directorio fuente de RK3588.


🔌 Documentación de la API

El proyecto proporciona transcripción síncrona del audio cargado. Antes de la inferencia, el audio se convierte a mono de 16 kHz, se recortan los silencios, se normaliza el nivel y se comprueba la saturación.

1. Interfaz de reconocimiento de voz

Punto de acceso: POST /api/models/wav2vec2/predict

Parámetros de la solicitud (Multipart/Form-Data):

  • file: Archivo WAV u otro audio compatible con libsndfile obligatorio. El límite de carga es 64 MB.
  • beam_width: Anchura opcional de decodificación CTC de 1 a 32. El valor predeterminado es 8; 1 selecciona decodificación voraz.

Ejemplo de uso:

bash
curl -X POST "http://127.0.0.1:8000/api/models/wav2vec2/predict" \
    -F 'file=@samples/test.wav' \
    -F 'beam_width=8'

Formato de respuesta (JSON):

json
{
  "success": true,
  "model": "wav2vec2",
  "platform": "rk3576",
  "inference_time_ms": 812.4,
  "result": {
    "text": "EXAMPLE TRANSCRIPT",
    "frames": 999,
    "sample_rate": 16000,
    "original_duration_seconds": 4.2,
    "processed_duration_seconds": 4.0,
    "segments": 1,
    "beam_width": 8,
    "truncated": false,
    "warnings": []
  }
}

El modelo RKNN tiene una entrada fija de 20 segundos. Las grabaciones más largas se dividen en segmentos superpuestos y se combinan en lugar de truncarse. Un beam_width mayor aumenta el trabajo de decodificación en la CPU y puede mejorar la transcripción; no cambia el modelo RKNN.

2. Interfaz de configuración del sistema

Obtener la configuración actual

  • Punto de acceso: GET /api/config
  • Respuesta: {"beam_width": 8}

Actualizar la configuración

bash
curl -X POST "http://127.0.0.1:8000/api/config" \
    -H 'Content-Type: application/json' \
    -d '{"beam_width": 1}'

Use GET /api/health para consultar la plataforma activa, la disponibilidad del modelo, el archivo RKNN cargado y las capacidades del entorno de ejecución. La documentación de OpenAPI está en /docs.


🛠️ Guía para desarrolladores (recomendaciones de producción)

Descripción del código

  • web_service.py:
    • API web: Gestiona cargas de audio del navegador, grabaciones de micrófono, configuración y transcripción síncrona.
    • Validación: Rechaza archivos vacíos, archivos de más de 64 MB y anchuras de búsqueda no válidas.
  • task_runtime.py:
    • Procesamiento de audio: Decodifica el audio, lo convierte a mono de 16 kHz, recorta los silencios, normaliza el nivel y crea segmentos superpuestos de 20 segundos.
    • Inferencia RKNN: Ejecuta wav2vec2.rknn para cada segmento.
    • Decodificador CTC: Admite decodificación voraz y búsqueda en haz, y combina las transcripciones de los segmentos.
  • inference.py: Proporciona transcripción de una sola ejecución por línea de comandos.

Archivos del modelo

ComponenteArchivo
Modelo Wav2Vec2model/wav2vec2.rknn
Audio de ejemplosamples/test.wav

Modificar los modelos

  1. Coloque el modelo convertido en model/wav2vec2.rknn.
  2. Conserve el contrato de entrada fija de 20 segundos, mono de 16 kHz y el orden de tokens de salida esperado por el vocabulario CTC incluido.
  3. Pruebe tanto entradas cortas como la segmentación superpuesta de audio largo antes de publicar el reemplazo.

Actualmente, el proyecto original proporciona un modelo RKNN de forma fija por plataforma. beam_width modifica el decodificador, no selecciona otro tamaño o cuantización.

Crear imágenes locales

Ejecute desde la raíz de reComputer-RK-CV:

bash
docker build -f docker/rk3576/wav2vec2.dockerfile \
    -t rk3576-wav2vec2:local src/rk3576_wav2vec2

docker build -f docker/rk3588/wav2vec2.dockerfile \
    -t rk3588-wav2vec2:local src/rk3588_wav2vec2

Entradas y salidas

Entrada: audio convertido a mono de 16 kHz. Salida: transcripción en inglés, detalles de segmentos y tiempo de inferencia.