mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Simple Spracherkennung selber programmieren


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.
Autor: Tay F. (tayfe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :)

Autor: Nogoogleamazon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal SOPARE an:
https://github.com/bishoph/sopare

Damit hast du ein gutes Gerüst.

Autor: Egon D. (egon_d)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: Frank E. (Firma: Q3) (qualidat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Hotte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Methoden zur Spracherkennung sind eigentlich längst Gegenstand 
solcher Vorlesungen in Signalverarbeitung. Hattet ihr dazu nichts?

Autor: Clemens N. (cleemens)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: rbx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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/

Youtube-Video "09: Grundlagen der Automatischen Spracherkennung, Vorlesung, WS 2016/17" (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..?

Autor: Christoph db1uq K. (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
Autor: Christoph db1uq K. (christoph_kessler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.

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