TTS & STT Spracheingabe und Sprchausgabe

  • 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.

    Code
     apt install python3 python3-pip ffmpeg

    Jetzt kann Whisper installiert werden.

    Code
    pip install git+https://github.com/openai/whisper.git 

    Für ein Update

    Code
    pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git


    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.

    Code
     ~/.local/bin/whisper test.mp3 --model medium --language German --output_format txt

    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.

    Einmal editiert, zuletzt von maik3531 (1. Dezember 2023 um 00:14)

  • Hier noch mal ein Beispiel an Hand von

    Externer Inhalt www.youtube.com
    Inhalte 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.


  • 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
    python3 ./stt.py 2>/dev/null >> stt.txt

    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

    Einmal editiert, zuletzt von maik3531 (1. Dezember 2023 um 00:21)

  • 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

    Code
    ffmpeg -i input.mp3 output.flac

    umwandeln und mit

    Code
    flacsplt -S 7 output.flac

    splitten wobei die Option -S (Anzahl) angibt um 7 Dateien unter 10 MB zu haben welche wir dann nacheinander mit

    Code
    python3 ./stta.py >> stta.txt

    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

    Zitat

    es 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

    2 Mal editiert, zuletzt von maik3531 (27. November 2023 um 15:49)

  • 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.


    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"


    Einfach unter z.B. sttr.py abspeichern und im Terminal mit

    Code
    python3 sttr.py </dev/null 2>/dev/null

    Würde mich über Feedback freuen.

    Wer die oberen Beiträge nicht komplett durchgelesen hat.. für die Verwendung muss python3-pyaudio installiert werden.

    3 Mal editiert, zuletzt von maik3531 (1. Dezember 2023 um 00:04)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!