Beiträge von maik3531 im Thema „TTS & STT Spracheingabe und Sprchausgabe“
-
-
Ich möchte an dieser Stelle auf ein Beitrag von Wolfgang verweisen zum lokalen und Systemweiten diktieren von Texten mittels Tastenkombination. Dabei wird lokal die VOSK API verwendet. Ich habe lediglich "Strg+D" verwendet da "Alt+D" für Menü Datei belegt ist. Auf Grund des kleinen models ist es sehr schnell und die Erkennung recht gut.
Danke an Wolfgang.
Frau/Herr Müller-Lüdenscheid bitte zum Diktat - Speech to Text System
-
Beisiel 1. Script
Recognized hallo liebe community
Recognized ich habe das skript noch mal überarbeitet
Recognized dabei habe ich darauf geachtet dass google anfragen separat versendet werden
Recognized sprich dass es in eine schleife gepackt wurde
Recognized außerdem wird eine textdatei und eine anzeige ausgegeben
Recognized bei der textdatei habe ich darauf geachtet dass das datum
Recognized und die uhrzeit angegeben wird so dass man
Recognized wenn man mehrere texte nacheinander diktiert
Recognized eine datei mit der passenden uhrzeit vorfindet
Recognized in der zweiten version habe ich auf groß und kleinschreibung satzzeichen
Recognized und so weiter geachtet leider wird es durch die textformatierung
Recognized etwas langsamer
Recognized so ist jedoch für jeden
Recognized und für jede aufgabe das passende script vorhanden
Recognized der komplette text dieser nachricht
Recognized wurde mit dem ersten script erstellt====================================================================================
Beispiel 2. Script
Hier ist derselbe Text vom zweiten Skript noch mal.
Hallo liebe Community.
Ich habe der Skript noch einmal überarbeitet
Dabei habe ich darauf geachtet, dass Google angefragt separat versendet werden.
Sprich das eine Schleife gepackt wurde.
Außerdem wird eine Textdatei und eine Anzeige ausgegeben.
Bei der Textdatei habe ich darauf geachtet, dass das Datum und die Uhrzeit angegeben Werden.
So dass man wenn man mehrere Textdateien nacheinander diktiert ,
eine Datei mit der passenden wo findet
In der zweiten Version habe ich auf Groß und Kleinschreibung , Satzzeichen und so weiter geachtet
Leider wird es durch die Textformatierung etwas Langsamer.
So ist jedoch für jeden und für jede Aufgabe das passende Skript Vorhanden.
Der komplette Text dieser Nachricht wurde mit den Skript Erstellt.====================================================================================
Version 1 nur klein geschriebene Ausgabe dafür recht schnell. Durch die Schleife hat man kein Zeitlimit ist nicht an die Beschränkung wegen Größe usw von google eingeschenkt.
Python
Alles anzeigenimport sys import speech_recognition as sr from datetime import datetime recognizer = sr.Recognizer() # Generiere Dateinamen beim Start des Skripts current_datetime = datetime.now().strftime("%d-%m-%Y_%H-%M") filename = f"{current_datetime}_Diktat.txt" while True: try: with sr.Microphone() as mic: recognizer.adjust_for_ambient_noise(mic, duration=0.2) audio = recognizer.listen(mic) text = recognizer.recognize_google(audio, language="de-DE") text = text.lower() print(f"Recognized {text}") except sr.UnknownValueError: continue except Exception as e: print(f"Error: {e}") # Umleitung der Ausgabe in die Datei with open(filename, "a") as file: file.write(f"{text}\n") # Info: python3-pyaudio wird benötigt - apt install python3-pyaudio
Version 2 Groß- und Kleinschreibung sowie Satzzeichen (wenn genannt) etc. werden berücksichtigt dadurch etwas langsamer und manchmal verschluckt es Spracheingaben so wurde aus "Uhrzeit vorfindet" "wo findet"
Python
Alles anzeigenimport re import string import sys import speech_recognition as sr from datetime import datetime recognizer = sr.Recognizer() # Generiere Dateinamen beim Start des Skripts current_datetime = datetime.now().strftime("%d-%m-%Y_%H-%M") filename = f"{current_datetime}_Diktat.txt" while True: try: with sr.Microphone() as mic: recognizer.adjust_for_ambient_noise(mic, duration=0.2) audio = recognizer.listen(mic) text = recognizer.recognize_google(audio, language="de-DE") # text = text.lower() # alles in kleinbuchstaben # Textformatierungen formatted_text = re.sub(r'(?:^|(?<=[.!?]))\s*(\w)', lambda match: match.group(1).upper(), text) formatted_text = re.sub(r'(\w+)([.!?])$', lambda match: match.group(1).capitalize() + match.group(2), formatted_text) formatted_text = formatted_text.replace(".", ". ") formatted_text = formatted_text.replace(",", ", ") formatted_text = formatted_text.replace("Komma", ", ") formatted_text = formatted_text.replace("?", "? ") formatted_text = formatted_text.replace("Fragezeichen", "? ") formatted_text = formatted_text.replace("!", "! ") formatted_text = formatted_text.replace("Ausrufezeichen", "! ") print(f"Spracheingabe erkannt {formatted_text}") except sr.UnknownValueError: continue except Exception as e: print(f"Error: {e}") # Umleitung der Ausgabe in die Datei with open(filename, "a") as file: file.write(f"{formatted_text}\n") # Info: python3-pyaudio wird benötigt - apt install python3-pyaudio
Einfach unter z.B. sttr.py abspeichern und im Terminal mit
Würde mich über Feedback freuen.
Wer die oberen Beiträge nicht komplett durchgelesen hat.. für die Verwendung muss python3-pyaudio installiert werden.
-
Code
Alles anzeigenimport speech_recognition as sr file_name = "out.wav" speech_engine = sr.Recognizer() def from_file(file_name): with sr.AudioFile(file_name) as f: data = speech_engine.record(f) text = speech_engine.recognize_google(data, language="de-DE") print(text) print(from_file(file_name))
Hier noch mal der Teil um Audiodateien (in diesem Fall out.wav) als Text auszugeben oder in eine Datei zu schreiben. Im Vergleich zu whisper ist es wesentlich schneller aber auch nicht so gut. Für das Audiobeispiel aus den ersten Beitrag hat es mit dem Python Script nicht mal ne Minute gedauert bis die Textdatei erstellt war. Das hat zwei Gründe, bei whisper wird der eigene Rechner bzw. dessen Rechenleistung genutzt (offline) und das Python Script nutzt die speech_engine von google und Ausgabequalität ist bei whisper um einiges besser.
Vielleicht wäre es noch gut zu erwähnen, dass der Google-Recognizer auf Filegrößen von 10 MB beschränkt ist. Was bei unkomprimierten WAV-Dateien schon sehr kurz ist (vllt. 2 Min max.)
Wobei auch nur WAV, AIFF oder FLAC Dateinen zulässig sind was leider eben auch alles sehr große Dateien im Vergleich zu MP3 sind Bsp: Videotonspur *.mp3 = 24 MB, *.flac = 67 MB, *.aiff und *.wav weit über 100 MB
Für den Fall wir haben die als mp3 vorliegen können wir sie mit
umwandeln und mit
splitten wobei die Option -S (Anzahl) angibt um 7 Dateien unter 10 MB zu haben welche wir dann nacheinander mit
in die stta schieben können. Aber ihr merkt schon ist ziemlich umständlich und wie gesagt da geht es mit whisper wesentlich einfacher und komfortabler. Die speech_engine von google ist also eher wie im oberen Beitrag für Spracheingabe übers Micro zu gebrauchen.
hier noch die Ausgabe dem Audiobeispiel
Zitates war einmal in einem kleinen verschlafenen Dorf namens Kuschel Dorf eine ganz besondere Katze namens Cosmo Cosmo war nicht wie die gewöhnlichen Katzen die gerne durch die Gegend streunenden und Mäuse Fingern nein Cosmo hatte eine Leidenschaft die sich von allen anderen Katzen Unterschied Essen Cosmo war eine wahrhaftig verfressene Katze ihr Tag drehte sich nur um eine Sache Futter morgens weckte sie ihr appetitliches miauen die ganze Familie auf in der Hoffnung auf ein königliches Frühstück Cosmo liebte es sich in der Küche herum zu drängen und nach Leckereien zu suchen eines Tages als die Sonne sich langsam über kuschelt auf erhoben Beschluss Cosmo das ist an der Zeit für ein großes Abenteuer sei sie kletterte auf das Fensterbrett und spielte nach draußen doch anstatt auf Mäusejagd zu gehen oder das Dorf zu erkunden führte ihr Weg geradewegs zum lebensmittelschrank der Familie Cosmo war nicht nur verfressen sondern auch äußerst finde ich mit geschickten Pfoten öffnete sie den Schrank und stöberte nach Ihren Lieblings Max Hexe Fisch und sogar eine Tüte Katzenminze fanden den Weg in ihren kleinen einzigen Bauch nach ihrem köstlichen Schmaus wurde Kosmo schläfrig sie wollte sich auf dem weichen Teppich zusammen und begann zu schnurren doch ihr Tag war noch nicht vorbei es gab noch so viel Unsinn zu treiben kostenlos leicht sich in das Zimmer ihrer kleinen Freundin mir dort fand sie eine Schachtel mit bunten Bändern und Glitzerstein natürlich konnte Kosmo nicht widerstehen sie spielte mit den Bändern wurzelte durch die Zimmer und machte dabei so viel lernen dass wir aufwachte mir konnte nicht anders als zu lachen wo kostenlos nach all dem Spaß Cosmo das ist Zeit war sich auszuruhen sie kuschelte sich in ihr gemütliches Katzenbett und träumte von einem Land in dem die Straßen mit Leckerbissen gepflastert waren und so endete ein weiterer aufregender Tag im Leben von Cosmo der verfressen und alles bestens Katze von kuschelt auf die Sterne leuchten am Himmel und während Cosmo träumte sie glücklich vor sich hin mir lächelte und dachte gute Nacht Cosmo du machst mein Leben wirklich bunter
None -
Python Script mit mit Google speech_engine zum diktieren von Texten
Ich hatte heute ein Video gesehen "Spracherkennung mit Python in 7 Zeilen" was natürlich wunderbar hier rein passt.
Code
Alles anzeigenimport sys import speech_recognition as sr speech_engine = sr.Recognizer() def print_prompt(): print("Sprechen Sie jetzt...", file=sys.stderr) def from_microphone(): with sr.Microphone() as micro: print_prompt() audio = speech_engine.record(micro, duration=30) text = speech_engine.recognize_google(audio, language="de-DE") return text print(from_microphone()) # apt install python3-pyaudio
So können wir unser gesprochenen Texte einfach in eine Datei schreiben lassen oder z.B. mittels pipe tgpt sagen was es machen soll. Siehe -> Thema tgpt
Edit: "duration=30" ist natürlich die Aufnahmezeit in Sekunden
-
Hier noch mal ein Beispiel an Hand von
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.ZitatIch betreue sehr sehr viele Menschen im bekannten Kreis, aber auch im Linux
Support, wie sie ihren Rechner nutzen, wie sie Linux nutzen. Und dabei sind mir
tatsächlich viele verschiedene Sachen aufgefallen, die ganz ganz ganz viele
falsch machen und wahrscheinlich auch du falsch machen wirst. Ich würde sagen,
lass uns nicht lang weiter rum reden und kommen wir zu den ersten Sachen, die ich
auch selber falsch mache oder immer wieder falsch mache und zwar ist das eine
Sache im Terminal, wenn wir nämlich jetzt einmal einen neuen Ordner erstellen,
beispielsweise test, dann können wir uns den hier anschauen mit ls und diesen
Ordner jetzt, den wir eben erst erstellt haben, ich sag mal mit einer gewissen
Sicherheit, dass wir wirklich diesen Ordner löschen. Und dann würden
wahrscheinlich viele von euch rm-r eingeben, das bedeutet dafür, dass wir
das ganze remove und minus r bedeutet rekursiv, das heißt, dass auch Ordner
entfernt werden. Anstattdessen gibt es auch ein Pendant zu Make Directory zu
unserem mkdir, das nennt sich rmdir. Hiermit können wir dann tatsächlich auch
ganz einfach unseren Ordner, den wir jetzt hier beispielsweise versehentlich
erstellt haben, dann entfernen. Und wenn wir jetzt versuchen einen Ordner zu
löschen, in dem dann Dateien drin sind, dann wird uns hier gewarnt, das
Verzeichnis ist nicht leer und dann wissen wir, okay gut, ich wollte eventuell das
Verzeichnis gar nicht löschen und sollten wir dann doch noch mal einen
Ordner löschen wollen, der dann, ich sag mal, Inhalt drin hat, dann nehmen wir das
mrm-r und dieses rmdir kann man dann ganz einfach verwenden, wenn man sich
verschrieben hat oder eben Ordner hat, die leer sind und dann kann man sich
vergewissern, okay gut, ich lösche jetzt hier nichts aus Versehen. Nebenbei, wenn
ihr mit rm-r hantiert und vor allen Dingen als Root Nutzer angemeldet seid,
also beispielsweise mit sudo-i bei Ubuntu und Linux Mint, bei Debian eventuell auch,
wenn ihr sudo aktiviert habt und dann mit rm-r hantiert, bitte seid da
unbedingt vorsichtig, man kann super schnell auch damit ganz viel Mist bauen.
Es gibt zwar mittlerweile verschiedene Vorrichtungen, die versuchen vor solchen
Kurzschlüssen zu verhindern, aber beispielsweise rm-r und dann dieser
Schrägstrich, wir können es mal eingeben, dann sehen wir hier tatsächlich auch eine
Fehlermeldung, wo ihr hier sagt, okay gut, ich lösche oder ich passe schon drauf auf,
dass du jetzt nicht diesen riesen Fehler machst, das ist aber nicht bei jeder
Distribution so und von daher würde ich da unbedingt vorwarnen, immer wenn ihr
als Root vor allem nur mit sudo arbeitet und rm-r eingibt, checkt das wirklich
noch mal zweimal und haltet immer eine Sekunde inne, mache ich immer bei
Servern oder auch bei meinem eigenen Rechner, wenn ich dann noch mal im
Terminal arbeite und dann mir sicher sein kann, okay gut, ich passe dann da
doch noch ein bisschen mehr auf und meine Daten oder mein Server generell
oder das System ist soweit erstmal vor irgendwelchen Kurzschlüssen gesichert.
Das wäre der erste Punkt, der war im Terminal, der zweite bezieht sich eher
allgemein und ich bekomme so viele Fragen in den Kommentaren per E-Mail und wo
man mich sonst noch erreichen kann oder lese das auch ganz ganz häufig im
Internet und zwar, ja, welche Distro soll ich denn verwenden? Und das gibt dann
tatsächlich doch schon einige, haben wir ja hier auch schon einige auf dem
YouTube-Kanal ich ja vorgestellt, nebenbei im Dezember gibt es wieder ein
Adventskalender, das heißt jeden Tag eine neue Distribution, die wir vorstellen.
Ich freue mich sehr darauf, aber da liegt tatsächlich auch so ein bisschen das
Kind begraben und zwar viele fokussieren sich unglaublich auf die Distribution
anstatt auf den Desktop, wobei ich würde sagen, mittlerweile gleichen sie die
Distributionen noch mehr als in den letzten Jahren an, zumal wir
beispielsweise Flatpak oder Snap nutzen, damit kann man tatsächlich auf
jeder Distribution ziemlich genau das gleiche ausführen und dann ja ähnelt
sich das sehr, beispielsweise ich selber bin ja auf meinem Hauptrechner auf
Debian vor circa einem Jahr gewechselt, ziemlich genau ein Jahr werden setzt und
ich muss sagen, ich habe super wenig Unterschiede in der Benutzung zu Linux
Mint mit Cinnamon, denn meiner Ansicht nach sollte man sich viel viel viel mehr
auf den Desktop fokussieren, also auf die Oberfläche, die man nutzen möchte,
anstatt auf die Distribution. Das heißt, wenn ich oder beziehungsweise so habe ich
auch meine Distribution gewählt, ich schaue mir an, welche Oberfläche mir am
besten gefällt, mit welcher ich am besten zurechtkomme und dann kommt danach die
Distribution, denn in der Regel arbeiten wir mit der Oberfläche viel viel mehr
als mit der Distribution und von daher solltet ihr euch entscheiden, okay was
für ein Typ bin ich, mag ich lieber KDE mehr, mag ich GNOME mehr oder dann doch ein
Cinnamon oder seid ihr noch mal von der Sparte XFCE und wählt dann nach dem
Desktop eure Distribution aus und dann habt ihr meiner Ansicht nach auf jeden
Fall die richtigere Herangehensweise und eventuell sogar eine ganz andere
Entscheidung, wie wenn ihr jetzt einfach voran sagt, ja ich nehme jetzt den Linux
Mint, weil das empfiehlt dieser komische Typ auf YouTube, sondern wählt aus welchen
Desktop mögt ihr am besten und wählt dann dadurch die Distribution aus,
und wer eben nicht so ganz genau Bescheid weiß, ja was soll ich denn nehmen oder
vielleicht wenn du jetzt gerade ganz am Anfang stehst von Linux, dann hör gerne
auf mich, wenn du möchtest, ich empfehle jedem Anfänger Linux Mint Cinnamon, ist
meiner Ansicht nach ein sehr sehr gutes Gesamtpaket, nutze ich auch die gesamte
Zeit oder fast die gesamte Zeit jetzt hier auf meinem Laptop unterwegs und da
läuft natürlich sogar auch noch ein Linux Mint und ich würde hier auch
erstmal nicht wechseln. Dann kommen wir zu einem weiteren Punkt, wo ich sagen
würde, ja viele Menschen machen das nicht genug oder machen das gar nicht und
zwar bleiben sie in ihren alten Gewohnheiten fest, wie sie den PC nutzen
und probieren nicht mal neue Art und Weise aus, den Rechner zu nutzen. Mach
ich beispielsweise immer wieder, ich versuche neue Programme in meinen
Arbeitsablauf zu implementieren und ist auch nur jedes fünfte Programm, sage
ich mal erfolgreich und schmiege sich meinem Arbeitsalltag an, dann ist das für
mich auf jeden Fall ein großer Zugewinn, von daher kann ich euch auch nur sehr
motivieren, neue Programme in verschiedenen Bereichen auszuprobieren, zu
checken, okay was machen die Alternativen und wenn es einem dann nach ein, zwei
Wochen nicht gefällt, dann kann man ja immer noch wieder zurück zum alten, aber
man weiß, okay gut, ich habe das verifiziert, dass ich für mich mit meiner
Arbeitsweise auf dem richtigen Weg bin und dass ich jetzt nicht ganz groß was
verpasse. Und was gibt es da vielleicht für Anwendungen, die ihr verpassen
könntet und manche wissen natürlich auch schon, was jetzt kommt und das ist
beispielsweise der Linux Assistant, hier haben wir ihn, gibt es mittlerweile in
der Anwendungsverwaltung zum installieren, ganz normal, aber die Frage ist, was macht
der Linux Assistant oder wofür nutze ich den Linux Assistant in meinem
Arbeitsalltag, obwohl ich Linux dann doch sehr, sehr viel nutze und dann doch das
ein oder andere weiß, was der Linux Assistant einem natürlich abnimmt. Das
wäre zum einen die Einrichtung von dem Linux Assistant, jeden neuen Rechner, den
ich installiere für Bekannte oder auch meinen eigenen Rechner oder sowas, dann
nutze ich dafür den Linux Assistant, dass er mir die ersten Schritte abnimmt.
Das ist zum einen ein Punkt, natürlich gibt es dann noch beispielsweise den
Leistungsmodus. Ich zeige ihn euch jetzt hier mal, dort kann man auswählen, ob man
im Energiesparmodus sein möchte, im ausgewogenen Modus oder im Leistungsmodus.
Die GNOME Nutzer unter euch werden das sicher schon kennen, ihr könnt das
direkt in der Oberfläche auswählen. Die Cinnamon Nutzer beispielsweise sind da
noch abgehängt, aber der Linux Assistant implementiert das nach und macht quasi
genau das gleiche wie der GNOME Desktop oder andere Desktops und von daher ist
das beispielsweise eine Sache, die ich noch regelmäßig nutze und einstelle
und vor allen Dingen meine Ordner zu suchen oder Dateien, die ich letztens
geöffnet habe. Hier sehen wir, gehen die ersten Vorschläge schon durch, denn
somit kann ich super schnell und super einfach verschiedene Ordner öffnen und
zuvor habe ich da immer mehrere Sekunden, vielleicht manchmal eine Minute
verloren, bis ich im richtigen Ordner war oder den richtigen Ordner geöffnet
habe.Gekürzt da maximal 10.000 Zeichen zulässig (siehe Anhang Text Datei)
-
Whisper Transkription von Audiodateien
Ich hatte schon mal darauf hingewiesen das ich ein Script samt nemo_action Menü erstellt hatte worüber man verschiedene Dateien (TXT, PDF, ODT) sich vorlesen lassen kann. Wobei das Script sowohl für espeak / mbrola für schnelle Umwandlung, mimic3 / mycroft für etwas langsamere aber realere Sprachausgabe und TTS/DDC (Thorsten Voice) für nahezu reale Sprechausgabe bzw. Speicherung in Audiodatei angepasst werden kann. Eine Beispiel Audio hatte ich hier angehängt.
Nun wollte ich aber nicht nur TTS (Text to speech) sondern auch andersrum STT (Speech to Text). Dabei gibt es mehrere Möglichkeiten wer einfach nur schnell was gesprochenes in Textform haben möchte, kann Texte in sein Handy über die Google Tastatur in eine Datei schreiben lassen oder über Chrome und Google Docs -> Tools Voice typing bzw. Script in Folgebeiträgen nutzen. Wenn man aber Komplette Audio Dateien, Tonspuren von Videos in Text umwandeln möchte kommt man an whisper nicht vorbei. Es hat den Vorteil das es OSS ist und im Vergleich zu Google Docs bleibt alles auf den eigenen Rechner.
Es gibt zwar auch python3-whisper und ein (flatpak von whisper (getestet, startet nicht)) in der Anwendungsverwaltung von LM aber die Installation aus den git und das updaten ist Kinderleicht.
Falls python3, pip und ffmpeg nicht installiert ist.
Jetzt kann Whisper installiert werden.
Für ein Update
Wenn wir nun eine Audiodatei z.B. mit ocenaudio / audacity .. erstellt haben oder mit z.B clipgrab eine Tonspur aus einen Video gelöst haben können wir mit folgenden Befehl eine Transkription durchführen also die Audioausgabe in eine Textdatei speichern.
Beim ersten Start wird die Sprachdatei also das angegebene das Sprachmodell heruntergeladen wodurch es etwas länger dauern kann. Diese gibt es in tiny, base, small, medium und large wobei ich mit medium die beste Erfahrung gemacht habe.
Wozu das ganze genutzt werden kann ? z.B. um einen Podcast auch in Textform zu veröffentlichen oder mit der Option --task translate englische Untertitel (leider gibt es die Übersetzung momentan nur in die englische Sprache) für seine Videos zu erstellen oder Besprechungen zu protokollieren etc.