Amazon Echo

Saimme vihdoin Raspberry Pi:n käyttöön ja asensimme siihen Raspbian -käyttöjärjestelmän. Päätimme lähteä kokeilemaan uusia tuulia ja saimme ideaksi kokeilla miten saada Amazon Echo omaan käyttöön, ja löysimme nämä ohjeet joiden perusteella Amazon Echon käyttöönotto onnistui suhteellisen helposti.

Amazon Developer Account
Ennen kuin Amazon Echoa pääse käyttämään, pitää tehdä Amazon Developer account. Tunnuksen tekemisen jälkeen piti valita mitä laitetta käyttää (meidän tapauksessa Raspberry Pi), ja tämän jälkeen luoda profiili ja nimetä se. Järjestelmä generoi syöttämien tietojen pohjalta Product ID:n, Client ID:n ja Client Secretin, jotka on tärkeää ottaa muistiin koska niitä tarvitaan myöhemmin. Tämän jälkeen teimme ohjeiden kohdat 10-13.

Alexan asentaminen
Alexan asentamiseen tarvitaan graafinen käyttöliittymä, joten on tärkeää että Raspberry Pi on kiinni näytössä. Tämän jälkeen ajoimme seuraavat komennot:

cd Desktop

jonka jälkeen kloonataan githubista seuraava repository komennolla

git clone https://github.com/alexa/alexa-avs-sample-app.git

Kloonauksen valmistuttua siirrytään kansioon:

cd ~/Desktop/alexa-avs-sample-app

ja ajetaan siellä komento

nano automated_install.sh

Tekstitiedostoon pitää täyttää aiemmin saadut Product ID, Client ID ja Client Secret. Tietojen täyttämisen jälkeen tallensimme tiedoston.

Tämän jälkeen komentorivillä ajetaan komento

cd ~/Desktop/alexa-avs-sample-app

ja painetaan enteriä. Sen jälkeen seuraa komento

. automated_install.sh

Kaikkiin kysymyksiin valittiin “Y”, jonka jälkeen odotimme että asennus valmistuu.

Alexa Web Serverin päälle laittaminen
Tämän jälkeen ajoimme kolmet eri komennot kolmessa eri terminaalissa. Tärkeää on muistaa ettei terminaaleja saa sulkea komentojen ajamisen jälkeen.

Ensimmäisenä ajoimme komennot:

cd ~/Desktop/alexa-avs-sample-app/samples

ja

cd companionService && npm start

Tämä aloittaa companion servicen ja avaa portin saadakseen yhteyden Amazoniin. Jätimme terminaalin auki kuten ohjeissa sanotaan.

Avasimme toisen terminaalin ja ajoimme komennot:

cd ~/Desktop/alexa-avs-sample-app/samples

ja

cd javaclient && mvn exec:exec

Tämän jälkeen avautui ikkuna joka pyysi varmentamaan käyttämämme laitteen. Valitsimme “Yes”. Tämän jälkeen avautui uusi ikkuna selaimeen, ja pop-up-ikkuna Java-ohjelmassa joka pyytää valitsemaan “ok”. Tätä ei saanut klikata heti, vaan piti ensiksi kirjautua selaimella Amazon tunnukselle, ja uudelleen todentaa käyttämämme laite. Tämän jälkeen tulee ilmoitus “device tokens ready”. Tämän jälkeen voidaan klikata “ok”:ta Javan pop-up ikkunassa. Tämän ansiosta Raspberry Pi:lla on tarpeelliset valtuutukset kommunikoida Amazonin Serverin kanssa.

Tämän jälkeen avasimme kolmannen terminaalin. Ajoimme komennot:

cd ~/Desktop/alexa-avs-sample-app/samples

ja

cd wakeWordAgent/src && ./wakeWordAgent -e kitt_ai

Nämä komennot mahdollistavat sen, että voimme sanoa “Alexa”, ja Amazon Echo menee päälle ja kuuntelee puhetta.

