Wie simple Spracherkennung machen?

Gast #6369414
Hi,
ich brauche eine simple Spracherkennung die in Software gemacht ist.
Je weniger Prozessorlast um so besser.
Auch wenn da wohl kein AVRtiny reicht, sollte es auch nicht gleich ein 
RPI4 sein den man braucht.
Ich habe aktuell noch einen ESP der sich langweilt, und das wollte ich 
gerne ändern. Ob der am Ende reicht wird man ja schnell feststellen.

So ich will NUR 80-300 Worte erkennen und diese dann weiter verarbeiten.
Also "Licht", "Motor", "an", "aus", "auf","zu",.....

Ich habe zwar einiges gefunden aber alles war dann viel zu Fett oder in 
Sprachen die mehr zum PC passen.
Hardware habe ich auch gefunden aber das wollte ich ja nicht.
Gast
ESP8266 wobei ich die ESP32 hätte.

Über das MOVI™ Arduino Shield stolpert man ja überall, nur das ist nicht 
das was ich suche. Ansonsten hätte ich das schon besort und hier nicht 
gefragt.

Die UNI ist schon einige Jahre her, das ganze ist da auch mehr privater 
natur. Bei mir an der Arbeit kann man so was nicht mal ansatzweise 
gebrauchen. Ich will auch kein ALEXA Ersatz oder so ähnlich bauen.
Gast
Karl schrieb:
> ber das MOVI™ Arduino Shield stolpert man ja überall,

Ich leider nicht. Ich habe fast 6 Monate gebraucht um es zu finden. Und 
meine Bekannte kannten es auch nicht, bis ich es ihnen sagte.

Davon abgesehen ist Spracherkennung so aufwendig das man da ein bisschen 
mehr braucht als ein lausigen Arduino / bzw. ESP.  Das kannst du ergo 
ohne Hilfsprozessor gleich vergessen.

Was wohl der Grund ist, warum die bei den Movi ein drauf gemacht haben.
Gast
Was du aber mit ein Arduino machen kannst ist ihn Morsebefehle zu geben.

Also Langer Ton = Befehls modus.  Dann kurz + Lang analysieren und dann 
den Befehl ausführen wenn wieder ein langer Ton kommt. ;)  In ähnlicher 
Form wie ein Klatschschalter aus den Baukasten meiner Jugend.
Gast
Nur so als Beispiel für geht nicht auf einem kleinen Prozessor: 
TrulyHandsfree läuft auf einem M4.

Den Code dazu wäre super, aber das wäre ja auch zu schön.
Karl schrieb:
> So ich will NUR 80-300 Worte erkennen
> und diese dann weiter verarbeiten.
> Also "Licht", "Motor", "an", "aus", "auf","zu",.....

Sowas läuft unter "Stichworterkenner". Dazu braucht man nicht allzuviel 
Prozessorleistung, und wenn man sich auf wenig Wörter beschränkt, dann 
könnte die Genauigkeit ausreichen.

Im Endeffekt läuft das auf klassische Signalverarbeitung, gefolgt von 
Sprachverarbeitung raus. Frühe IBM- und Microsoft-Spracherkennung lief 
auf 486ern mit ein paar MB RAM, drunter wird's bei dir eher nichts.

Macht man heutzutage nicht mehr, weil KI-Systeme schlicht besser sind, 
wenn man sie ordentlich trainiert. Mein unbegründetes Gefühl sagt, dass 
man mit vergleichbarer Rechenleistung auch Inferenz auf einem kleinen 
neuronalen Netz fahren kann und bessere Ergebnisse bekommt - der Aufwand 
liegt im Training.
Gast
Hast Du für einen "Stichworterkenner" eine gute Quelle?

Was man heute macht oder nicht ist mir egal, Haupsache ich kann die paar 
Wörter recht sicher erkennen.
Die alte Technik muss nicht schlechter sein, sie ist halt nur nicht was 
mit KI. Ich muss die Wöter ja nicht wirklich verstehen und anhand vom 
Kontext reagieren.

