Sprachsteuerung mit PiAUISuite

Gesperrt
BaBa
General
General
Beiträge: 41
Registriert: Do 23. Jul 2015, 22:06

Sprachsteuerung mit PiAUISuite

Beitrag von BaBa » So 15. Mai 2016, 12:56

Sprachsteuerung mit PiAUISuite

Da es möglich ist, Funkdosen mit dem Pi zu schalten, wollen wir diese nun
bequem der Sprache ansprechen.

Folgende Hardware nutze ich:
USB Soundkarte ~ 5-7€
König Mikrofon ~7-8€

Den Pi auf den aktuellen Stand bringen:

Code: Alles auswählen

sudo apt-get update
sudo apt-get upgrade
=> Hier ist die Anleitung zur Einrichtung der Soundkarte

Benötigte Software installieren:

Code: Alles auswählen

sudo apt-get install alsa-base alsa-utils
sudo apt-get install libttspico-utils
sudo apt-get install nano
sudo apt-get install g++-4.8
sudo apt-get install git-core
Spoiler:
Falls noch nicht geschehen, gehen wir in das Home-Verzeichnis von Pi: Nun brauchen wir GitHub, um uns die aktuelle Version von PiAUISuite zu holen:

Code: Alles auswählen

git clone git://github.com/StevenHickson/PiAUISuite.git
Bevor wir PiAUISuite installieren, müssen wir Drei Dateien verändern:

Datei 1, tts, befindet sich in: PiAUISuite/VoiceCommand/
Wir bearbeiten diese mit dem Editor Nano:

Code: Alles auswählen

nano PiAUISuite/VoiceCommand/tts
Wir löschen jede Zeile mit: "Strg + K" und fügen dann folgenden Inhalt ein:

Code: Alles auswählen

#!/bin/bash
#since google ended TTS, this wrapper-script replaces tts with pico2wave.
#version 0.2 -now rudimentarily handles language -l param.