Testaus
Testasimme Echoa ja se toimii. Aloitimme helpoilla kysymyksillä ja lauseilla kuten “What’s the weather like in Helsinki?” ja “Tell a joke”. Echo reagoi hyvin Alexa komentoon, ja myös kaikkiin kysymyksiin. Kokeilimme myös miten Amazon Echo kertoisi ajankohtaiset uutiset. Sanoimme “Can you tell the news?”, jonka jälkeen Echo soitti uutistoimisto Reutersin nauhan ajankohtaisimmista uutisista.

Ongelmat & Yhteenveto
Muutamia pieniä ongelmia tuli vastaan, kuten se että laitteen sijainti on jostain syystä Seattlessa, joten jos kysyy säätietoja tai kellonaikaa ilman mainintaa sijainnista, kertoo Alexa Seattlen säätiedot/kellon ajan. Emme vielä ehtineet selvittää mistä kyseinen ongelma johtuu, ja miten sen saisi korjattua.
Toinen ongelma liittyi siihen, kun pyysimme Alexaa kertomaan uutiset. Kun Reutersin nauha ajankohtaisista uutisista pyörii, emme saaneet pysäytettyä uutisten kertomista millään äänikomennolla, vaan uutistenluku piti keskeyttää terminaalista käsin.

Yleisesti ottaen Amazon Echo toimii erittäin hyvin, ja ymmärtää hyvin paljon erilaisia komentoja ja kysymyksiä. Asentaminen oli myös erittäin mutkatonta ja sujui ilman ongelmia.

Advertisements

Sphinx Testaus ja konfigurointi

Olemme nyt testanneet eri speech-to-text -ohjelmia kuten julius. Juliuksen konfigurointi osoittautui hyvin hankalaksi, minkä lisäksi juliuksen konfigurointiin ja käyttöön on hyvin vähän ohjeita löydettävissä netistä. Päätimme testata vielä Sphinx-ratkaisua vielä huolimatta siitä, että kuuleman mukaan ohjelma on vaikea. Tästä huolimatta Sphinxiin on kattavimmat ohjeet ja paljon saatavilla olevaa julkista tietoa.

Lähdimme konfiguroimaan laitetta näiden ohjeiden mukaan. Aloitamme mikrofonin konfiguroimisesta. Ohjeiden mukaan aluksi komennolla

cat /proc/asound/cards

joka listaa käytössä olevat äänikortit. Löysimme listalta USB-mikrofonin jota käytämme. Seuraavaksi muokkaamme ohjeiden mukaan tiedostoa

sudo nano /etc/modprobe.d/alsa-base.conf

ja muutamme rivin options snd-usb-audio index=-2 riviin options snd-usb-audio index=0. Uudelleenkäynnistyksen jälkeen USB-mikin pitäisi olla siirtynyt 0-sijalle /proc/asound/cards -tiedostossa, mutta tämä ei tapahtunut. Yritimme ratkaista ongelmaa moninaisista eri ohjeista, mutta ratkaisua ei löytynyt.

Jatkamme alkuperäisten ohjeiden mukaisesti asentamalla vaaditut työkalut

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install bison
sudo apt-get install libasound2-dev
sudo apt-get install swig
sudo apt-get install python-dev
sudo apt-get install mplayer

ja käynnistämällä koneen uudelleen.

Seuraavaksi konfiguroimme tiedostoa

sudo nano /etc/asound.conf

esimerkkisisällöllä

