SOUND / Wav2Vec2
Wav2Vec2
reComputer RK3576
Reconocimiento de voz en inglés con facebook/wav2vec2-base-960h acelerado mediante RKNN en 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-wav2vec2:latestAPI REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "wav2vec2-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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:
# 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 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
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: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-wav2vec2: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-wav2vec2:latestAcceda 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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --beam_width 8Use --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;1selecciona decodificación voraz.
Ejemplo de uso:
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):
{
"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
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.rknnpara 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
| Componente | Archivo |
|---|---|
| Modelo Wav2Vec2 | model/wav2vec2.rknn |
| Audio de ejemplo | samples/test.wav |
Modificar los modelos
- Coloque el modelo convertido en
model/wav2vec2.rknn. - 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.
- 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:
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_wav2vec2Entradas y salidas
Entrada: audio convertido a mono de 16 kHz. Salida: transcripción en inglés, detalles de segmentos y tiempo de inferencia.