SOUND / Whisper

Whisper

Modèle de reconnaissance vocale robuste via OpenAI Whisper.

115 téléchargements
Taille
~49MB+162.6MB
Mémoire
2GB+
Précision
INT8

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
sudo docker run --rm \
  --name rk3588-whisper \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-whisper:latest \
  python3 web_service.py

API REST

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

Curl
curl -X POST "http://127.0.0.1:8000/api/models/whisper/task" -F "file=@/home/user/audio/long_podcast.wav" -F "language=zh"
Python
import requests
import json
resp = requests.post(
    "http://127.0.0.1:8000/api/models/whisper/predict",
    files={"file": open("/home/user/audio/test_en.wav", "rb")},
    data={"language": "en"},
    timeout=30
)
result = resp.json()
print(json.dumps(result, indent=2, ensure_ascii=False))

Détails du modèle

reComputer RK

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer Docker :

bash
# Télécharger le script d'installation
curl -fsSL https://get.docker.com -o get-docker.sh
# Installer en utilisant le miroir Aliyun
sudo sh get-docker.sh --mirror Aliyun
# Démarrer Docker et activer le démarrage automatique
sudo systemctl enable docker
sudo systemctl start docker

2. Exécuter le projet (Une commande, aperçu double mode)

Ce projet prend en charge l'accès via Navigateur Web. Le programme sert automatiquement une interface web pour la reconnaissance vocale.

Étape A : Télécharger les images

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-whisper:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-whisper:latest

Étape B : Exécuter en un clic

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 \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-whisper:latest \
    python3 web_service.py

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 \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-whisper:latest \
    python3 web_service.py

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


🔌 Documentation de l'API

Ce projet fournit des interfaces RESTful pour les tâches de reconnaissance vocale, prenant en charge la transcription synchrone et asynchrone de fichiers audio.

1. Interface de transcription synchrone (Audio court)

Point de terminaison : POST /api/models/whisper/predict

Adapté aux fichiers audio de moins de 20 secondes.

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

  • file : (Requis) Fichier audio à transcrire (par exemple, .wav, .mp3).
  • language : (Optionnel) Code de langue cible (par exemple, en, zh). Si différent du modèle actuel, il remplacera à chaud le tokenizer.

Exemples d'utilisation :

bash
curl -X POST "http://127.0.0.1:8000/api/models/whisper/predict" \
     -F "file=@/home/user/audio/test_en.wav" \
     -F "language=en"

Format de réponse (JSON) :

json
{
  "status": "success",
  "data": {
    "text": "Hello world, this is a test.",
    "language": "en",
    "duration": 3.5,
    "inference_time": 0.8
  }
}

2. Interface de transcription asynchrone (Audio long)

Point de terminaison : POST /api/models/whisper/task

Crée une tâche asynchrone pour traiter des fichiers audio/vidéo plus longs.

Exemples d'utilisation :

bash
curl -X POST "http://127.0.0.1:8000/api/models/whisper/task" \
     -F "file=@/home/user/audio/long_podcast.wav" \
     -F "language=zh"

Format de réponse (JSON) :

json
{
  "status": "success",
  "data": {
    "task_id": "29c7b932-a77f-480c-a18b-8a958c7911c3",
    "message": "Task created successfully. Poll /api/models/whisper/task/{task_id} for status."
  }
}

3. Interrogation de l'état d'une tâche

Point de terminaison : GET /api/models/whisper/task/{task_id}

Exemples d'utilisation :

bash
curl "http://127.0.0.1:8000/api/models/whisper/task/29c7b932-a77f-480c-a18b-8a958c7911c3"

4. Interface de configuration système (Config)

Utilisée pour changer dynamiquement de modèles et de langues.

Obtenir l'état actuel du système

  • Point de terminaison : GET /api/system/status
  • Réponse : {"status": "success", "data": {"model_size": "base", "language": "en", "max_tokens": 12, "rknn_lite_available": true}}

Mettre à jour la configuration système (Remplacement à chaud)

  • Point de terminaison : POST /api/system/config
  • Paramètres de la requête (Form-Data) : model_size=base, language=zh
  • Réponse : {"status": "success", "message": "Successfully loaded base model."}

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

Description du code

  • web_service.py :
    • API Web : Intègre FastAPI, prenant en charge le téléchargement audio, la file d'attente de tâches asynchrones et le remplacement à chaud de modèles.
    • Inférence RKNN : Encapsule l'initialisation RKNN pour les modèles Encodeur et Décodeur. Implémente la boucle de génération autorégressive.
  • py_utils/whisper_utils.py :
    • Traitement audio : Calcule les spectrogrammes Log-Mel alignés avec l'implémentation d'OpenAI.
    • Tokenizer : Gère la tokenisation BPE et la gestion du vocabulaire.

Modification des modèles

  1. Placez les modèles .rknn d'encodeur et de décodeur entraînés et convertis dans le répertoire model/.
  2. Le service charge automatiquement les modèles en fonction du paramètre de taille (par exemple, whisper_encoder_base_20s.rknn). Assurez-vous que les conventions de nommage des fichiers sont respectées.