SNIPS: Sprachsteuerung (mittlerweile auch per Textcommands) über snips.ai

Begonnen von Thyraz, 21 Juli 2018, 20:28:48

Vorheriges Thema - Nächstes Thema

Thyraz

Zitat von: tomster am 04 September 2018, 11:31:01
Welches Mikrophon/ Device benutzt Du und wie weit stehst Du vor dem Mikrophon? Hast Du viele Hintergrundgeräusche?

Ja, irgendwie ist es komisch, dass du sowohl die Probleme mit dem Wakeword hast, als auch mit der Erkennung.
Ab und an eine fehlerhafte Erkennung ist sicher normal, dass hatte ich auch mit Alexa oft.
Aber gefühlt ist das bei mir mit Snips (wahrscheinlich durch den begrenzten Wortschatz) weit seltener.

Hast du mal versucht mit arecord händisch eine WAV Datei aufzunehmen und die dann zum PC zu übertragen?
Musst Snips davor beenden, damit das Micro freigegeben ist.

Dann könntest mal schauen wie die Audioqualität und die Lautstärke ist.
Z.B. ob etwas übersteuert wenn nah dran bist, oder ob es extrem leise ist, vor allem wenn du etwas entfernt bist.

Man kann mit alsamixer die MIC Volume und MIC BOOST anpassen.
Damit die Einstellungen einen Neustart überleben noch ein 'sudo alsactl store' hinterher...

Zitat von: Neuhier am 04 September 2018, 11:36:12
@Thyraz: keine Änderung mit Deinem Vorschlag.
...
Jetzt erscheint im Log, als letzter Eintrag von Snips:  5: Device selected:
Dahinter steht aber nix.


Mit meinem Vorschlag meinst du "Temperatur Thermometer Draußen" sagen?
Was erscheint denn alles im Log?
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Neuhier

2018.09.04 12:09:23 5: set textCommand - value: sage temperatur thermometer aussen
2018.09.04 12:09:23 1: PERL WARNING: Use of uninitialized value in substitution (s///) at ./FHEM/10_SNIPS.pm line 627.
2018.09.04 12:09:23 5: Parsed value: sage temperatur thermometer aussen for key: input
2018.09.04 12:09:23 1: PERL WARNING: Use of uninitialized value $value in concatenation (.) or string at ./FHEM/10_SNIPS.pm line 660.
2018.09.04 12:09:23 5: Parsed value:  for key: intent
2018.09.04 12:09:23 5: Parsed value:  for key: probability
2018.09.04 12:09:23 5: Parsed value:  for key: siteId
2018.09.04 12:09:23 5: Parsed value:  for key: sessionId
2018.09.04 12:09:23 5: sending message to NLU: {"id":"{\u0022Channel\u0022:null,\u0022Device\u0022:null,\u0022Room\u0022:null,\u0022input\u0022:\u0022sage temperatur thermometer aussen\u0022,\u0022sessionId\u0022:null,\u0022siteId\u0022:null}","input":"sage temperatur thermometer aussen","sessionId":"fhem.textCommand"}
2018.09.04 12:09:23 5: publish received for hermes/nlu/intentParsed, {"id":"{\"Channel\":null,\"Device\":null,\"Room\":null,\"input\":\"sage temperatur thermometer aussen\",\"sessionId\":null,\"siteId\":null}","input":"sage temperatur thermometer aussen","intent":{"intentName":"blubber:GetNumeric","probability":0.93911445},"slots":[{"rawValue":"thermometer","value":{"kind":"Custom","value":"thermometer"},"range":{"start":16,"end":27},"entity":"de.fhem.Device","slotName":"Device"},{"rawValue":"aussen","value":{"kind":"Custom","value":"aussen"},"range":{"start":28,"end":34},"entity":"de.fhem.Room","slotName":"Room"}],"sessionId":"fhem.textCommand"}
2018.09.04 12:09:23 5: Parsed value: aussen for key: Room
2018.09.04 12:09:23 5: Parsed value: thermometer for key: Device
2018.09.04 12:09:23 5: Parsed value: sage temperatur thermometer aussen for key: input
2018.09.04 12:09:23 5: Parsed value: GetNumeric for key: intent
2018.09.04 12:09:23 5: Parsed value:  for key: siteId
2018.09.04 12:09:23 5: Parsed value: fhem.textCommand for key: sessionId
2018.09.04 12:09:23 5: Parsed value: 0.93911445 for key: probability
2018.09.04 12:09:23 5: handleIntentGetNumeric called

kud

Kann es sein, dass mit dem Alsamixer keine Einstellung für die Aufnahme möglich sind.
Mit F6 sehe ich zwar die PS3Eye , beim auswählen steigt jedoch der Alsamixer aus.
Fehler beim Laden der Mixer-Regler: Das Argument ist ungültig

Thyraz

@Neuhier irgendwas läuft hier gewaltig schief. ;)

Bei deinem ersten Beispiel dachte ich noch du hängst absichtlich vorne ein "sage" an den Satz um GetNumeric statt Status zu triggern.
Jetzt ist der Satz aber ja wieder "sage temperatur thermometer aussen".
Sollte in dem Fall aber wahrscheinlich nichts ausmachen.

Dürfte aber einige Snips-Kommandos geben, die mit einem immer vorn angehängten "Sage" nicht funktionieren...

Dann sehen wir, dass diese Message an NLU übergeben wird.

2018.09.04 12:09:23 5: sending message to NLU: {"id":"{\u0022Channel\u0022:null,\u0022Device\u0022:null,\u0022Room\u0022:null,\u0022input\u0022:\u0022sage temperatur thermometer aussen\u0022,\u0022sessionId\u0022:null,\u0022siteId\u0022:null}","input":"sage temperatur thermometer aussen","sessionId":"fhem.textCommand"}


Ganz hinten sieht man den Text der von NLU geparsed werden soll: "sage temperatur thermometer aussen".
Das sollte eigentlich nicht so aussehen. Da NLU die Geräte- und Raumnamen (im Gegensatz zu ASR) nicht kennt, ersetze ich die vor dem abschicken durch Dummybezeichnungen.

Eigentlich müsste da "sage temperatur standardgerät standardraum" stehen.
Wenn die Ersetzung nicht klappt, scheint das Snips Modul keine Geräte und Räume mit den Bezeichnungen zu finden.
Sind die Devices in FHEM im Raum Snips?

Was kommt denn als Ausgabe wenn du das in der FHEM Kommandozeile eingibst:

{ join " ", SNIPS::allSnipsNames()) }

Das sollte alle snipsName Attribut-Werte zeigen, die in deinem FHEM im Raum Snips existieren.


Was mich dann aber noch stutziger macht: Obwohl die Ersetzung nicht klappt, und NLU nicht wissen dürfte, dass thermometer ein Gerät und aussen ein Raum ist, klappt dieser Teil:

{"rawValue":"thermometer","value":{"kind":"Custom","value":"thermometer"},"range":{"start":16,"end":27},"entity":"de.fhem.Device","slotName":"Device"}


Kann es sein, dass du die Snips FHEM App geforked hast und den Device Slot händisch mit Werten befüllst wie was am Anfang nötig war?
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

kud

{ join " ", SNIPS::allSnipsNames()) }

Da ist eine klammer zu viel. ;-)

{ join " ", SNIPS::allSnipsNames() }

Neuhier

JA, habe die "dupliziert" und bearbeitet.
Mit dem { join " ", SNIPS::allSnipsNames()) }
kommt nur
syntax error at (eval 2981) line 1, near ")) "

Mit
{ join " ", SNIPS::allSnipsNames() }
kommt ein leeres Fenster......  :-[

In den Geräten, die gesteuert/ überwacht werden sollen, ist jeweils attr SnipsRoom + Name eingetragen.
Wenn ich das oben aber richtig verstehe, muß explizit ein Raum Snips angelegt werden ?????
Und dort drin nochmal die Geräte?


Ich brech´z´samm....
Das war der ganze Fehler....
Müßte ( für Langsamdenker, wie mich ) in der Anleitung besser hervorgehoben werden.

kud

Jetzt lies doch bitte mal das GitHub des Entwicklers ganz ruhig durch.
Der Abschnitt beginnt mit "Geräte in FHEM für Snips sichtbar machen"
Ein paar Zeilen darunter "Damit Snips Geräte aus FHEM erkennt und auch ansprechen/abfragen kann, sind ein paar Voraussetzungen zu erfüllen:

Raum Snips
Snips sucht nur nach Geräten, die in FHEM im Raum Snips liegen.
Also bei allen Geräten die ihr ansprechen wollt diesen Raum hinzufügen."

Alles in der reihenfolge mal machen dann klappts auch ;-)

Neuhier

Wie war der Spruch:
kaum macht man es richtig, funktioniert es auch.

Ich habe mich irritieren lassen, weil etwas weiter unten, nochmals Raum und Snips auftauchen.

Zitat"Also bei allen Geräten die ihr ansprechen wollt diesen Raum hinzufügen."

