Snips - Sprachsteuerung

Im Januar 2020 an Sonos verkauft und damit nicht mehr nutzbar

Die Konsole, in der unter anderem die eingegebenen Sätze zur Spracherkennung umgewandelt wurden, wurde zum 31.01.2020 abgeschaltet. Danach kann man nichts mehr entwickeln oder anpassen.

Meine Erfahrungen bis Februar 2020

Zufällig bin ich über Snips gestolpert, also mal ausprobieren.

Aktuell läuft es unter Raspbian, mit einer PlayStation Eye als Mikrofon.Ich nutze nicht die aktuelle Version von SNIPS, sondern 64.0. Warum? Das ist auf dem Rest der Seite zu finden. Meine Erfahrungen mit dem selber weiterentwickeln von snips-Modulen, auch von anderen ist auf einer eigenen Seite.

Erst meine Erfahrung mit Kali, drunter meine Erfahrung mit Buster und zum Schluß mit Raspbian-Lite

Irgendwann kam beim sudo apt-get update die Meldung, dass irgendwelche public keys nicht mehr gültig sind.

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://raspbian.snips.ai/stretch stable InRelease: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 531DD1A7B702B14D W: Fehlschlag beim Holen von https://raspbian.snips.ai/stretch/dists/stable/InRelease Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 531DD1A7B702B14D

Dann musste man 'sudo apt-key adv –fetch-keys https://raspbian.snips.ai/531DD1A7B702B14D.pub' machen und alles war wieder gut.

Hier noch meine Versuche, die Erkennung zu verbessern.


Kali-Linux hat nicht wirklich sound-Ausgabe. Also gesucht und

apt-get install libasound2 alsa-utils alsa-oss
alsamixer

Danach hat die Anleitung aus https://onesmarthome.de/lokale-sprachsteuerung-mit-openhab-2-und-snips-ai/ soweit funktioniert. Hier noch der Code dazu.Wie hier unschwer zu erkennen ist, braucht man nodejs was mich an anderer stelle fast zur Verzweiflung getrieben hat. Aber es geht ob die Vorarbeiten es gebracht haben, kann ich nicht sagen.

apt-get update
apt-get upgrade
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
apt-get install -y nodejs
npm install -g snips-sam
sam connect kali.fritz.box
sam status
sam init
sam setup audio
sam test microphone
sam test speaker
sam sound-feedback on (geht nicht - error: bash: mosquitto_pub command not found, also erst mal ohne)

und schon muss ich wieder aufgeben (in Kali). sam status ergibt 'Platform nicht installiert' und nach sam init kommt zwar kein Fehler, aber die Plattform ist immer noch nicht installiert und sam install assistant bringt irgendwann 'snips-skillserver.service not loaded'


Buster installieren, dann code (s.o.) unter 'sudo su'

hier ging der sam connect kali.fritz.box nicht, musste wie in der Anleitung sam connect raspberrypi.local nutzen

oh mann, ich hab mal wieder alles mögliche installiert, ohne reboot und erst ging es nicht. also fast alles auf der Seite:
https://ourcodeworld.com/articles/read/406/how-to-enable-the-sound-on-kali-linux (ist zwar für Kali, aber nachdem es hier nicht ging…) und https://unix.stackexchange.com/questions/257322/no-audio-on-kali-linux

— wenn das geht, sind wir schon weiter. aber nicht viel. aufnehmen geht, abspielen geht, aber sam erkennt das Mikrofon immer noch nicht: ✖ Error fetching audio capture device: No capture devices found. Check if your mic is correctly plugged.

$ sudo nano /etc/asound.conf
pcm.!default {
  type asym
  playback.pcm {
    type plug
    slave.pcm "hw:0,0"
  }
  capture.pcm {
    type plug
    slave.pcm "hw:1,0"
  }
}

arecord -f cd out.wav
aplay out.wav

https://github.com/snipsco/snips-record-personal-hotword

Es geht vorwärts. Auf der Webseite von snips steht, was man machen muss, damit es unter buster läuft. Auch im Wiki.

Hier wird genauestens erklärt, wie man das WakeWord 'berechnet'. Schön wäre es, wenn man mehr als 3 mal eingeben könnte… https://mc.ai/machine-learning-on-voice-a-gentle-introduction-with-snips-personal-wake-word-detector/

