Wie simple Spracherkennung machen?

Gast #6369414
Lesenswert?

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 #6369439
Lesenswert?

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 #6369445
Lesenswert?

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 #6369448
Lesenswert?

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.
#6371308
Lesenswert?

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 #6371774
Lesenswert?

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?
#6372141
Lesenswert?

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 #6372376
Lesenswert?

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.
#6372399
Lesenswert?

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.)
(Firma: matzetronics) #6372536
Lesenswert?

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 #6372832
Lesenswert?

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 #6373357
Lesenswert?

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 #6374891
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren