Spracherkennung und Sprachsynthese

Begonnen von Prof. Dr. Peter Henning, 09 Februar 2017, 08:19:06

Vorheriges Thema - Nächstes Thema

kaizo


3rd Party:

Siehe z.B. bei Reichelt: http://www.reichelt.de/?ARTICLE=188181
Aud Click, Alexa fähiger Lautsprecher.

Leider hört Alexa erst nach einem Knopfdruck zu....
FHEM 6.x  auf i3
1x Maplecun FS20, HM, 1x CUL f. WMbus
1x Arduino Nano für Lacrosse, 1x für Empfang WH1080,
1x Arduino Uno+Ethernet-Shield & Firmata für 1Wire
1x Raspberry Pi für Einbindung Junkers-Heizgerät mit HT3-Schnittstelle, div. Sonoff+EspEasy+Tasmota über MQTT

Waldmensch

Na das ist ja Quatsch, wenn ich erst hinlaufen und Knopf drücken muss, bin ich auch zum Lichtschalter oder Thermostat gelaufen. Zumal man für den Preis auch den Dot bekommt. Als Küchenradio hat der Dot bei uns schon vollen WAF trotz quakigem Sound.


Gesendet von iPhone mit Tapatalk

Schlimbo

Hallo zusammen,
habe gerade ein interessantes Hardware Projekt entdeckt:
MATRIX Voice: Open-Source Voice Platform
www.golem.de/news/matrix-voice-preiswerter-mit-spracherkennung-experimentieren-1702-126358.html
Das wäre doch genau das richtige für Prof. Dr. Peter Henning's Vorhaben.

Gruß Schlimbo

Prof. Dr. Peter Henning

Danke, habe das umgehend an einen meiner Mitarbeiter gesendet, wir werden uns das ansehen.

LG

pah

SmokeMaster

Matrix Voice hab ich mir auch direkt bestellt. Kostet nicht viel, gute Hardware und vor allem ist es offen. Damit wird in Verbindung mit FHEM deutlich mehr Möglichkeiten sein als mit Amazon Alexa oder Google Home.

hartenthaler

Zitat von: Prof. Dr. Peter Henning am 10 Februar 2017, 17:05:39
Darin nehme ich zunächst an dem (von Google) zurückgelieferten Satz eine semantische Analyse vor:
- Normieren bestimmter Spezialsätze
- Analyse der Eingabe nach device, verb, reading, value
- Weiterreichen an ein ziemlich längliches if..elsif..else zum Abarbeiten der einzelnen Befehle.

Genau so etwas - aber deutlich intuitiver zu konfigurieren - macht das Modul TALKTOME mit der Chatbot-Programmiersprache RiveScript (s. https://forum.fhem.de/index.php/topic,54863.msg583423.html#msg583423).

Die folgenden Testfälle

wie ist wetter von morgen
wie ist das wetter morgen
wie ist wetter morgen
wie ist morgen das wetter
wie ist morgen wetter
wetter von morgen
wetter morgen


würden in RiveScript folgendermassen formuliert werden

! array artikel = der|die|das|den|dem|des|ein|eine|einen

+ [*] wetterbericht [*]
- Hier ist der aktuelle Wetterbericht für Berlin: <call>readingsval Wetter.Berlin.Vorhersage description-2 Error</call>.

+ [wie] [ist|wird] [@artikel] wetter [von] morgen [sein|werden]
@ wetterbericht

+ [wie] [ist|wird] morgen [@artikel] wetter [sein|werden]
@ wetterbericht

wobei die Funktion "<call>readingsval ..." das Reading eines FHEM-Devices ausliest um die Antwort zu formulieren. Mit eckigen Kammern werden optionale Elemente gekennzeichnet, der Stern steht für beliebige Inhalte und der senkrechte Strich bedeutet "oder". Mit Plus wird die Eingabe/Frage eingeleitet, mit Minus die Ausgabe/Antwort und ein @ verweist auf eine andere Frage.

Ich finde RiveScript ist sehr einfach zu erlernen, ausreichend flexibel und leicht in FHEM integrierbar. Es gibt ein gutes Tutorial und einen Online-Debugger. Was es leider (noch) nicht gibt ist eine Anbindung an wikipedia oder Wolfram Alpha, so dass der Anwendungsbereich schon eher auf eine Domäne wie Smart Home beschränkt ist. Aber so kleine Dinge wie "Erzähle mir einen Witz" oder "berechne 5 Fakultät" oder "was ist sin(2 mal pi)" oder "wie ist die Temperatur im Wohnzimmer" oder "öffne die Garage" gehen ganz einfach.

Bei TalkToMe kommt der Text üblicherweise aus einem Chat per Telegram, aber das kann man sicherlich leicht anpassen, so dass der Text auch aus MatrixVoice kommen könnte. Dann kann man auf die Übertragung zu Amazon komplett verzichten und die Alexa-Funktionen rein lokal nachbilden. Ich habe meinem Chatbot (meiner heißt James und nicht Jeannie) schon vieles rund um Smart Home beigebracht, aber das ist natürlich Fleissarbeit und viele Helfer würden das Thema deutlich schneller voranbringen. Auf dem SmartPhone nutze ich übrigens auch Spracheingabe für den Telegram-Chat, aber das ist dann natürlich wieder bei Google und allen, die da mithören, bekannt; deshalb fand ich die Info zu MatrixVoice auch so spannend.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Prof. Dr. Peter Henning

Na, da muss ich aber an zwei Stellen widersprechen.

Fangen wir hinten an: MatrxiVoice wird, so wie ich das System verstehe, nur die Audiodaten liefern. Und eben keine Spracherkennung machen.
Für eine moderne Spracherkennung bedarf es umfangreicher statistischer Daten, um die Markov-Kette richtig zu bestücken. Das leistet kein FPGA, eine Weiterleitung an Amazon, Google oder einen anderen Datenkraken ist also immer noch nötig.

Zweiter Widerspruch - ohne RiveScript näher zu kennen, das ich mir in der Tat mal ansehen werde: Die Beispiele sind eben keine semantische Analyse, nur rudimentär (bei den Artikeln) wird etwas abstrahiert. Einfacher ausgedrückt: In dem Beispiel müsste man jeweils

wie wird das wetter morgen
wie wird das wetter übermorgen
wie ist das wetter auf dem golfplatz

separat codieren.

Da sind meine paar Zeilen schon etwas weiter.

LG

pah

hartenthaler

#52
Da geht schon noch mehr in RiveScript. Hier mal (aus dem Kopf, ohne es getestet zu haben) ein Beispiel

! array artikel = der|die|das|den|dem|des|ein|eine|einen
! array zeit    = morgen|übermorgen

+ [*] wetterbericht [für] (@zeit) [in] [*]
- Hier ist der aktuelle Wetterbericht für <star2>: <call>readingsval Wetter.<star2>.Vorhersage <star1> Error</call>.

+ [wie] [ist|wird] (@zeit) [@artikel] wetter [in|auf dem] * [sein|werden]
* <star1> == morgen => {@ wetterbericht für morgen in <star2>}
* <star1> == übermorgen => {@ wetterbericht für übermorgen in <star2>}
- Ich kenne nur das Wetter von morgen und übermorgen.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Thyraz

#53
Matrix Voice sieht ja wirklich sehr cool aus. :)
Bin zur Zeit auch sehr vom Echo (Dot) begeistert und auf der anderen Seite genervt vom umständlichen Triggern des Custom Skills.

Gibt ja schon eine existierende (vielseitigere) Variante mit dem Matrix Creator.
Daher gibt es auch schon ein Beispielprojekt um Alexa drauf laufen zu lassen:
http://www.instructables.com/id/Build-a-DIY-Amazons-Alexa-With-a-Raspberry-Pi-and-/?ALLSTEPS