Erste Gehversuche mit eigenem python script. gut: https://medium.com/snips-ai/voice-controlled-lights-with-a-raspberry-pi-and-snips-822e53d7ede6

hier noch infos, die man in seinem python script ausgeben kann: https://github.com/tschmidty69/homeassistant-config/blob/master/snips/snips_listener.py

snips-watch -vvv

sudo ln -s /etc/systemd/system/multi-user.target.wants/smart-lights.service /etc/systemd/system/smart-lights.service

Nachdem der eigene TTS nicht funktioniert hat, probiere ich es jetzt nach Anleitung. Das Problem war, dass die Soundausgabe nach 0.1 Sekunden aufgehört hat ohne Fehler. Sonst ging alles!


Raspbian-Lite herunterladen und installieren.

Installiert nach Anleitung. Hatte vergessen, in der snips-web Konsole wieder auf 'hey snips' umzustellen → es ging gar nicht. Nachdem ich umgestellt und wieder deployed hatte (url auf der webconsole), kommt immer mal wieder der Fehler, dass der audio-server nichts spielen konnte. Lösung: zurück auf eine ältere version. Aktuell hatte ich 0.64.0. mit 0.63.3 geht es. Siehe https://forum.snips.ai/t/audio-server-reported-an-error-on-site-default-an-error-happened-while-trying-to-play-some-audio/3741/33

sudo apt install snips-audio-server=0.63.3
sudo apt install snips-tts=0.63.3

Weitere Hinweise gab es hier: https://github.com/snipsco/snips-issues/issues/203#issuecomment-543216242 \ hat mir aber nicht weiter geholfen. Vielleicht geht es jetzt auch unter buster?

es wird portaudio erwähnt. was ist das?
Also das nächste installieren siehe hier: https://app.assembla.com/wiki/show/portaudio/Platforms_RaspberryPi
Geht schon gut los, man soll das nightly build nehmen: http://www.portaudio.com/archives/pa_snapshot.tgz Nach dem kompilieren und 'sudo make install' und dem sinustest, der ganz schön kratzt, geht der Aufruf in snips erst mal nicht.
Port audio aufnähme und abspielen kann man hiermit testen: /home/pi/portaudio/bin/paex_record
Dann hab ich wieder auf 0.64.0 upgedated. dann ging ein mal nicht und danach ging mit portaudio… Weitere mögliche workarounds stehen hier: https://github.com/snipsco/snips-issues/issues/203
Mist, irgendein update, wahrscheinlich sam sound setup hat mir die einstellungen im /etc/asound.conf weggeschmissen. Man kann sie auch i .asoundrc schreiben, ich weiss aber nicht, ob man das unter pi oder unter _snips machen muss…

Wakeword, Skript für Aktionen: https://medium.com/snips-ai/voice-controlled-lights-with-a-raspberry-pi-and-snips-822e53d7ede6

Custom TTS: Start mit https://github.com/tschmidty69/snips und anpassen von dem Jarvis https://raw.githubusercontent.com/tschmidty69/homeassistant-config/master/snips/jarvis_says.sh

Zum testen:

sudo su -s /bin/bash - _snips
/home/pi/lights_commands/osx_say.sh -w /tmp/test.wav -l en "OK, here I am2"

sudo apt-get -y install mosquitto-clients
mosquitto_pub -t hermes/tts/say -m '{"siteId":"default","text":"für wie lange?"}'

Damit das mit den Leer- und Sonderzeichen geht, muss ich curl einen encoded string mitgeben. Das war statt 'curl -s http://192.168.178.34:4000/index.js?v=$voice\&q=$text > „$cachefile“'

curl -G –data-urlencode „v=Anna“ –data-urlencode „q=Dies ist ein Test“ curl -s http://192.168.178.34:4000/index.js > „/tmp/xxx“

Mikrofon ging nicht - Lösung war, den aktiven USB-Hub stromlos zu machen *seufz*

