Whisper von OpenAI ist ein speech-to-text-System (STT), das meist als Service über die Whisper-API genutzt wird. Dabei wird menschliche Sprache lokal aufgezeichnet, die Daten verlassen dann allerdings das (eigene) Gerät und werden an einen OpenAI-Server geschickt, der die Umsetzung in Text vornimmt. Der generierte Text wird nun wieder über das Netz auf das lokale Gerät geschickt.
Die Nutzung der API / Whisper as a service hat einige Nachteile:
- Audio (hin) und Text (zurück) müssen über das Netz verschickt werden, was
– (hohe) Latenz bedeuten kann, auch je nach Anbindung und Nachfrage
– datenschutztechnisch gehen die Sprachdaten über das Netz, was für mache Anwendungen problematisch sein kann - es entstehen Kosten durch die Nutzung der API
– Stand Anfang 2024 zwar nur $ 0.006 / minute, s. https://openai.com/pricing (auf der Seite nach Whisper suchen), was erst mal nicht viel ist, man muss aber dafür ein OpenAI-Konto anlegen mit Hinterlegung von Kreditkartendaten usw., was einfach auch lästig ist für die paar cent.
Nun habe ich vor ein paar Wochen schon das YouTube-Video Run OpenAI Whisper in real time on a Raspberry Pi 4 on-device (Uses the C++ model) von Sam Wechsler gefunden, der zeigt, wie man Whisper lokal auf einem RasPi 4 installiert. Mittlerweile gibt es auch ein Nachfolgevideo, mit Tests auf einem RasPi 5
Der ganze Zauber dahinter stammt aus der Whisper-C/C++ Implementierung von Georgi Gerganov, Repo unter: GitHub - ggerganov/whisper.cpp: Port of OpenAI's Whisper model in C/C++ … und dort gibt es auch eine
- Anleitung für den RaspberryPi
Real-time transcription on Raspberry Pi 4 · ggerganov/whisper.cpp · Discussion #166 · GitHub
Das Ganze ist erstaunlich schnell installiert:
sudo apt install libsdl2-dev
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
make -j stream
Nun muss man noch das gewünschte Modell downladen. Auf dem RasPi 4 funktionieren die Modelle tiny
und base
, auf dem RasPi 5 auch small
laut obigem Video von Sam Wechsler.
Bei der Nutzung von verschiedenen Sprachen (“multiligual”) kann man die drei Sprach-Modelle hiermit downladen:
./models/download-ggml-model.sh tiny
./models/download-ggml-model.sh base
./models/download-ggml-model.sh small
Wenn man nur Englisch verwenden möchte:
./models/download-ggml-model.sh tiny.en
./models/download-ggml-model.sh base.en
./models/download-ggml-model.sh small.en
Nun kann man die eigentliche Spracherkennung starten mit:
./stream -m models/ggml-tiny.bin --step 4000 --length 8000 -c 0 -t 4 -ac 512 -l de
Falls man statt tiny
das small
model verwenden möchte, ersetzt man ggml-tiny.bin
mit ggml-small.bin
. Für die auf Englisch optimierten Modelle verwendet man ggml-tiny.
en
.bin
usf.
Das flag -l de
sorgt für output auf Deutsch, -l auto
ist theoretisch auch möglich, dann erfolgt vor der Ausgabe des Textes eine Wahrscheinlichkeitsberechnung der Sprache, das braucht bei mir auf dem RasPi aber recht lange, daher lege ich gerade die Sprache explizit mit -l de
oder -l en
fest.
Weitere Infos zu den Sprachmodellen unter whisper/README.md at main · openai/whisper · GitHub
Falls ihr euch wundert, warum das Thema hier aufkommt: Tree Aware (Projekt AP 4) - #2 by clemens
Anmerkung: Dieser thread hätte ggf. auch in Entwicklung > Audio gepasst, da wir dort aber bisher noch gar nichts mit menschlicher Sprache haben, es ist vermutlich hier besser aufgehoben.