Da ich mich durch mein Studium aktuell viel mit digitaler Bild- und Signalverarbeitung beschäftige, habe ich mich gefragt, ob ich mit meinem Wissen wohl eine ganz simple Spracherkennung programmieren könnte. Bzw genauer gesagt wohl eher eine "Worterkennung". Dabei habe ich an folgendes gedacht: Vielleicht kennt ja der ein oder andere hier noch das Spiel "Nintendogs" für den Nintendo DS. Bei diesem Spiel gibt es eine Spracherkennung die dafür sorgt, dass die Hunde auf den Spieler "hören". Dazu muss man diesen zuerst das Wort beibringen, indem man es immer und immer wieder ins Mikrofon hinein spricht. Mit der Zeit werden dann auch irgendwann die einzelnen Wörter erkannt und der Hund reagiert entsprechend. Heutige Spracherkennung ist natürlich viel weiter, wenn man einen Blick auf Alexa, OK Google und so wirft. Aber mich würde viel mehr interessieren, ob ich eine "Worterkennung" programmieren könnte bzw. wie das gehen würde. Schließlich wird ja hinter dem DS-Spiel, bei dem das ganze ja zB auch noch offline funktionierte, kein neuronales Netz stecken wie es heute bei Amazon und Co der Fall ist. Nun habe ich wie gesagt darüber selbst ein wenig nachgedacht mit meinem Vorlesungswissen und wollte mal ein paar erfahrenere Meinungen zu meiner Idee hören: Ich stelle mir das grob so vor, dass ich ein Wort ganz oft immer und immer wieder in ein Mikrofon spreche und aufnehme, sodass ich mehrere Beispiele habe, wie dieses Wort klingen könnte. Wenn ich nun ein Wort ins Mikrofon spreche, dann muss zuerst ja erst einmal der Teil gefunden werden, in dem ich wirklich spreche. Das sollte ja aber einfach automatisch (Schwellwert) zurecht zu schneiden sein. Dann korreliere ich dieses Signal mit allen zuvor aufgenommenen Signalen. Wenn dabei irgendwo eine Ähnlichkeit größer als ein bestimmter Schwellwert entsteht, gehe ich davon aus, dass ich eben dieses Wort ausgesprochen habe. Hier frage ich mich nun, ob dieser Ansatz ausreichen würde, um ein Wort zu erkennen. Oder vllt gar, um verschiedene Wörter auseinander zu halten? Ich möchte keine Sätze sprechen, einfach immer nur ein einzelnes Wort wie eben bei "Nintendogs". Oder müssen die Audiosignale zuvor gefiltert werden, um rauschen zu entfernen? Oder müssen vllt noch andere Kriterien zur Bestimmung herangezogen werden als nur eine Korrelation? Irgendwas auf der Ebene der Fouriertransformierten? Über ein paar Anregungen würde ich mich freuen :)
Tay F. schrieb: > Hier frage ich mich nun, ob dieser Ansatz ausreichen > würde, um ein Wort zu erkennen. Oder vllt gar, um > verschiedene Wörter auseinander zu halten? Vermutlich nicht. > Oder müssen die Audiosignale zuvor gefiltert werden, > um rauschen zu entfernen? Echtes Rauschen lässt sich nicht filtern :) > Oder müssen vllt noch andere Kriterien zur Bestimmung > herangezogen werden als nur eine Korrelation? Irgendwas > auf der Ebene der Fouriertransformierten? Es wird wärmer. Belies Dich mal über "Formanten". Auch der Wikipädie- Artikel über Spracherkennung schien mir beim Überfliegen recht brauchbar.
Ich würde evtl. versuchen, Strategien aus dem OCR (Zeichenerkennung) zu verwenden: Segmentierung, Normalisierung, Kategorisierung ... Diese Methoden quasi auf die optische Darstellung von Amplituden-Verläufen und/oder Spekten anwenden
:
Bearbeitet durch User
Die Methoden zur Spracherkennung sind eigentlich längst Gegenstand solcher Vorlesungen in Signalverarbeitung. Hattet ihr dazu nichts?
Schau dir z.B. mal diese Vorlesung an (also das Skript das es auf der Website gibt): https://www.ei.ruhr-uni-bochum.de/studium/lehrveranstaltungen/581/ Die Leute in der Vorlesung haben selber auch eine einfache Spracherkennung als Projekt entwickelt, geht also durchaus nebenher. Einfach ist aber natürlich anders.
Also die Links hier habe ich jetzt nicht gesucht (wollte nach brauchbaren Haskell-Bibs schauen).. Trotzdem interessant: https://hacks.mozilla.org/2018/09/speech-recognition-deepspeech/ https://www.linux-magazin.de/news/deep-speech-0-2-0-transkribiert-sprache-in-echtzeit/ https://www.youtube.com/watch?v=N88QG8oMMJs (dauert 1 Stunde 21) Anregung: (nur so zum Spaß/Übung/Ergänzung) - Sampleerkennungsspiel programmieren. Wer erkennt ist egal (Spieler, Compi) und viele Samples, min. über 300, viele vielleicht ähnlich.) - Voice Synth programmieren - wie mit Synth nachsprechen? Mama, Papa, Opa, Oma, Ei, Hut usw..?
Im neuen c't Sonderheft Raspi-Projekte steht auch ein Artikel "Sprach-Assistent ohne Cloud" ab Seite 34. https://www.heise.de/newsticker/meldung/c-t-Projekte-Smart-Home-mit-Raspi-ESP-und-Co-4468676.html?hg=1&hgi=0&hgf=false Ich habe das Heft zuhause, weiß also nicht, ob das identisch mit einem früheren Artikel ist: https://www.heise.de/ratgeber/Snips-Raspi-Sprachassistent-ganz-ohne-Cloud-4415247.html also mal nach "Snips" suchen. https://www.home-assistant.io/components/snips/ Elektor hat es auch beschrieben: https://www.elektormagazine.de/news/review-snips-spracherkennung-auf-dem-raspberry-pi
:
Bearbeitet durch User
Hab nachgeschaut, es scheint derselbe Artikel zu sein. Es ist nicht genau das gesuchte, sondern ein fertiges Projekt mit Hard- und Software, keine selbsterstellten Algorithmen. Vielleicht läßt sich die Hardware aber benutzen. Weitere Info zum Artikel hier: http://www.ct.de/w92c Das Mikrofonarray zum Aufstecken auf den Raspi, 8 MEMS-Mikrofone und ein FPGA für $55.00 könnte interessant sein, wenn es unabhängig vom Hersteller verwendbar ist.
:
Bearbeitet durch User
Christoph db1uq K. schrieb: > Hab nachgeschaut, es scheint derselbe Artikel zu sein. Es ist nicht > genau das gesuchte, sondern ein fertiges Projekt mit Hard- und Software, > keine selbsterstellten Algorithmen Würde mich sehr interessieren, was da drinsteckt. Also was so eine Erkennung kann. Wie genau muss ein Wort ausgesprochen werden, damit es erkannt wird. Geht jedes Tempo? Jede Tonhöhe? Versteht das Dingens auch Sächsisch?
Du könntest es mit einem VS1053 versuchen. Und dann noch einen µC dann sollte es gehen. Gibt ja im Netz auch fertige Module die das schon alles haben. Einfach mal danach suchen.
Allenfalls einfach mal den Code von Alexa oder dergleich herunterladen, studieren und testen.
Weg mit dem Troll ! Aber subito schrieb: > Allenfalls einfach mal den Code von Alexa oder dergleich > herunterladen, > studieren und testen. Echt jetzt? Alexa kann man herunterladen (noch dazu im Quelltext) und offline betreiben? Wie groß muss der Rechner sein? Wie groß sind die Datenbanken?
Naja, wenn du auf den deutschsprachigen Sprachraum mit seinen Dialekten eingrenzen kannst wird die Datenbank kleiner. Und wenn "einfach" wirklich "einfach" bedeutet, im Sinne von "Los", "Halt", "Jetzt", "Stop" , genuegt noch weniger. Allenfalls ist das Selberherausfinden der kleinere Aufwand wie Alexa. Der einfachste Ansatz ist den Benutzer vorsprechen zu lassen.
In der S.B.Z. hat man Spracherkennug per Histogramm der
Nulldurchgaenge des Signals benutzt.
Kann also nicht so schwer sein.
> Alexa kann man herunterladen
Ja sicher. Nur kennst du den Befehl nicht.
Versuchs doch mal mit: "Alexa halts Maul".
Vielleicht gibt sie dann wertvolle Tipps.
Und schau dir mal das an für die Programmierung. DTW algorithm
Weg mit dem Troll ! Aber subito schrieb: > Los", "Stop" Die beiden sollten noch gut zu unterscheiden sein, aber viele Worte konträrer Bedeutung liegen schon recht nahe beieinander, denke ich. Für sicherheitskritische Anwendungen nicht nutzbar. ... schrieb: > In der S.B.Z. hat man Spracherkennug per Histogramm der > Nulldurchgaenge des Signals benutzt. Das fände ich spontan zu simpel.
@..., Was ist denn eigendlich die S.B.Z? Sowas wie die A.B.Z? oder die F.B.Z? oder die E.B.Z? ;--p mfg
Tay F. schrieb: > Da ich mich durch mein Studium aktuell viel mit digitaler Bild- und > Signalverarbeitung beschäftige, habe ich mich gefragt, ob ich mit meinem > Wissen wohl eine ganz simple Spracherkennung programmieren könnte. Da kannst du wohl nur selber wissen, was du da gelernt hast. Da du aber nur einen Beitrag hier geschrieben hast, scheinen dich die bisherigen Antworten abgeschreckt zu haben. Du bist also entweder ein Troll oder hast keine Ausdauer oder gar Inspiration, technisch komplexe Themen anzugehen!
Weg mit dem Troll ! Aber subito schrieb: > Der einfachste Ansatz ist den Benutzer vorsprechen zu lassen. Wenn das machbar ist, ja. Tay F. schrieb: > Heutige Spracherkennung ist natürlich viel weiter Man muss unterscheiden, ob man konkrete Worte einer konkreten Person sucht und damit sehr konzentriert matchen kann, oder ob man den Sinn der Sprache unbekannter Personen mit allenmöglichen Worten erkennen möchte. Im Fall 1 reicht es in der Tat, die Worte zu hinterlegen und einfach zu matchen. Habe ich schon gemacht. Im Fall 2 muss man die Gemeinsamkeiten der Sprache unterschiedlicher Menschen finden und den Rohdatenstrom normieren. Dazu ist es auch nötig, das zu tun: > Ich stelle mir das grob so vor, dass ich ein Wort ganz oft immer und > immer wieder in ein Mikrofon spreche und aufnehme, sodass ich mehrere > Beispiele habe, wie dieses Wort klingen könnte. Google et al haben das bereits getan und die Sprache in eindeutige Laute zerlegt, was es auch gestattet, den Effekt von Dialekten und landestypischen Betonungen zu ignorieren und sich auf die markanten Frequenzprofile zu stützen, um Worte von einander abzugrenzen. Dazu gibt es von unterschiedlicher Seite diverse Softwarepakete. Nichtsdestotrotz braucht man auch ein gutes Eingangssignal, das spektral normiert wird, mit Richtungstoleranz /-fokussierung und Störsignalunterdrückung, etc. Tay F. schrieb: > Wenn ich nun ein Wort ins Mikrofon spreche, dann muss zuerst ja erst > einmal der Teil gefunden werden, in dem ich wirklich spreche. Nö. Wenn man permanent sucht und korelliert, kommt ein match automatisch heraus, wenn das Profil gut genug ist. Das drop level liegt dann eher auf dem Ausgang des Korrelators.
Danke erst einmal für die vielen Antworten, es war tatsächlich einiges hilfreiches dabei, worauf ich nochmal näher eingehen möchte. Manni schrieb: > Da kannst du wohl nur selber wissen, was du da gelernt hast. Da du aber > nur einen Beitrag hier geschrieben hast, scheinen dich die bisherigen > Antworten abgeschreckt zu haben. > > Du bist also entweder ein Troll oder hast keine Ausdauer oder gar > Inspiration, technisch komplexe Themen anzugehen! Ja es tut mir auch tatsächlich etwas leid, dass ich nicht geantwortet habe. Da ich mich nebenbei noch an anderen Projekten versucht habe, ist mir dieses Thema tatsächlich etwas untergegangen. Trotzdem habe ich es nicht ganz vergessen und habe nach wie vor vor, es einmal versuchen zu wollen! Egon D. schrieb: > Es wird wärmer. > Belies Dich mal über "Formanten". Auch der Wikipädie- > Artikel über Spracherkennung schien mir beim Überfliegen > recht brauchbar. Danke für den Tipp! Der Artikel ist in der Tat sehr hilfreich. Nebe groben Erklärungen für einen ersten Überblick fallen auch ein paar Stichwörter, nach denen zu googeln vermutlich ein guter zweiter Schritt ist. Clemens N. schrieb: > Schau dir z.B. mal diese Vorlesung an (also das Skript das es auf der > Website gibt): > https://www.ei.ruhr-uni-bochum.de/studium/lehrveranstaltungen/581/ > > Die Leute in der Vorlesung haben selber auch eine einfache > Spracherkennung als Projekt entwickelt, geht also durchaus nebenher. > Einfach ist aber natürlich anders. Ja ohne lesen gehts wohl nicht, auch wenn mir diese 160 Seiten wohl doch zu viel sind. Aber auch hier gibts wieder ein paar Schlagwörter. Leider sind die Übungen ja scheinbar nicht öffentlich zugänglich, die hätten mich ja doch noch sehr interessiert. Stefan schrieb: > Und schau dir mal das an für die > Programmierung. DTW algorithm Danke fürs nächste Schlagwort. Wikipedia erwähnt auch direkt, dass dieser Algorithmus in der Spracherkennung genutzt wird. Jürgen S. schrieb: > Man muss unterscheiden, ob man konkrete Worte einer konkreten Person > sucht und damit sehr konzentriert matchen kann, oder ob man den Sinn der > Sprache unbekannter Personen mit allenmöglichen Worten erkennen möchte. > > Im Fall 1 reicht es in der Tat, die Worte zu hinterlegen und einfach zu > matchen. Habe ich schon gemacht. Im Fall 2 muss man die Gemeinsamkeiten > der Sprache unterschiedlicher Menschen finden und den Rohdatenstrom > normieren. Dazu ist es auch nötig, das zu tun: > [...] > Nö. Wenn man permanent sucht und korelliert, kommt ein match automatisch > heraus, wenn das Profil gut genug ist. Das drop level liegt dann eher > auf dem Ausgang des Korrelators. In meinem Fall soll es zu Beginn tatsächlich erst einmal um deinen zuerst genannten Fall gehen. Die Spracherkennung sollte erstmal nur für wenige Wörter gelten, die nur von mir gesprochen werden, alles weitere kann nach Lust, Laune und Erfolg danach kommen. Der nächst schwierigere Schritt könnte ja schon Raumklang durch verschiedene Entfernungen zum Mikro sein. Aber auch so weit möchte ich eigentlich noch gar nicht denken sondern lieber ganz kleine Schritte. Und stimmt natürlich, permanente Korrelation reicht aus, danke dafür! :) Ja dann wie gesagt noch einmal Danke für die vielen Schlagwörter, Anregungen und Ideen! Ich werde mich jetzt, wo die kälteren Tage wieder kommen, hoffentlich mal ein wenig mit dem Projekt auseinander setzen und erste kleine Erfolge erreichen. Da melde ich mich dann gerne auch nochmal zu :)
..Alexa läuft auf den Supercomputern der NSA.....Speicherbedarf ca. 512 Fantastillionen Terrabyte...
"Alexa, gibt es ein Open Source Code von Alexa?" "Alexa, werde ich von NSA überwacht?"
> In meinem Fall soll es zu Beginn tatsächlich erst einmal um deinen > zuerst genannten Fall gehen. Die Spracherkennung sollte erstmal nur für > wenige Wörter gelten, die nur von mir gesprochen werden, alles weitere > kann nach Lust, Laune und Erfolg danach kommen. Also "einfache Spracherkennung", genau genommen die Erkennung von Kommandos, bestehend aus einem Wort, funktioniert tatsächlich ähnlich OCR: - der Soundschnipsel wird auf eine Lautstärke normiert - das Soundschnipsel wird auf eine bestimmte Länge normiert - der Soundschnipsel wird in einen bestimmten Frequenzbereich normiert Damit wird das Gesprochene zunächst maximal Sprecherunabhängig. Am Schluss wird das Soundfile in z.B. 10 gleich lange Abschnitte geteilt und darin jeweils einige wenige Frequenzbänder (z.B. 3 oder 4) heraussepariert u. deren relative Amplitude ermittelt ... Daraus werden Koeffizienten gewonnen, die man gegen eine Datenbank matcht. Das Ergebnis, was am dichtesten rankommt, ist es dann, sofern ein Mindest-Schwellwert erreicht wird. So kann man relativ sicher unterscheiden, ob das Kommando z.B. mit M, F, S, A, U oder T anfängt oder aufhört. Allerdings auch nicht viel mehr - mit den ausgeklügelten KI-Verfahren für eine "richtige" Spracherkennung hat das natürlich nicht das Geringste zu tun, erfüllt aber seinen (beschränkten) Zweck. Eventuell könnte man tatsächlich eine OCR-Engine einsetzen, z.B. das freie Tesseract. Man zeichnet mittels der oben genannten Parameter irgendwelche Objekte und lässt die von der OCR-Engine analysieren ... interessantes Experiment! Allerdings gibt es bereits für kleines Geld ferige "speech recognition chips", was wohl komplette DSP- bzw. Mikrocontrollersysteme mit entsprechend vorinstallierter Software sein dürften, die die Anwendung stark vereinfachen. Für den seltenen oder gar einmaligen Einsatz ist aber wahrscheinlich das Studium der Unterlagen ein viel zu großer Aufwand.
:
Bearbeitet durch User
Frank E. schrieb: > - der Soundschnipsel wird auf eine Lautstärke normiert > - das Soundschnipsel wird auf eine bestimmte Länge normiert > - der Soundschnipsel wird in einen bestimmten Frequenzbereich normiert > > Damit wird das Gesprochene zunächst maximal Sprecherunabhängig. Das wäre schön. Leider spricht jeder andere Dialekte und hat auch bei ein und derselben Aussprache andere Formanten und damit einen abweichenden 3D-Verlauf der Frequenzkonstellation über die Zeit. Wenn aber mit der SV soweit ist, dass man dort die Muster herausfiltern kann, ist das von dir beschriebene gleich nebenbei miterledigt: Die Lautstärke ist das geringste Problem, weil sie bei der Betrachtung im Frequenzbereich komplett unter den Tisch fällt. Aus demselben Grund sind auch die Länge und der Frequenzbereich indirekt uninteressant. Was man aber machen muss, ist das Mikrofonsignal überhaupt erst einmal so zu gewinnen und zu konditionieren, dass ein verarbeitbares digitales Signal herauskommt. Da geht es mit Position, Charakteristik und Amplitudenregelung los, um ein möglichst hoch aufgelöstes Signal übertragen zu können. Die internetbasierten Systeme z.B. vorverarbeiten das Signal passend für den MPG-Kompressor.
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.