pcm.usb
{
    type hw
    card AK5370
}
pcm.internal
{
    type hw
    card ALSA
}
pcm.!default
{
    type asym
    playback.pcm
    {
        type plug
        slave.pcm "internal"
    }
    capture.pcm
    {
        type plug
        slave.pcm "usb"
    }
}
ctl.!default
{
    type asym
    playback.pcm
    {
        type plug
        slave.pcm "internal"
    }
    capture.pcm
    {
        type plug
        slave.pcm "usb"
    }

Tätä tiedostoa piti kuitenkin muokata jotta se menisi yhteen oman tietokonekonfiguraation kanssa, joten jouduimme perehtymään ALSA (Advanced Linux Sound Architecture):n toimintalogiikkaan. Perehdyttyämme ALSA:an lähdimme muokkaamaan tiedostoa niin oikein kuin pystyimme, ja jatkoimme ohjeita. Seuraavaksi ohjeissa on mikrofonin testaus. Komennolla

amixer -c 0 sget 'Mic',0

ja komentorivin olisi pitänyt printata jotain tällaista.

Simple mixer control 'PCM',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
  Playback channels: Mono
  Limits: Playback -10239 - 400
  Mono: Playback -685 [90%] [-6.85dB] [on]

Raportin kirjottamishetkellä en pysty enään kommentoiman mitä komentorivi printtasi, mutta mikrofonin toimivuudesta ei siinä mainittu. Pitkän ongelmanratkaisusession jälkeen emme vieläkään saatu oikeaa vastausta komennolle.

Annoimme tämän olla, ja selvitimme toimiiko mikkimme ylipäätään. Syötimme komenno

alsamixer

painamalla F6 valitsemme mikrofonin, ja painamalla F4 vaihamme capture-osioon. Mikrofoni on täysin kunnossa tältä osin.

Screenshot_2017-10-16_16-58-12

Testaamme USB-mikrofonin toimivuutta vielä äänittämättä pienen ääninäytteen komennolla

arecord -D plughw:0,0 -f cd ./test.wav

Screenshot_2017-10-16_17-35-25

ja toistamme sen komennolla

aplay ./test.wav

Äänitetty ääni kuuluu eli mikrofoni toimii.

Jatkamme ohjeita alaotsikosta “Building Sphinxbase”. Seuraavan osan jätän kopioimatta tänne, koska se on yhtä selkeästi luettavissa alkuperäisistä ohjeista. Suoritettua Sphinxbasen ja PocketSphinxin asennukset, saimme komentoriviin kuittauksen

Screenshot_2017-10-16_17-42-20

eli kaikki asennuksessa ok.

Seuraavaksi luomme language modelin. Teemme tekstitiedoston jossa on kolme käskyä:

What is the weather in Helsinki
What is the time
Shutdown

tämä tiedosto uploadaan sivulle http://www.speech.cs.cmu.edu/tools/lmtool-new.html, josta sen jälkeen ladataan kaksi tiedostoa, Pronounciation Dictionary ja Language Model, (5817.dic ja 5817.lm) Nämä ovat Sphinxille ääntämiseen liittyviä tiedostoja. Minun kohdalla tiedostot olivat numeroitu numerolla 5817. Siirsin tiedostot kansioon

/usr/local/share/pocketsphinx/model/en-us/en-us

jonka jälkeen seuraavan kohtana on puheentunnistuksen testaus. Ensimmäiseksi luomme kaksi ympäristömuuttujaa:

export LD_LIBRARY_PATH=/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

ja ajamme sen komennolla

pocketsphinx_continuous -hmm
/usr/local/share/pocketsphinx/model/en-us/en-us -lm 5817.lm -dict 5817.dic -samprate 16000/8000/48000 -inmic yes

ja vastaus näyttää tältä:

eror

kaikki muu näytti sujuvan oikein, mutta ohjelma ei kykene lukemaan tiedostoa/tiedostoja jotka latasimme äsken. Etsimme verkosta ratkaisua, ja yritämme kopioida tiedostoja muualle, mistä ohjelma saattaisi niitä etsiä. Eri kokeiluiden jälkeen emme vieläkään saanut ohjelmaa lukemaan näitä kahta tiedostoa.

Cloud speech client library alustus

Aloitimme cloud speech clientin alustuksen lataamalla gitin osoitteesta

Tämä

git clone https://github.com/GoogleCloudPlatform/python-docs-samples

Komennolla latasimme kansion mistä löysimme ohjeita joilla jatkaa asennusta.

Komennolla

cd speech/cloud-client

löydämme kotikansiosta kyseisen kansion. Avasimme ja luimme tästä kansiosta löytyvän README.rst tiedoston ja jatkoimme sen ohjeiden mukaisesti

Asensimme sitten pipin ja virtuaklenv:in. Latasimme Pip:in täältä.

jonka jälkeen ajoimme komennon

python get-pip.py

Asensimme Virtualenv, joka mahdollistaa eristettyjen ympäristöjen luomisen “virtual environment”

sudo pip install virtualenv

home/python-docs-sample/speech/cloud-clients polussa voimme käynnistää virtuaali ympäristö tilan komennolla

source env/bin/activate

jolloin aktivoimme virtualisointi tilan. Asensimme dependency tiedostot komennolla

pip install -r requirements.txt

jonka jälkeen ajoimme quicktartin komennolla

python quickstart.py

Tämän jälkeen jouduimme ongelmaan, sillä ympäristömuuttuja puuttuu, vaikka olemmekin sen jo aikaisemmin määritelleet.

Screenshot_2017-10-11_13-25-12

Saimme tämän korjattua muokkaamalla tiedostoa polussa /home/user tiedostoa .bashrc

nano .bashrc

Muokkasimme tästä tiedostoa lisäämällä tiedostoon rivin joka määrittää polun ympäristömuuttujalle joka tekee siitä pysyvän.

export GOOGLE_APPLICATION_CREDENTIALS=/home/user/google-cloud-sdk/(haluttu JSON tiedosto)

Screenshot_2017-10-11_13-53-58

Sitten ajoimme python tiedoston komennolla

python quickstart.py

josta saimme tuloksen ja totesimme, että ohjelma toimii tähän asti.

jee

Testasimme tämän jälkeen ohjelmalla tunnistaa meidän omaa ääntämme, mutta se ei onnistunut, sillä kyseiset äänitiedostot olivat väärässä muodossa ohjelmalle. Jatkamme tästä seuraavassa raportissa. tästä jatkamme

Juliuksen asentaminen

Juliuksen asentaminen ei aluksi onnistunut, koska kunnollisten ohjeiden löytäminen oli erittäin vaikeaa. Parien huonojen ohjeiden jälkeen löytyi vihdoinkin toimivat ohjeet, joiden jälkeen asennus sujui helposti.

Aluksi latasimme Juliuksesta uusimman version Juliuksen kotisivuilta, eli julius-4.3.1.tar.gz. Tämän jälkeen noudatimme näitä ohjeita ja asennus onnistui ensimmäisellä yrityksellä.

Asennuksen jälkeen teimme Juliukselle peruskonfiguraation näiden ohjeiden avulla. Peruskonfiguraatio mahdollistaa sen, että ohjelmaa voi edes käyttää.

cat
Tässä kuvassa näkyy esimerkkitiedoston sisältö, ennen konfigurointia
test
Tämän komennon avulla ohjelma odottaa puhetta

Seuraavaksi tarkoituksena on konfiguroida Juliusta, niin että se ymmärtäisi lisää sanoja ja komentoja.

Espeak -ohjelman testaus

Espeakin configurointi ja komentoja

Tavoitteenamme oli testata Googlenkin käyttämää text-to-speech puhesyntentisaattoria mahdollisena vaihtoehtona festival puhesyntentisaattorille.

Espeakin asennuskomento Linuxilla

sudo apt-get install espeak

Espeakin käyttö on erittäin helppoa asennuksen jälkeen. Komentoriville kirjoittamalla vain ohjelman nimen “espeak” aukeaa ohjelma käytettäväksi. Kirjoittamalla tai liitämällä tekstiä ohjelma toistaa joko tietyn sanan tai kokonaisia lauseita.

Komentorivillä on mahdollista saada espeak toistamaan vain tietyn sanan kirjoittamalla komentoriville

espeak moi

jolloinka ohjelma muuntaa kirjoitetun sanan “moi” puheeksi.

Komennolla

espeak -x

ohjelma näyttää jokaisen toistetun komennon lopussa miten ohjelma ääntää annetun käskyn.

Muita tärkeitä komentoja

muita hyödyllisiä komentoja espeakin käyttöön. Esimerkit ovat sulkujen sisällä. Kirjoita komment ilman sulkuviivoja.

espeak -a (arvo 0-200)

muuttaa toistetun äänen volumea

espeak -p (arvo 0-99 default 50)

muuttaa toistetun äänen korkeutta matala-korkea

espeak -s (suositellut arvot 80-500 default 175)

muuttaa puheäänen nopeutta

espeak -g (default speed 170 wpm)

muuttaa tauotuksia puheessa sanojen välillä.

Puhekielen vaihtaminen englannista suomeksi

Espeak ohjelma käyttää oletuksena US english ääntämistä. Jotta puheen saisi vaihdettua suomenkielelle tulee Espeakin kansiosta muokata tekstitiedostoa joka määrittää oletuskielen ohjelmalle.

Suunnistetaan kansioon johon Espeak:in äänitiedostot on tallennettu.

cd /usr/lib/x86_64-linux-gnu/espeak-data/voices

Kyseisestä polusta löydämme kansiot johon on tallennettu alueitta saatavilla olevat kielivaihtoehdot. Suomenkieli löytyy kansiosta “europe” ja tekstitiedosto “fi” Muokkaamme kuitenkin  cd /usr/lib/x86_64-linux-gnu/espeak-data/voices polusta löytyvää “default” tiedostoa.

sudoedit default

Tämän jälkeen jotta ohjelma lausuisi suomea tai muuta vastaavaa kieltä tulee language kohdan perään kirjoittaa haluaman kielen lyhenne, tässsä tapauksessa kun haluamme ohjelman puhuvan suomea kirjoitamme language kohdan perään “fi”

espeaksuomitiedosto

tekstitiedosto tallennetaan ja sitten testaamme muutosta itse ohjelmassa.

cmdboardespeak

Lyhyen testin jälkeen voimme todeta, että muutoksen jälkeen ohjelma tosiaan lausui annetut testi sanaparret suomeksi. Näin meillä on nyt kaksi text-to-speech -ohjelmaa valmiina testattavaksi ratkaisuumme.

Cloud Speech API:n asennus 29.9.2017

Tänään meidän piti jatkaa siitä mihin viimeksi jäimme, eli API:n asennukseen. Saimme ratkaistua ongelman. Ongelma oli ympäristömuuttujan puuttuminen. Määritimme sen, ja saimme printattua avaimen. Peitimme avaimen valkoisella laatikolla.

Screenshot_2017-09-29_13-31-40

 

Seuraavaksi näiden ohjeiden mukaisesti kohtaan 4, eli curl-pyyntö. Pyyntö onnistui alemman kuvan mukaisesti, ja saimme vastauksen.

Screenshot_2017-09-29_14-00-13

Seuraavaksi päätimme kieleksi Pythonin, ja jatkamme näiden ohjeiden mukaisesti ensi viikosta lähtien.

 

Tilanneraportti 27.9.2017

Jatkoimme tänään Google Cloud SDK:n asentamista, joka ei viime viikolla onnistunut. Etsimme uudet ohjeet, joiden mukaan asennus onnistui. Tämän jälkeen rekisteröimme tähän projektiin luodun Google-tilin Google Cloud SDK:hon, jotta pystymme asentamaan Google Cloud Speech API:n käyttöön.

22070329_1647507928601818_910224527_o

Speechin käyttöönotto

Alotamme Speechin käyttöönoton näillä ohjeilla. Aluksi ryhdyimme määrittämään laskutustiedot. Seuraavaksi loimme Googlen Cloudiin projektin, jonka jälkeen Google tarjosi projektiin liittyvän private keyn, joka oli json -muodossa. Teimme ohjeiden mukaan tiedoston nimeltä sync-request.json, jonka sisältö on tämä:

{
 "config": {
 "encoding":"FLAC",
 "sampleRateHertz": 16000,
 "languageCode": "en-US",
 "enableWordTimeOffsets": false
 },
 "audio": {
 "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
 }
}

Tämä antaa Google Speechille alkeellisia määrityksiä.

Seuraavaksi liitimme private keyn Google-tiliin.

gcloud auth activate-service-account --key-file=service-account-key-file

Tämän jälkeen syötämme komennon

gcloud auth application-default print-access-token

Mutta saimme errorin:

22091414_1647549755264302_668753072_n

Yritimme löytää ratkaisun ylläolevan vastauksen mukaan täältä. Emme pikaisella tarkkailulla sitä vielä löytänyt, ja jatkamme tästä perjantaina.