Und das habe ich als erledigt angesehen, wenn ich dem Gerät das Attribut "snipsRoom: Gerätename" verpasse.
Eine reine Fehlimterpretation meinerseits also.

Thyraz

Zitat von: kud am 04 September 2018, 13:04:56
Kann es sein, dass mit dem Alsamixer keine Einstellung für die Aufnahme möglich sind.

Hast recht. Bin der Meinung, dass das unter Jessie am Anfang bei mir noch ging.
Jetzt hab ich den selben Fehler.  ???
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

enno

Zitat von: kud am 04 September 2018, 11:52:54
Das PS3 Micro , Entfernung ca. 3-4 Meter.
Habe das Ganze mal umgestellt. Zurück ins Büro. Da klappt es viel besser.
Mir kommt es vor als ob die PS3 mit "hallenden" oder großen Räumen Probleme hat.
ich habe das gleiche Teil im grossen Esszimmer (Hall, Akustik?). Wenn ich allein im Raum bin und kein Radio an ist, funktioniert die Erkennung recht gut. Sobald das Radio läuft oder eine Unterhaltung irgendwo im Raum stattfindet, dann ist die Erkennung recht schlecht. Da ich im Alsamixer auch nichts einstellen kann suche ich auch mit nach Optimierungsmöglichkeiten. Wenn ich eine Idee habe, bin ich wieder hier....
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

Neuhier

Irgendwo hatte mir Google mal was gezeigt, was für das PS3eye in asound.cfg rein soll.
Finde es nur auf die Schnelle nicht.

enno

Ich habe das wie in #3 hier ganz oben bei mir drin:

Zitat von: mark79 am 22 Juli 2018, 15:04:59
cat /etc/asound.conf
pcm.!default {
  type asym
  playback.pcm {
    type plug
    slave.pcm "hw:1,0"
  }
  capture.pcm {
    type plug
    slave.pcm "hw:0,0"
    slave.channels 4
    ttable {
    0.0 30.0
    1.1 30.0
  }
}
}

Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

Neuhier

  playback.pcm
    slave.pcm hw:1,0

  capture.pcm
    slave.pcm hw:0,0

Muß Playback nicht hw=0,0 und Capture hw=1,0 sein?

Thyraz

Mal zum Thema Hintergrundgeräusche und Musik:

Habt ihr denn Vergleichserfahrungen mit Alexa & Co?

Ich habe da mit Hintergrundmusik jedenfalls ebenfalls schlechte Erfahrungen gehabt (solang die Musik nicht über Alexa selbst ausgegeben wurde und sie sie somit gemuted hat).
Daher auch die Readings in Snips, auf die man Reagieren kann um ebenfalls die Musik stummzuschalten.

Ich nutze das dann meist so: "HEY SNIPS (was meist recht gut erkannt wird wenn man es lauter sagt) ... Warten auf Stummschaltung ... umschalten auf SWR3"

Ich habe das zu Alexa-Zeiten allerdings nicht so intensiv genutzt um da groß vergleichen zu können...
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

tomster

Zitat von: Thyraz am 04 September 2018, 14:00:45
Hast recht. Bin der Meinung, dass das unter Jessie am Anfang bei mir noch ging.
Jetzt hab ich den selben Fehler.  ???
Bei mir hat das auch noch nie funktioniert.
Ich bilde mir ein irgendwo gelesen zu haben, dass es beim PS3Eye unter Linux zu Erkennungsproblemen kommt. ALSA mag wohl das Device nicht so recht als Mikrophon erkennen, respektive fehlt ein entsprechender Support-Mixer für die 4 Mikrofon-Inputs. So wie ich es verstanden habe, kann man zwar nicht auf die einzelnen Mixer zugreifen, aber das "fehlerhafte" Default-Setup reicht aus um das Device für unsere Zwecke zu benutzen. Leider habe ich von ALSA ungefähr soviel Ahnung wie D. Trump von Frisuren.

--edit--
Hier steht noch was dazu:
http://blog.michaelamerz.com/wordpress/trying-respeaker-mic-array-v2-0/
Mit dieser Konfiguration kann ich zumindest den Mic-Gain des PS3-Eyes einstellen.

In dem Text steht auch, dass das PS3-Eye wohl nur "gerichtete" Ansagen erkennt. Man darf also nicht zuu weit weg oder seitlich des Aufnahmekegels stehen...
Für größere Räume sei ein Mikro wie z.B. das ReSpeaker besser geeignet, weil der eingebaute DSP das gesprochene Wort schlichtweg besser herausfiltert.