SOUND / Zipformer

Zipformer

reComputer RK3576

Reconnaissance vocale bilingue chinois-anglais en continu avec Zipformer et RKNN sur reComputer RK3576 et RK3588.

18 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-zipformer: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": "zipformer-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
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 :

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

bash
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 :

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-zipformer: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-zipformer:latest

Accè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

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

Utilisez --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 :

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

Format de réponse (JSON) :

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 :

json
{"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 indique sample_rate: 16000 et format: 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'action stop.
  • 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

ComposantFichier
Encodeurmodel/encoder.rknn
Décodeurmodel/decoder.rknn
Joinermodel/joiner.rknn
Vocabulaire bilinguemodel/vocab.txt

Modifier les modèles

  1. Placez les modèles convertis d'encodeur, de décodeur et de joiner dans model/ avec les noms de fichier ci-dessus.
  2. Maintenez les trois fichiers RKNN alignés avec le même vocabulaire et le contrat de cache en continu.
  3. 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 :

bash
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_zipformer

Entré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.