SOUND / Zipformer
Zipformer
reComputer RK3588
Reconnaissance vocale bilingue chinois-anglais en continu avec Zipformer et 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-zipformer: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": "zipformer-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "zipformer-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 une reconnaissance vocale chinois-anglais. L'interface web prend en charge la transcription complète de fichiers téléversés et la transcription en continu du microphone du navigateur avec résultats partiels.
Étape A : récupérer les images
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-zipformer:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-zipformer: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-zipformer: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-zipformer:latestAccès via : http://<Board_IP>:8000
Le navigateur envoie le PCM du microphone par WebSocket ; aucun mappage de /dev/snd de l'hôte n'est donc nécessaire.
3. Inférence en ligne de commande
python inference.py --platform rk3576 --model_dir model \
--file samples/test.wavUtilisez --platform rk3588 lorsque vous exécutez le répertoire source RK3588.
🔌 Documentation de l'API
Le service fournit une interface REST pour transcrire des fichiers complets et une interface WebSocket pour le PCM en continu. OpenAPI documente les routes REST à http://<Board_IP>:8000/docs.
1. Interface de transcription de fichiers
Point d'accès : POST /api/models/zipformer/predict
Paramètres de la requête (Multipart/Form-Data) :
file: Fichier audio obligatoire. Le service le décode et le rééchantillonne à 16 kHz avant l'inférence. La limite de téléversement est 64 MB.
Exemple d'utilisation :
curl -X POST "http://127.0.0.1:8000/api/models/zipformer/predict" \
-F 'file=@samples/test.wav'Format de réponse (JSON) :
{
"success": true,
"model": "zipformer",
"platform": "rk3576",
"inference_time_ms": 164.3,
"result": {
"text": "example transcript",
"tokens": [12, 34],
"timestamps": [3, 8],
"audio_duration_seconds": 2.4,
"processed": true
}
}2. Interface de transcription en continu
Point d'accès : WS /api/models/zipformer/stream
Envoyez du PCM mono à 16 kHz, signé sur 16 bits et little-endian, sous forme de messages WebSocket binaires. Lorsque la capture est terminée, envoyez :
{"action":"stop"}Envoyez {"action":"reset"} pour abandonner la session en continu actuelle et recommencer. Les messages du serveur utilisent les types suivants :
ready: La session est prête et indiquesample_rate: 16000etformat: pcm_s16le.partial: Contient un résultat actualisé après le traitement d'une quantité suffisante d'audio.final: Contient le résultat complet après l'actionstop.error: Signale un cadrage PCM invalide ou une erreur d'exécution.
3. État et configuration du système
- Point d'accès de santé :
GET /api/health - Point d'accès de configuration :
GET /api/config - Réponse de configuration actuelle :
{}car Zipformer n'a aucun réglage modifiable à chaud.
L'envoi de données non vides à POST /api/config est rejeté. L'encodeur, le décodeur, le joiner et le vocabulaire sont chargés ensemble au démarrage du service.
🛠️ Guide du développeur (recommandations de production)
Description du code
web_service.py:- API REST : Décode l'audio téléversé et renvoie une transcription complète.
- API WebSocket : Maintient les sessions en continu et émet les messages ready, partial, final et error.
task_runtime.py:- Traitement audio : Crée des caractéristiques de bancs de filtres compatibles Kaldi pour de l'audio mono à 16 kHz.
- État du flux : Conserve les caches de l'encodeur, l'historique des tokens et les horodatages entre les fragments.
- Inférence RKNN : Exécute le pipeline de l'encodeur, du décodeur et du joiner.
inference.py: Fournit la transcription de fichiers en une exécution en ligne de commande.
Fichiers du modèle
| Composant | Fichier |
|---|---|
| Encodeur | model/encoder.rknn |
| Décodeur | model/decoder.rknn |
| Joiner | model/joiner.rknn |
| Vocabulaire bilingue | model/vocab.txt |
Modifier les modèles
- Placez les modèles convertis d'encodeur, de décodeur et de joiner dans
model/avec les noms de fichier ci-dessus. - Maintenez les trois fichiers RKNN alignés avec le même vocabulaire et le contrat de cache en continu.
- Vérifiez l'inférence sur fichiers complets et le flux WebSocket de PCM binaire.
Ces fichiers sont les étapes d'un pipeline Zipformer, pas des tailles de modèle alternatives. Le projet amont fournit actuellement un ensemble par plateforme, sans sélecteur distinct de quantification.
Construire les images locales
Exécutez depuis la racine de reComputer-RK-CV :
docker build -f docker/rk3576/zipformer.dockerfile \
-t rk3576-zipformer:local src/rk3576_zipformer
docker build -f docker/rk3588/zipformer.dockerfile \
-t rk3588-zipformer:local src/rk3588_zipformerEntrées et sorties
Entrée : fichiers audio ou PCM mono 16 kHz signé 16 bits petit-boutiste. Sortie : texte chinois-anglais, ID de jetons, horodatages et durée traitée.