SOUND / Wav2Vec2

Wav2Vec2

reComputer RK3576

Reconnaissance vocale anglaise avec facebook/wav2vec2-base-960h accélérée par RKNN sur reComputer RK3576 et RK3588.

38 téléchargements
Précision
RKNN

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.

Déployer
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

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

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 :

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. Exécuter le projet (une commande, aperçu à deux modes)

Ce projet fournit la reconnaissance automatique de parole anglaise à partir de facebook/wav2vec2-base-960h. Utilisez l'interface web pour téléverser un fichier audio ou enregistrer avec le microphone du navigateur.

Étape A : récupérer les images

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

Étape B : exécuter en une commande

Pour 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

Accès via : http://<Board_IP>:8000


Pour 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

Accès via : http://<Board_IP>:8000

L'autorisation du microphone dans le navigateur nécessite souvent HTTPS ou un contexte de confiance/localhost. Le téléversement reste disponible sans autorisation du microphone ; le conteneur ne nécessite aucun mappage de /dev/snd de l'hôte.

3. Inférence en ligne de commande

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

Utilisez --platform rk3588 lorsque vous exécutez le répertoire source RK3588.


🔌 Documentation de l'API

Le projet fournit une transcription synchrone de l'audio téléversé. Avant l'inférence, l'audio est converti en mono à 16 kHz, les silences sont retirés, les niveaux sont normalisés et la saturation est contrôlée.

1. Interface de reconnaissance vocale

Point d'accès : POST /api/models/wav2vec2/predict

Paramètres de la requête (Multipart/Form-Data) :

  • file : Fichier WAV ou autre fichier audio pris en charge par libsndfile obligatoire. La limite de téléversement est 64 MB.
  • beam_width : Largeur facultative de décodage CTC, de 1 à 32. La valeur par défaut est 8 ; 1 sélectionne le décodage glouton.

Exemple d'utilisation :

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

Format de réponse (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": []
  }
}

Le modèle RKNN possède une entrée fixe de 20 secondes. Les enregistrements plus longs sont découpés en segments chevauchants, puis fusionnés au lieu d'être tronqués. Une valeur plus élevée de beam_width accroît le travail de décodage côté CPU et peut améliorer la transcription ; elle ne modifie pas le modèle RKNN.

2. Interface de configuration du système

Obtenir la configuration actuelle

  • Point d'accès : GET /api/config
  • Réponse : {"beam_width": 8}

Mettre à jour la configuration

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

Utilisez GET /api/health pour examiner la plateforme active, la disponibilité du modèle, le fichier RKNN chargé et les capacités de l'environnement d'exécution. La documentation OpenAPI est à /docs.


🛠️ Guide du développeur (recommandations de production)

Description du code

  • web_service.py :
    • API web : Gère les téléversements audio du navigateur, les enregistrements au microphone, la configuration et la transcription synchrone.
    • Validation : Rejette les fichiers vides, les fichiers de plus de 64 MB et les largeurs de faisceau invalides.
  • task_runtime.py :
    • Traitement audio : Décode l'audio, le convertit en mono à 16 kHz, retire les silences, normalise les niveaux et crée des segments chevauchants de 20 secondes.
    • Inférence RKNN : Exécute wav2vec2.rknn pour chaque segment.
    • Décodeur CTC : Prend en charge le décodage glouton et la recherche en faisceau, puis fusionne les transcriptions des segments.
  • inference.py : Fournit la transcription en une exécution en ligne de commande.

Fichiers du modèle

ComposantFichier
Modèle Wav2Vec2model/wav2vec2.rknn
Audio d'exemplesamples/test.wav

Modifier les modèles

  1. Placez le modèle converti à model/wav2vec2.rknn.
  2. Préservez le contrat d'entrée fixe de 20 secondes, mono à 16 kHz, et l'ordre des tokens de sortie attendu par le vocabulaire CTC inclus.
  3. Testez les entrées courtes et la segmentation chevauchante des audios longs avant de publier le remplacement.

Le projet amont fournit actuellement un modèle RKNN à forme fixe par plateforme. beam_width modifie le décodeur au lieu de sélectionner une autre taille ou quantification.

Construire les images locales

Exécutez depuis la racine 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

Entrées et sorties

Entrée : audio converti en mono 16 kHz. Sortie : transcription anglaise, détails des segments et durée d’inférence.