Sagen wir mal wir würden einen STM32F4 oder besser einen H7 nehmen.
Die DSP Einheit macht eine FFT recht flott.
Auch andere Filter sind für den kein Problem.
Und ein kleines Neuronales Netz sollte der auch packen.
Aber das fehlt mir und die Daten dazu auch.

Anmelden? Ja das könnte ich machen, aber wird mir das dann helfen?
Karl schrieb:
> Hast Du für einen "Stichworterkenner" eine gute Quelle?

Ich hätte während meines Studiums ein längeres Projekt haben können, wo 
ich einen ebensolchen auf Basis klassischer Signalverarbeitung 
entwickeln sollte. Habe das Projekt dann aber nicht durchgeführt. Nein, 
fertigen Code habe ich nicht.

Stichwörter, um sowas selbst zu machen, sind "Cepstrum", "Quefrenz", 
"MFCC" (Mel Frequency Cepstral Coefficients) und so.

Die Idee der Spracherzeugung ist recht einfach: Ein Anregungssignal 
(stimmhaft = Impulszug, stimmlos = weißes Rauschen) wird durch ein 
lineares Filter (Rachen, Mund, Nase; z.B. als Röhrenmodell mit 2x7 
Parametern abgebildet) geschoben (gefaltet) und ergibt das fertige 
Audiosignal. Das kann ein C64.

Was du willst ist, aus dem Tonsignal die (bekannte) Anregung zu 
entfernen (via Cepstralanalyse - recht einfach) und aus dem Rest dann 
die Filterkonfiguration für einen gewissen Zeitraum (gefenstert, z.B. 
überlappende 10ms-Blöcke) zu ermitteln. Die Filterkonfiguration 
entspricht dem aktuellen Phonem, und aus der Phonemfolge bastelt man 
sich dann die Wörter und Sätze zusammen.

Um das korrekt zu machen, braucht man übrigens auch einiges an Training, 
wenn auch wesentlich weniger als bei NNs.

Wenn du es nicht selbst entwickeln willst, dann schau dich bei den 
gegebenen Beispielen um.

Karl schrieb:
> Die alte Technik muss nicht schlechter sein,
> sie ist halt nur nicht was mit KI.

Nun, sie ist für breite Anwendungsfelder nachweislich schlechter. 
Deswegen nutzt man ja alternative Ansätze.

Karl schrieb:
> Ich muss die Wöter ja nicht wirklich verstehen und anhand vom
> Kontext reagieren.

Die Wörter "erkennen" ist Signalverarbeitung, die Wörter "verstehen" ist 
Sprachverarbeitung. Beides wirst du brauchen, auch wenn es nur ein 
rudimentäres "wenn >Licht an< führe Funktion LichtAn() aus" ist.

Karl schrieb:
> Anmelden? Ja das könnte ich machen, aber wird mir das dann helfen?

Ohne Anmeldung keine PMs. Simpelste Logik.
Gast
Cool ja, nur ist noch nichts greifbares rausgekommen. Warte auch 
gespannt auf ein Ergebnis (Code).

Also wenn ich das richtig verstehe dann wird der Ton über eine 
Cepstralanalyse rein geholt und dann könnte man diese Daten einem nn als 
Futter geben oder über die Phonemfolge und einer Tabelle die Wörter 
erkennen.

Klingt für mich nach machbar für einen m4.
Nur ich bin der falsche Mann dafür, weil ich damit noch nie was zu tun 
hatte. Aber Interesse habe ich schon, weil mir da ein paar Projekte 
einfallen die man damit machen könnte.
Peter schrieb:
> Cool ja, nur ist noch nichts greifbares rausgekommen.
> Warte auch gespannt auf ein Ergebnis (Code).

Von mir wird keiner kommen. Kauft euch für ein paar Euronen ein 
Arduino-Shield mit einem GHz-SoC, der kann das auch.

Peter schrieb:
> Also wenn ich das richtig verstehe dann wird der Ton
> über eine Cepstralanalyse rein geholt

Nö, kommt aus einem ADC-Wandler hinter einem Mikrofon.

> und dann könnte man diese Daten einem nn als Futter geben

