SOUND / Wav2Vec2
Wav2Vec2
reComputer RK3588
Reconnaissance vocale anglaise avec facebook/wav2vec2-base-960h accélérée par RKNN sur reComputer RK3576 et RK3588.
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.
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:latestAPI REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
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())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 :
# 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. 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
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 :
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:latestAccès via : http://<Board_IP>:8000
Pour 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:latestAccè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
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wav --beam_width 8Utilisez --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 ;1sélectionne le décodage glouton.
Exemple d'utilisation :
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) :
{
"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
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.rknnpour 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
| Composant | Fichier |
|---|---|
| Modèle Wav2Vec2 | model/wav2vec2.rknn |
| Audio d'exemple | samples/test.wav |
Modifier les modèles
- Placez le modèle converti à
model/wav2vec2.rknn. - 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.
- 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 :
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_wav2vec2Entrées et sorties
Entrée : audio converti en mono 16 kHz. Sortie : transcription anglaise, détails des segments et durée d’inférence.