Forum: Digitale Signalverarbeitung / DSP / Machine Learning Wie simple Spracherkennung machen?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Karl (Gast)


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.

: Verschoben durch Admin
von Schlaumaier (Gast)


Lesenswert?

Karl schrieb:
> ich brauche eine simple Spracherkennung die in Software gemacht ist.
> Je weniger Prozessorlast um so besser.

Wenn es rein offline sein soll kenne ich nur dieses System.

https://www.audeme.com/movi.html

Leider nicht sehr günstig aber dafür wenigstens sicher vor der pösen 
Jungs. ;)

von MaWin (Gast)


Lesenswert?

Karl schrieb:
> Ich habe aktuell noch einen ESP

Welchen auch immer, wohl nicht 32.

Also auf dem Stand der Mikroprozessoren von 1980.

Dann musst du auch so alte Lösungen nehmen.

300 Worte werden das eher nicht.

von Primatentrainer (Gast)


Lesenswert?


von Karl (Gast)


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.

von Schlaumaier (Gast)


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.

von Schlaumaier (Gast)


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.

von Karl (Gast)


Lesenswert?

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.

von S. R. (svenska)


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.

von Karl (Gast)


Lesenswert?

Karl schrieb:
> Den Code dazu wäre super, aber das wäre ja auch zu schön.
am besten ber PM

von S. R. (svenska)


Lesenswert?

Karl schrieb:
>> Den Code dazu wäre super, aber das wäre ja auch zu schön.
> am besten ber PM
Unangemeldet?

von malsehen (Gast)


Lesenswert?


von Arduino Fanboy D. (ufuf)


Lesenswert?

S. R. schrieb:
> KI-Systeme
Suchtipp: Sipeed Maix dock
Oder einer seiner K210 Brüder

Mikrofon
FFT
Neuronales Netz
Für wenige Dutzend Euronen

KA, ob das für den Zweck reicht...

:-)
Aber immerhin mit der Arduino IDE nutzbar
:-)

: Bearbeitet durch User
von Karl (Gast)


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?

von S. R. (svenska)


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.

von Assembler (Gast)


Lesenswert?

Cooler Thread, ich such auch eine offline Spracherkennung für µC

von Peter (Gast)


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.

von Robert (Gast)


Lesenswert?

Karl, Peter oder Robert es nervt!

von S. R. (svenska)


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

von Peter (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

Bei der Vorführung auf einer Conference hat es zwei Worte detektiert 
(On/Off), aber nur mit ~30% Richtigkeit ......
https://codelabs.developers.google.com/codelabs/sparkfun-tensorflow/#0

von pegel (Gast)


Lesenswert?

Kann sich noch jemand an dieses Silberfarbene DDR Heftchen zur 
Spracherkennung mittels 8 analogen Filtern und U880 erinnern?

von Rainer V. (a_zip)


Lesenswert?

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

von yusuf (Gast)


Lesenswert?


von Nicht W. (nichtsowichtig)


Lesenswert?

Im Prinzip ganz einfach. Arm Cortex + schnelle Speicheranbindung, etwas 
Signalverarbeitung aus dem dritten Semester und gute 
C/Assembler-Kentnisse.

Schönes WE-Projekt, viel Erfolg.

von duck&wech (Gast)


Lesenswert?

Assembler schrieb:
> Cooler Thread, ich such auch eine offline Spracherkennung für µC

Auf einem ATtiny oder an was für einen µC hast du gedacht?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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

von void (Gast)


Lesenswert?

yusuf schrieb:
> Nimm Lallus: http://www.wolfgang-back.com/lallus_home.php

Und lerne DTMF Töne zu pfeifen, sonst wird das mit der "Sprach"erkennung 
damit schwer...

von Peter (Gast)


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.

von Der Unwissende (Gast)


Lesenswert?

Ich bin mal über das Projekt Snips gestolpert, braucht aber einen RasPi. 
Die Webseite dazu ist makers.snips.ai.

von ThomasW (Gast)


Lesenswert?

Der Unwissende schrieb:
> Ich bin mal über das Projekt Snips gestolpert, braucht aber einen RasPi.
> Die Webseite dazu ist makers.snips.ai.

Snips wurde von Sonos gekauft und ist seitdem für andere leider nicht 
mehr verfügbar

von hufnala (Gast)


Lesenswert?

Hier wurde irgendwann mal matrix voice vorgestellt. Kostet aber $65 + 
ggf. RPi, hab es nicht genau durchgelesen was mit/ohne geht

//hufnala

von Rainer V. (a_zip)


Lesenswert?

Wenn nur ein Pfifpchen erkannt werden soll, dann kann man alles Mögliche 
veranstalten. Sonst...
Gruß Rainer

von Stefan (Gast)


Lesenswert?


von Der Unwissende (Gast)


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.

von (prx) A. K. (prx)


Lesenswert?

duck&wech schrieb:
> Auf einem ATtiny oder an was für einen µC hast du gedacht?

Könnte auch mit einem Tiny gehen. Indem man diesen per Bluetooth ans 
Handy koppelt und das Handy an Google. Fertig. ;-)

von Karl (Gast)


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.

von Chris (Gast)


Lesenswert?

Naja, ich verwende den RSC-164 IC

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.