Wenn du da ein NN draufschmeißen willst, dann kannst du das auch mit den 
Audiosamples direkt machen. Spart Rechnerei.

> oder über die Phonemfolge und einer
> Tabelle die Wörter erkennen.

Erstmal die Phonemfolge erkennen... du willst aus einem logarithmierten 
und fouriertransformierten Signal den siebenstufigen Filter 
rekonstruieren, der das originale Signal mal erzeugt hat, unter Annahme 
einer bestimmten Anregung. Stichwort dafür ist "Hidden-Markov-Modell", 
das sind statistische Verfahren. ("Hidden", weil du den Filterzustand 
nicht kennst.)
Gast
Na super, nix mit einfach. Schade das ich das zwar gebrauchen könnte 
aber nicht in der Lage bin es selbst zu machen.

Wünschet ich könnte es, dann viel Glück dabei.
Ist jetzt auch wieder lächerlich...wenn überhaupt, dann macht  man das 
über Neuronale-Netze. Die Programmierung und die Umsetzung sind dann 
noch zwei Paar Schuhe! Für Beides scheint beim TO kein Verständniss 
vorhanden zu sein. Also warten wir ab!!
Gruß Rainer
(Firma: matzetronics)
Der alte Philips C-Netz Tornister mit Spracherkennung für die Ziffern 
0-9, 'Auflegen' und 'Wählen' hatte das mit einem 25Mhz TMS32C025 DSP, 
32kB ROM, 32kB RAM und etwas schnellem Dualport RAM zur Kommunikation 
mit der Ablaufsteuerung gelöst.
Die ROMs sind allerdings schon lange bei den Engelein und den Rest der 
Hardware habe ich auch zerlegt...
Gast
Also ich arbeite meistens mit dem stm32f4..
Und gelegentlich auch noch mit einem 8052 & avr.

Der TO Arbeitet anscheinend mit den esp8266, an diese habe ich mich noch 
nicht getraut.

Wie auch immer ich habe hier von keine Ahnung und kann es nur 
gebrauchen.
Gast
Da Snips wohl ein Schuss in den Ofen war habe ich etwas gewühlt und bin 
auf Rhasspy gestoßen was auch Interessant zu sein scheint. Allerdings 
finde ich spontan keinen Hinweis die Software auf einem ESP32 laufen zu 
lassen.
Nach erstem überfliegen von https://rhasspy.readthedocs.io/en/latest/ 
macht es auch mich neugierig auf eine eigene Installation um den einen 
oder anderen ESP8266 (mit Tasmota) im lokalen Netz per Sprache zu 
bedienen.
Gast
Danke das Ihr euch so einbringt und wie es aussieht bin ich nicht der 
einzige der so was braucht.

Einige Antworten helfen bei der Suche, Andere nunja ist ein offenes 
Forum.

Ich wollte eigentlich die Erkennung ungerne selber komplett schreiben, 
da kann es zuschnell passieren das ich in einer Sackgasse lande. Ich 
erwarte jetzt auch nicht das sich jemand hin setzt und das mal nur aus 
spaß für mich schreibt.
Ich werde mich die nächsten Wochen dran machen und mal sehen was geht 
und was nicht.

Ich gehe davon aus das nach den Einlesen der Audio Daten (MONO 8-10KHz) 
man diese über dieses Cepstrum Filtersystem am besten klein bekommt.
Die Original Daten auf ein NN zu geben mag auf einem PC gehen, aber auf 
einen Kontroler wird es eng. Diese reduzierten Daten müssen dann auf ein 
kleines NN los gelassen werden. Da habe ich irgentwo noch ein paar 
kleine Systeme die recht handlich waren. Vielleicht geht aber auch eine 
einfache Reihenfolgenauswertung, wobei ich hier mehr Probleme erwarte. 
Aber die wäre schneller wenn sie den läuf.

Wie gesagt ist jetzt erstmal ansehen der ganzen Informationen angesagt 
und dann vorsichtig ran tasten. Wird dauern, habe ja noch andere Sachen 
zu tun.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.