if [ $# -lt 1 ]  
then                  #no argument entered - i need something to say
   /usr/bin/pico2wave -w /tmp/tempsound.wav "I have nothing to say." 
   /usr/bin/aplay -q /tmp/tempsound.wav
   rm /tmp/tempsound.wav
   exit 0
fi

if [ "$1" = "-l" ]    #-l in event where user explicitly defines language.  
then                   # Note: always assumes $2 is 'en' or a valid language option. 
   lang=$2
   if [ $lang = "en" ]   #TODO: cant find the real source of en, but if 
   then                      # i see 'en' I'm hard coding  en-US.
      lang="en-US"       #US English, mofo, do you speak it  
   fi           
   shift 2  
   speech=$@  
   /usr/bin/pico2wave -l $lang -w /tmp/tempsound.wav "$speech" 
   /usr/bin/aplay -q /tmp/tempsound.wav
   rm /tmp/tempsound.wav
   exit 0
else                  #else lets go straight to speech-output
  speech=$@  
  /usr/bin/pico2wave -w /tmp/tempsound.wav "$speech"  
  /usr/bin/aplay -q /tmp/tempsound.wav
  rm /tmp/tempsound.wav
fi 
In Datei #2 ändern wir die letzte Zeile mit arecord -D folgendermaßen ab:

Code: Alles auswählen

nano ~/PiAUISuite/VoiceCommand/speechrecognition.sh
Diese muss dann folgendermaßen aussehen:

Code: Alles auswählen

arecord -D $hardware -f S16_LE -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/$
In Datei #3 muss eine C++ - Funktion angepasst werden:

Code: Alles auswählen

nano ~/PiAUISuite/VoiceCommand/voicecommand.cpp
Wir suchen in der Datei mit: "Strg + W" nach folgenden Absatz:
inline float GetVolume(string recordHW, string com_duration, bool nullout) {
Da ist eine Zeile:

Code: Alles auswählen

run += " -f cd -t wav "

die so verändert werden muss:

Code: Alles auswählen

run += " -f S16_LE "
Haben wir diese Drei Dateien verändert, dann führen wie folgenden Befehl aus:
==> Es kann bis zu 5 Minuten dauern, bis alles neu compiliert wurde. Nachdem compilieren, gehen wir in den Installationsordner:

Code: Alles auswählen

cd ~/PiAUISuite/Install/
Und Installieren PiAUISuite:

Code: Alles auswählen

sudo ./InstallAUISuite.sh
Jetzt erfolgt die Einrichtung von PiAUISuite bzw. Voicecommand
Testen der Hardware
Spoiler:
Um zu sehen, das "Text zu Sprache" und "Sprache zu Text" testen wir folgendes:

Code: Alles auswählen

tts Hello you
Es sollte nun zu hören sein, wie jemand uns mit "Hello you" voll-sabbelt.
Wenn nicht, check noch einmal die tts - Datei.

Probe auf Exempel, das Gegenteil:

Code: Alles auswählen

cd ~/PiAUISuite/VoiceCommand
und hier geben wir folgenden Befehl und sprechen DANACH etwas in das Mikrofon (z.B.: hello)

Code: Alles auswählen

./speech-recog.sh
Das Ergebnis sollte so aussehen:
Bild
Die Einrichtung von Voicecommand
Spoiler:
Die erste Frage die kommt, ist die, ob weitere Abhängigkeiten installiert werden soll. Diese Frage beantworten wir natürlich ja => [Y].

Die nächsten Fragen sind optional und können individuell beantworten werden. Für meinen Test beantworte ich alle Fragen, bis zur letzten, da wo Voicecommand eingerichtet wird, mit Nein => [n].

Nachdem wir Voicecommand mit Ja beantwortet haben, fragt er uns, ob wir Voicecommander gleich einstellen wollen => Selbstverständlich: [Y].

Hier die Fragen und wie ich sie beantwortet habe:

Code: Alles auswählen

Do you want to permanently set the continuous flag so that it always runs continuously?
=> Antwort Ja [y]

Code: Alles auswählen

Do you want to permanently set the verify flag so that it always verifies the keyword?
=> Antwort ja [y]

Code: Alles auswählen

Do you want to permanently set the ignore flag so that it never looks for answers outside the config file?
=> Antwort Nein [n]

Code: Alles auswählen

Do you want to permanently set the quiet flag so that it never uses audio out to speak?
=> Antwort Nein [n]

Code: Alles auswählen

Do you want to permanently change the default duration of the speech recognition (3 seconds)?
=> Antwort Nein [n] // kann man individuell einstellen

Code: Alles auswählen

Do you want to permanently change the default command duration of the speech recognition (2 seconds)?
Antwort Nein [n] // kann man individuell einstellen

Code: Alles auswählen

Do you want to set up and check the text to speech options?
Antwort Ja [y]
Nun sollte eigentlich etwas zu hören sein; wenn nicht gleich abbrechen!
=> Ist die Soundkarte richtig eingerichtet? Soundkarte einstellen

Hört Ihr etwas, ist die halbe Miete im Kasten! Quatscht die gute Frau am Anfang etwas von "Filler", "Fill", etc. können wir das in der Config ausschalten.
Erst einmal [y] eingeben, das wir etwas hören.
Haben wir so etwas wie "Fill" gehört, beantworten wir die nächste Frage mit Ja [y].

Ich mag die Sprachausgabe: "Yes Sir?" und deswegen beantwortet ich die nächste Frage mit Nein [n]

BaBa
General
General
Beiträge: 41
Registriert: Do 23. Jul 2015, 22:06

Einrichtung der USB-Soundkarte an dem Pi

Beitrag von BaBa » So 15. Mai 2016, 13:36

Einrichtung der USB-Soundkarte an dem Pi

Als erstes laden wir den Sound-Treiber:

Code: Alles auswählen

sudo modprobe snd_bcm2835
Jetzt erstellen/verändern wir die asound.conf von Asla:

Code: Alles auswählen

sudo nano /etc/asound.conf

Code: Alles auswählen

pcm.!default {
        type plug
        slave {
                pcm "hw:1,0"
              }
        }

ctl.!default {
        type hw
        card 1
        }
Der letzte Streich sagt dem Pi, dass er die USB-Soundkarte laden soll:

Code: Alles auswählen

sudo nano /lib/modprobe.d/aliases.conf
Hier kommentieren wir folgende Zeile mit einer Raute (#) aus:

Code: Alles auswählen

#options snd-usb-audio index=-2
Nun noch ein Neustart, und die USB-Soundkarte ist eingerichtet:

Code: Alles auswählen

sudo reboot

Gesperrt