Das Projekt, welches in dem Tutorial verwendet wird findet man hier:
https://github.com/matrix-io/matrix-creator-alexa-voice-demo/blob/master/alexa_voice_demo.py

Dort ist auch zu sehen wie man Audio von der Hardware empfängt, als wav File speichert und an Alexa übergibt.
Hier wäre auch problemlos möglich einen anderen Audio Service wie Google Speech API anzutriggern.
Damit würde man dann einfach den erkannten Text zurück geliefert bekommen, um ihn dann wie hier diskutiert in FHEM auszuwerten.

Ich glaub ich muss mir auch so ein Matrix Voice vorbestellen. :)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Thyraz

#54
Ok, das fehlende Stück war ja noch die lokale "Hotword" Erkennung.

Also das aufwachen bei einem Trigger wie "Alexa".
Gibt es auch schon (kostenlos nutzbar für non-Commercial):

https://github.com/kitt-ai/snowboy

Somit sollte man mit einem Matrix Voice + Raspberry Pi an sich alles beisammen haben was wir suchen.... :)

edit: Falls jemand irgendwann so ein Teil in der Hand hat:
Hier findet man wie man das virtuelle Mic Device (Verarbeitete Audiodaten generiert aus dem Mic-Array) mit Snowboy zum laufen bekommt:
http://community.matrix.one/t/how-to-record-with-pyaudio/357
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

yrwyddfa

Hat jemand schon Erfahrungen mit Jasper gemacht? In der c't gab es da einen Artikel zum Selbstbau eines Spracherkennungsserver via pi und Jasper (onlike allerdings als Bezahlartikel):

https://m.heise.de/ct/ausgabe/2016-2-Digitaler-Assistent-mit-Offline-Spracherkennung-im-Eigenbau-3057626.html

Der Vorteil wäre auch hier der Verzicht auf eine Sprachanalyse im neugierigen Netz.
If every day has its number, Monday would be a zero division.

Prof. Dr. Peter Henning

Ich habe gerade ein Team aus vier Studenten an einem Projekt mit Snowboy sitzen.

LG

pah

yrwyddfa

Ach ja: Wofür rivescript interessant ist, wäre eine TTS-Ausgabe variabler zu machen, sprich, variierende Antworten auf die selbe Aufforderung zu generieren:

- Ich habe die Lampe im Wohnzimmer für Dich angeschaltet
- Das Licht im Wohnzimmer ist nun an
- Jetzt ist es im Wohnzimmer etwas heller
- etc.

If every day has its number, Monday would be a zero division.

tiroso

Hallo zusammen.

DiE ganze Thematik ist mehr als interessant. Mich interessieht sehr wie ihr es umsetzen wollt die Sprache/text auch zu verstehen. Google besitzt dafür ja die Natural Speaking API. Aber da man ja schon Speech to Text von extern nutzen will....Möchte man die Auswertung auf dem Heimischen Rechner erledigen. Nur wie da am besten anfangen.  Ohne Zig Sätze abzuklappern die gesagt werden könnten. Wie das abgleichen mit den Devices in FHEM? Soll ja alles "von alleine" passihren.
RiveScript sieht ja nicht schlecht aus, ist aber zu starr denke ich.
Wie sieht es dann mit der Semantik und Syntax aus?
Gruß

Prof. Dr. Peter Henning

"Voin alleine" geht gar nichts, schließlich ist das ein Computer und kein Orakel.

Natürlich will man erstens nicht alle Devices unter FHEM per Sprache steuern - viel zu gefährlich. Damit bedarf es in jedem Fall einer Liste von Devices - und damit sind wir genau bei meinem Codebeispiel, das oben gepostet wurde. In ähnlicher Form läuft das bei mir ganz hervorragend.

RiveScript finde ich ziemlichen Mist, nachdem ein Student von mir das sauber aufgearbeitet und dokumentiert hat.

Bei der Hotword-.Erkennung sind wir auch weiter, mein Snowboy-Team sammelt gerade Vergleichsdaten von verschiedenen Leuten.

LG

pah