SOUND / Whisper
Whisper
reComputer RK3576
Robustes Spracherkennungsmodell via OpenAI Whisper.
Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.
Erste Schritte
Armbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.
sudo docker run --rm \
--name rk3576-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/rk3576-whisper:latest \
python3 web_service.pyREST API
Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.
curl -X POST "http://127.0.0.1:8000/api/models/whisper/task" -F "file=@/home/user/audio/long_podcast.wav" -F "language=zh"
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))
Modelldetails
reComputer RKArmbian 26.8.7 Gnome oder neuer mit OTA overlayroot: Konfigurieren Sie den Docker-Speicher vor dem Starten von Containern um Overlay-Mount-Fehler zu vermeiden.
Schnellstart
1. Docker installieren
Fuehren Sie die folgenden Befehle auf dem Entwicklungsboard aus, um Docker zu installieren:
# Installationsskript herunterladen
curl -fsSL https://get.docker.com -o get-docker.sh
# Mit Aliyun-Mirror-Source installieren
sudo sh get-docker.sh --mirror Aliyun
# Docker starten und Autostart beim Booten aktivieren
sudo systemctl enable docker
sudo systemctl start docker2. Projekt ausfuehren (Ein Befehl, Dual-Mode-Vorschau)
Dieses Projekt unterstuetzt den Zugriff ueber Web-Browser. Das Programm stellt automatisch eine Weboberflaeche fuer die Spracherkennung bereit.
Schritt A: Images pullen
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:latestSchritt B: Mit einem Klick ausfuehren
Fuer 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 \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-whisper:latest \
python3 web_service.pyZugriff ueber: http://<Board_IP>:8000
Fuer 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 \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-whisper:latest \
python3 web_service.pyZugriff ueber: http://<Board_IP>:8000
🔌 API-Dokumentation
Dieses Projekt bietet RESTful-Schnittstellen fuer ASR-Aufgaben und unterstuetzt synchrone und asynchrone Transkription von Audiodateien.
1. Synchrone Transkriptionsschnittstelle (Kurze Audiodateien)
Endpunkt: POST /api/models/whisper/predict
Geeignet fuer Audiodateien unter 20 Sekunden.
Anfrageparameter (Multipart/Form-Data):
file: (Erforderlich) Zu transkribierende Audiodatei (z. B. .wav, .mp3).language: (Optional) Zielsprachcode (z. B.en,zh). Wenn abweichend vom aktuellen Modell, wird der Tokenizer im laufenden Betrieb gewechselt.
Verwendungsbeispiele:
curl -X POST "http://127.0.0.1:8000/api/models/whisper/predict" \
-F "file=@/home/user/audio/test_en.wav" \
-F "language=en"Antwortformat (JSON):
{
"status": "success",
"data": {
"text": "Hello world, this is a test.",
"language": "en",
"duration": 3.5,
"inference_time": 0.8
}
}2. Asynchrone Transkriptionsschnittstelle (Lange Audiodateien)
Endpunkt: POST /api/models/whisper/task
Erstellt eine asynchrone Aufgabe zur Verarbeitung laengerer Audio-/Videodateien.
Verwendungsbeispiele:
curl -X POST "http://127.0.0.1:8000/api/models/whisper/task" \
-F "file=@/home/user/audio/long_podcast.wav" \
-F "language=zh"Antwortformat (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. Aufgabenstatusabfrage
Endpunkt: GET /api/models/whisper/task/{task_id}
Verwendungsbeispiele:
curl "http://127.0.0.1:8000/api/models/whisper/task/29c7b932-a77f-480c-a18b-8a958c7911c3"4. Systemkonfigurationsschnittstelle (Config)
Wird verwendet, um Modelle und Sprachen dynamisch zu wechseln.
Aktuellen Systemstatus abrufen
- Endpunkt:
GET /api/system/status - Antwort:
{"status": "success", "data": {"model_size": "base", "language": "en", "max_tokens": 12, "rknn_lite_available": true}}
Systemkonfiguration aktualisieren (Hot-Swap)
- Endpunkt:
POST /api/system/config - Anfrageparameter (Form-Data):
model_size=base,language=zh - Antwort:
{"status": "success", "message": "Successfully loaded base model."}
🛠️ Entwicklerhandbuch (Produktionsempfehlungen)
Codebeschreibung
web_service.py:- Web-API: Integriert FastAPI, unterstuetzt Audio-Upload, asynchrone Aufgabenwarteschlangen und Modell-Hot-Swapping.
- RKNN-Inferenz: Kapselt die RKNN-Initialisierung sowohl fuer Encoder- als auch Decoder-Modelle. Implementiert eine autoregressive Generierungsschleife.
py_utils/whisper_utils.py:- Audioverarbeitung: Berechnet Log-Mel-Spektrogramme, die mit der OpenAI-Implementierung abgestimmt sind.
- Tokenizer: Behandelt BPE-Tokenisierung und Vokabularverwaltung.
Modelle aendern
- Legen Sie die trainierten und konvertierten
.rknnEncoder- und Decoder-Modelle immodel/-Verzeichnis ab. - Der Dienst laedt Modelle automatisch basierend auf dem Groessenparameter (z. B.
whisper_encoder_base_20s.rknn). Stellen Sie sicher, dass die Dateinamenskonventionen eingehalten werden.