Erste api war goye@imailweb.top und 5aaf68caff0975f05825b40c76bf0416 (aber da komme ich nicht mehr dran. Für den Wetterdienst habe ich nomadeye@click2mail.net (temp-mail.org) genutzt 3261b8e136932e626b7282d1fd6998d4

Das Wetter-Modul gibt immer nur das heutige wetter aus! Nutzt python3 in virtual environment. Im Ordner: /var/lib/snips/skills/Snips-Wetter/venv/bin must ich sudo ./pip3.5 install python-dateutil machen, da ich nicht anders das datum von iso in date konvertieren konnte. ein paar Zeilen aus parse_open_weather_map_forecast_response raus und runter vor den aufruf Zusätzlich muss man bei python echt auf 4 spaces versus tab achten!!!

Habe ein weiteres ausprobiert, das auch nicht ging. da war der 'zip code' falsch übergeben und Hermes Methoden in anderen Importpfaden. Habe mal GitHub ausprobiert und die zwei Änderungen dort eingetragen. Dort kommen bessere Textausgaben, auch das Wetter von Morgen. Allerdings das gleiche Problem mit 'ich bin wieder da', was als 'ich bin' verstanden wird und man „Nach welchem Gegenstand möchten Sie fragen?“ gefragt wird. Eine gute Antwort, damit es weiter geht ist „Regenschirm“ *seufz*.

Entweder ich muss es selber Programmieren, Forken oder es irgendwie hinbekommen, dass mein skill zuerst aufgerufen wird. 'Ich bin wieder da' sollte bei meinem Intent auftauchen!

Es gab Probleme mit osax, um iTunes stumm zu schalten und wieder zu anmuten. Wenn man es synchron gemacht hat, dauerte es für snips zu lange. Wenn man es asynchron macht, verschluckt er sich und es bleibt manchmal gemutet. Jetzt habe ich am mac in die Fehlerbehandlung vom aussprechen Befehl das anmuten eingebaut. dann geht es.

Wieder ist es passiert, dass der TTS zu früh abgebrochen ist. war wieder der apt-get upgrade auf eine neuere Version als die, die funktioniert *seufz* Siehe oben.

im Dezember 2019

Habe jetzt Wetter und Licht geklont und Pflanzen, Staubsauger und Rollo Steuerung hinzugefügt. Wetter habe ich von Github abgekoppelt und versuche jetzt, vor 31.01.2020 alles stabil zu bekommen, da man dann nicht mehr weiter entwickeln kann. Natürlich kann man die Actions noch anpassen, aber die Texte der Sprachbefehle sind dann nicht mehr änderbar.

Ob man später noch an die Doku kommt ist ungewiss. Die beiden wichtigsten Ordner sind

/usr/share/snips/
/var/lib/snips/skills/

Aktueller Stand (don't change a running system) mittels 'sam status':

Connected to device pi3

OS version ................... Raspbian GNU/Linux 9 (stretch)
Installed assistant .......... varlet
Language ..................... de
Hotword ...................... hey_snips
ASR engine ................... snips
Status ....................... Live

Service status:

snips-asr .................... 0.64.0 (running)
snips-audio-server ........... 0.63.3 (running)
snips-dialogue ............... 0.64.0 (running)
snips-hotword ................ 0.64.0 (running)
snips-nlu .................... 0.64.0 (running)
snips-skill-server ........... 0.64.0 (running)
snips-tts .................... 0.63.3 (running)

sudo apt install snips-audio-server=0.63.3
sudo apt install snips-tts=0.63.3

Damit die beiden Pakete nicht aktualisiert werden, habe ich sie auf 'hold' gesetzt:

Hold a package:
sudo apt-mark hold <package-name>
Remove the hold:
sudo apt-mark unhold <package-name>
Show all packages on hold:
sudo apt-mark showhold
sudo apt-mark hold snips-asr
sudo apt-mark hold snips-audio-server
sudo apt-mark hold snips-dialogue
sudo apt-mark hold snips-hotword
sudo apt-mark hold snips-injection
sudo apt-mark hold snips-kaldi-atlas
sudo apt-mark hold snips-nlu
sudo apt-mark hold snips-platform-common
sudo apt-mark hold snips-platform-voice
sudo apt-mark hold snips-skill-server
sudo apt-mark hold snips-template
sudo apt-mark hold snips-tts
sudo apt-mark hold snips-watch
sudo apt-mark hold libatlas3-base

Zum Debugger;

sam status
sam watch

intent_json = json.loads(msg.payload)
print(intent_json)

Stand Dezember 2019 … geht auch noch 2021 :)