Hier hat Mathias eine recht gute Anleitung zur Inbetriebnahme eines Modells mit llama.cpp beschrieben: Beitrag "Re: Erfahrungen mit AI-Coding" Welches Modell ist für die Audiospracherkennung geeignet und wie verbinde ich das Ganze mit dem Mikrophoneingang?
Gemma 4 E2B/E4B kann auch Sprache (https://github.com/ggml-org/llama.cpp/issues/21325#issuecomment-4187969225) oder eben whisper.cpp
:
Bearbeitet durch User
1N 4. schrieb: > Gemma 4 E2B/E4B kann auch Sprache Danke für die Antwort. Jetzt stellt sich mir aber die Frage, wie kommt der Audio-Stream in die KI? Eine Lösung die mir einfallen würde, wäre mit einem Python-Script Sprachsignal aufnehmen und als Wav auf die Platte schreiben und dann via Script das Wav Signal an das Modell senden. Aber ich vermute stark, dass es da einen viel einfacheren Workflow gibt.
speech-to-text engine, bspw.: * https://gnulinux.ch/whisper-eine-freie-speech-to-text-engine * https://gnulinux.ch/serie-sprachsteuerung-teil-1
:
Bearbeitet durch User
1N 4. schrieb: > Gemma 4 E2B/E4B kann auch Sprache > (https://github.com/ggml-org/llama.cpp/issues/21325#issuecomment-4187969225) Danke für den Link. Ich hatte den erst etwas unterschätzt, weil er auf "issues" zeigt. Mittlerweile ist klar, warum man in Zukunft einen Glasfaseranschluss braucht: Im Testscript wird das 16GB Google-Gemma-Modell gezogen und da muss man erst mal eine halbe Stunde warten. Leider scheint auch meine Graphikarte für das Modell zu klein:
1 | File "~/venv/ch/lib/python3.12/site-packages/transformers/core_model_loading.py", line 794, in _materialize_copy |
2 | tensor = tensor.to(device=device, dtype=dtype) |
3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
4 | torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 5.25 GiB. GPU 0 has a total capacity of 7.52 GiB of which 921.12 MiB is free. Including non-PyTorch memory, this process has 6.44 GiB memory in use. Of the allocated memory 1.83 GiB is allocated by PyTorch, and 4.50 GiB is reserved by PyTorch but unallocated. |
> Mittlerweile ist klar, warum man in Zukunft einen Glasfaseranschluss > braucht: Im Testscript wird das 16GB Google-Gemma-Modell gezogen und da > muss man erst mal eine halbe Stunde warten. Herrje, wie haben wir damals Linux installieren können obwohl uns nur ein lausiges 56k Modem zur Verfügung stand ... SCNR
Bradward B. schrieb: > Herrje, wie haben wir damals Linux installieren können obwohl uns nur > ein lausiges 56k Modem zur Verfügung stand ... SCNR Oder für eine Installation 50 Disketten durchnudeln mussten.
>> Herrje, wie haben wir damals Linux installieren können obwohl uns nur >> ein lausiges 56k Modem zur Verfügung stand ... SCNR > > Oder für eine Installation 50 Disketten durchnudeln mussten. Bis es dann die CD's von SuSE gab ...
Bradward B. schrieb: > speech-to-text engine, bspw.: > * https://gnulinux.ch/whisper-eine-freie-speech-to-text-engine Whisper funktioniert, aber schnarchlangsam
1 | whisper wieWetter.wav --model medium |
2 | |
3 | Detected language: German |
4 | [00:00.000 --> 00:03.000] Mal eine Frage, wie wird das Wetter heute? |
Ich vermute, es wird jedesmal das Modell neu geladen, wenn man whisper per Kommandozeile startet. Es muss also eine Möglichkeit geben, das Ding resident im Speicher zu halten und die Wav-Junks hin zu schicken.
> Herrje, wie haben wir damals Linux installieren können obwohl uns nur > ein lausiges 56k Modem zur Verfügung stand ... SCNR "Wir" waren auf Party wo uns jemand die ersten 4Stk 5 1/4 ruebergereicht hat. :-D Vanye
1 | (ch) christoph@Ryzen5:~/Entwicklung/260202_KI/Spracherkennung/whisper$ python whisperVAD.py |
2 | Using device 7 at 16000 Hz |
3 | Listening... |
4 | → In diesem Beitrag geht es um Spracherkennung, hier geht es nicht um Modems oder Datenübertragung. |
5 | → Ende |
6 | → Ende. |
7 | Ende verstanden |
> Whisper funktioniert, aber schnarchlangsam
Dem kann man etwas abhelfen:
- fater-whisper oder Whisper-Ctranlate2 verwenden
- das large-v3-turbo Modell benutzen
Damit komme ich mit meinem i5-7300 (2600MHz) auf rund 75%
"Echtzeitgeschwindigkeit" im Batch mode, d.h. für 4min Sample braucht er
ca. 6min zum konvertieren in Text. Für meine Zwecke war das bis jetzt
ausreichend. Für die Nachbearbeitung habe ich mir ein Perl-Script
geschrieben, welches die json in eine RTF Datei umwandelt, mit farbig
hinterlegtem Text wenn wählbare Wahrscheinlichkeitsgrenzen
unterschritten werden und Absätzen bei Sprechpausen.
Whisper-Ctranlate2 hat auch einen Live-Modus, mit dem man das zumindest
testen kann.
Jörg
Christoph M. schrieb: > Leider scheint auch meine Graphikarte für das Modell zu klein: Das ist halt die langsam implementierte Version. Llama.cpp ist schneller, kann den Speicher auf GPU+CPU aufteilen. https://huggingface.co/unsloth/gemma-4-E2B-it-GGUF https://huggingface.co/unsloth/gemma-4-E4B-it-GGUF/ Passendes gguf laden. Für Audio oder vision brauchst du auch das mmproj File. Mit E2B-Q8 + mmproj-F16.gguf komm ich mit meiner 9070 auf 15x Realtime. E4B-Q8 ist nur minimal langsamer. Dümmlicherweise sind die mmproj files Model-spezifisch, auch wenn sie gleich heißen... Ich hab ein populäres Lied transkribieren lassen. Ergebnis ist ... na ja. Ist ja aber auch ein Lied mit allem...
Whisper gibts auch in schnell: https://github.com/ggml-org/whisper.cpp Mit Vulkan auf der 9070 ca 20x Realtime mit dem base.en Model Mit large-v3 3.3x Realtime Mit large-v3-turbo 14x realtime Nochmal Gemma. Diesmal mit mmproj-F32 ... macht irgendwie auch keinen Qualitätsunterschied. Wahrscheinlich ist das Lied durch die Trainingsdaten verbrannt. Ich hab nochmal ein anderes probiert. Sowieso sind die Modelle jetzt nicht unbedingt auf Lieder trainiert. IMO ein Härtetest.
Mathias M. schrieb: > Sowieso sind die Modelle jetzt nicht unbedingt auf Lieder trainiert. IMO > ein Härtetest. Danke für Deine Hinweise. Meine Spracherkennung muss allerdings gut bei der Erkennung der deutschen Sprache sein. Naturgemäß scheint es viel mehr englschsprachige Spracherkenner zu geben und vielleicht funktionieren die bei Englisch auch besser.
> Sowieso sind die Modelle jetzt nicht unbedingt auf Lieder trainiert. IMO > ein Härtetest. Speechrecognition ist eben ein zu harten Job für die Maschine, selbst ein Mensch, der gut zuhören kann, schafft das nur bei eingeschränkten Kontext. IMHO könnte das in einem face2facesetting (Einschluss der non-verbalen KOmmunikation (bspw. Minenspiel)) besser laufen. Und hier in diesem thread wird das auf simple Installation eines vorgefertigt-generischen Softwarepaketes reduziert, keinerlei Anpassung der Audioaufzeichnung auf menschliches Sprachgehör (bspw. Bandbreitenbeschränkung auf 4kHz, Equalizer, Richtmikrofon, ...) das kann IMHO nur bescheiden enden. Vielleicht als Zwischenschritt sich an einer Konversion Bärndütsch (Bern deutsch, Schweiz) -> Hochdeutsch versuchen, da braucht es kaum Sprachverständniss, fast nur Phonemanpassung. https://youtu.be/8n0f2sJJfzs?t=122
:
Bearbeitet durch User
Joerg W. schrieb: >> Whisper funktioniert, aber schnarchlangsam > > Dem kann man etwas abhelfen: > > - fater-whisper oder Whisper-Ctranlate2 verwenden Danke für den Hinweis. Praktischerweise gibt es hier https://opennmt.net/CTranslate2/quickstart.html ja auch einen Hinweis, wie man das Ganze an Python anbindet. Ich hatte gestern das normale Whisper an ein Python-Script gehängt. Nach ziemlich langem probieren hat es dann geklappt. Die Schwierigkeit war, die device-ID des Microphons zu finden und das Script lief nicht an, weil die Samplerate des Microphon im Script exakt stimmen muss. Obwohl die Samplerate des Treibers 48kHz angezeigt hatte, war das falsch und man muss 16kHz einstellen. Mit dem Sript kann man theoretisch eine Art "Alexa" bauen, mit der man dann das Licht steuern könnte. Im Moment ist die Spracherkennung auf Deutsch eingestellt und es wird das Wort "Ende" erkannt, damit ich das Script per Sprachbefehl beenden kann:
1 | result = model.transcribe( |
2 | tmp.name, |
3 | language="de", |
4 | task="transcribe", # (not translate!) |
5 | temperature=0.0 |
6 | ) |
7 | #result = model.transcribe(tmp.name, language="de") |
8 | txt=result["text"] |
9 | print("→", txt)
|
10 | if txt.__contains__("Ende.") :
|
11 | flag=False |
12 | print("Ende verstanden")
|
> Im Moment ist die Spracherkennung auf Deutsch eingestellt und es wird > das Wort "Ende" erkannt, damit ich das Script per Sprachbefehl beenden > kann: Na wenn da ende nicht mit "Spende", "Gelände" oder anderen auf "-ende" endenden Wörter verwechselt wird. In der Funkkommunikation gibt es xtra vereinbarte Terminierungsworte/-phrasen (Bspw.: "Over", "Over and Out", "Конец передачи") und Bestätigung desselben ("Roger that", "Copy that"). Halt Kontext-sensetiv.
Bradward B. schrieb: > Na wenn da ende nicht mit "Spende", "Gelände" oder anderen auf "-ende" > endenden Wörter verwechselt wird. [ ] Du kannst Pythoncode lesen.
> [ ] Du kannst Pythoncode lesen.
Der ist halt an der Alltags-Realität vorbei programmiert ... wer spricht
schon Satzzeichen und regex .
:
Bearbeitet durch User
Christoph M. schrieb: > if txt.__contains__("Ende.") : Da fragt man sich allerdings was aus dem guten, alten ›if txt.count("Ende.")‹ geworden ist. PEP würde sich freuen, wenn es nicht völlig in Vergessenheit geräte. PS: 3.3.7. Emulating container types
Norbert schrieb: > Da fragt man sich allerdings was aus dem guten, alten > ›if txt.count("Ende.")‹ > geworden ist. PEP würde sich freuen, wenn es nicht völlig in > Vergessenheit geräte. Wenn man bei Whisper (medium) "Ende" sagt, erzeugt es den Text "Ende.". Es scheint also das Wort schon irgendwie zu interpretieren und vielleicht gibt es da eine Verbindung zu deinem Text oben. "Ende." als Programmtermination zu nutzen, ist natürlich schon "Murks". Ich fand es aber lustig, das mal so zu machen, weil dadurch quasi eine echte Aktion durch das Sprechen ausgelöst wird.
Christoph M. schrieb: > Norbert schrieb: >> Da fragt man sich allerdings was aus dem guten, alten >> ›if txt.count("Ende.")‹ >> geworden ist. PEP würde sich freuen, wenn es nicht völlig in >> Vergessenheit geräte. > > Wenn man bei Whisper (medium) "Ende" sagt, erzeugt es den Text "Ende.". > Es scheint also das Wort schon irgendwie zu interpretieren und > vielleicht gibt es da eine Verbindung zu deinem Text oben. > > "Ende." als Programmtermination zu nutzen, ist natürlich schon "Murks". > Ich fand es aber lustig, das mal so zu machen, weil dadurch quasi eine > echte Aktion durch das Sprechen ausgelöst wird. Es geht darum, dass man die
1 | __wasauchimmer__ |
Methoden in diesem Kontext niemals verwendet.
:
Bearbeitet durch User
Sheeva P. schrieb: > if "Ende." in txt: So ist es schöner. Zugegebenermaßen war ich faul und habe mir die paar Zeilen per KI generiert und dachte, die wird schon wissen, was sie tut ;-)
Wenn ich das richtig interpretiere, sollten die kleinen gemma4 Modelle Spracherkennung können (siehe Zeile Audio): https://ollama.com/library/gemma4 Wenn man mit Open-webgui das Modell fragt, gibt es das aber scheinbar doch nicht (sie Screeshot).
Bradward B. schrieb: > speech-to-text engine Ist jedenfalls keine KI-Neuheit. Diktiersoftware für den PC war schon in Windows Vista, also vor ca. 20 Jahren integriert, nur wussten das die meisten PC-Nutzer gar nicht. Und schon vor circa 30 Jahren konnte man "Dragon Natural Speaking" für Windows kaufen. Manche Übersetzer haben das schon damals eingesetzt. Problem: Man muss druckreif formuliert sprechen können, sonst frisst die Zeit für Änderungen/Verbesserungen die durch das Diktieren (statt Tippen) ersparte Zeit auf.
Rolf schrieb: > Bradward B. schrieb: >> speech-to-text engine > > Ist jedenfalls keine KI-Neuheit. Klar. Ist ein wenig so wie wenn man sagen würde, ein Audi-Etron sei auch keine Neuigkeit, weil Karren mit 4 Rädern gab es auch schon vor 2000 Jahren.
Christoph M. schrieb: > Wenn ich das richtig interpretiere, sollten die kleinen gemma4 Modelle > Spracherkennung können (siehe Zeile Audio): Wenn Ollama keine API/Interface dazu bereitstellt, hilft es nichts wenn das Modell Audio könnte. Du kannst das gemma4-Modell z.B. über PyTorch nutzen, da geht das. Evtl. auch, wenn du direkt llama.cpp nutzt, ohne die Ollama-Abstraktionsschicht außenherum. Aber die schreiben "Audio is highly experimental and may have reduced quality."
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
