Johdanto:
Tämän projektin tarkoituksena olisi asentaa Amazonin Alexa Voice Service (AVS) Raspberry Pi 3 Model B tietokoneelle.
Alexa Voice Service on puheohjaukseen perustuva pilvipalvelu, jota voi pyörittää monella eri laitteella. Se on tekoäly, joka prosessoi sille puheella antamani käskyt Amazonin palvelimella ja lähettää sitten vastauksen takaisin, jos se sellaisen löytää. Voin esimerkiksi kysyä siltä joitain matemaattisia ongelmia, pyytää tietoa jostain aiheesta tai vaikkapa säästä.
Tässä projektissa käytetään Sensoryn ja KITT.AI:n wake word engineitä, joiden avulla voin herättää laitteellani pyörivän AVS-palvelun kutsumalla sitä sanalla “Alexa”, jonka jälkeen se on valmis vastaanottamaan sille tarkoittamani kysymykseni/kommenttini. Muuten joutuisin painamaan nappulaa aina, kun haluan puhua Alexalle, mikä ei olisi kovin älykästä toimintaa niin sanotusti. Järkevämpää on antaa vain Raspberryn pyöriä taustalla, jotta ei tarvitse sitä pitää toisella näytöllä esillä tätä varten.
Alexalle on laaja GitHub repository, josta löytyy myös varsin kattavat ohjeet Alexan asennuksesta ja käyttöönotosta Raspberry Pi, Linux, Windows tai Mac laitteilla.
URL: https://github.com/alexa/alexa-avs-sample-app
Tarvikkeet:
Projektia varten omistin seuraavat välineet.
- Raspberry Pi 3 Model B
- Micro USB-kaapeli virtaa varten
- Micro SD-kortti Raspbian käyttöjärjestelmällä
- USB 2.0 Mikrofoni (Kinobo Mini Akiro USB)
- Kaiuttimet 3,5mm audiokaapelilla (Creative T40)
- USB näppäimmistö ja hiiri
- Näyttö HDMI-liitännällä + HDMI-kaapeli
Käytännössä mikä tahansa USB2.0 mikrofoni kelpaa. Valinnassa kannattaa ottaa huomioon, kuinka helposti mikrofoni tallentaa ääntä pitemmiltä etäisyyksiltä. Kaiuttimilla ei myöskään ole oikeastaan väliä, kunhan ne toimivat 3,5mm johdolla. SD-kortissa kannattaa olla vähintään 8GB tilaa.
Alustavat toimet:
Aluksi tarkistin, että Raspberry tunnisti mikrofonin Raspbianin ääniasetuksista. Valitsin äänikortiksi “USB Audio Device (Alsa Mixer)“, mikä on se mikrofonini. Sitten “Select Controls” -valikosta laitoin täpät ruutuihin Microphone ja Auto Gain Control.
Mikrofonin lisäksi pitää laittaa kaiuttimet kuulumaan. Tätä varten muokkasin asetuksia raspi-configista, joka on Raspbian käyttöjärjestelmässä oleva konfiguraatiotyökalu.
sudo raspi-config
Sieltä Advanced Settings:
Audio:
1 Force 3,5mm headphone jack:
Nyt kaiuttimet toistivat ääntä. Sen voi testata vaikka soittamalla youtubesta jonkun videon. Mikrofonin testaukseen on erilaisia websovelluksia.
Raspberryssä tulee olla projektia varten myös internetyhteys.
Amazon Developer Accountin rekisteröinti:
Ihan ensimmäisenä loin Amazon developer käyttäjätilin osoitteessa: https://developer.amazon.com/
Jouduin täyttelemään lomakkeen henkilötietoja, jonka jälkeen pääsin eteenpäin:
Sitten hyväksyin sopimusehdot:
Ja lopuksi vielä ilmoitin olevani tuloja tavoittelematon kehittäjä:
Amazon Developer tili oli nyt tehty.
Device ja security profiilien luonti:
Security Profile tarvitaan laitteen identifiomiseksi. Raspberryni käyttää ClientID ja Client Secrettiä todennuksessa Alexa Voice Servicen kanssa.
Kirjautuneena Amazon tililleni, navigoin Developer consolen Alexa-sivulle. Sieltä sitten painoin “Get started >” Alexa Voice Servicen alta.
Ensiksi rekisteröin uuden laitteen:
Device Type Infon alla annoin laitteelle Device Type ID:n ja Display nimen.
Seuraavaksi loin uuden Security Profilen, jolle annoin nimen ja kuvauksen.
Sitten minulle generoitiin Security Profile ID, Client ID ja Client Secret. Otin nämä talteen, sillä tarvitsen niitä myöhemmässä vaiheessa.
Web Settings välilehdeltä “Edit“, kun luomani Security Profile (kuvassa vihreällä) oli valittuna.
Lisäsin uuden Allowed originin ja uuden Allowed Return URL:in painamalla “Add Another” (merkattu punaisella).
Allowed Origins kohdalle lisäsin seuraavan:
https://localhost:3000
Allowed Return URLs kohdalle lisäsin:
https://localhost:3000/authresponse
Lopputulos näytti siis tältä:
Kun nuo olivat valmiit, painoin Next, jonka jälkeen täyttelin vielä laitetietoja. Latasin laitteelle kuvan, annoin sille kuvauksen jne.
Lopuksi painoin “Submit“. Laite oli nyt rekisteröity.
Security Profile pitää kuitenkin vielä ottaa käyttöön osoitteessa: https://developer.amazon.com/lwa/sp/overview.html
Siellä valitsin luomani profiilin ja painoin “Confirm“.
Seuraavaan kohtaan en tarvitse oikeaa osoitetta, joten laitoin siihen vaan http://example.com ja tallensin.
Profiili on nyt aktivoitu, joten aloitin softan asentelun Raspberry Pi:lle.
Sample app:in kloonaus:
Asensin ensin gitin terminaalin komennolla:
sudo apt-get install -y git
Sen jälkeen kloonasin Alexa Sample App:in GitHubista Raspberryni työpöydälle:
cd Desktop git clone https://github.com/alexa/alexa-avs-sample-app.git
Omien tietojen päivittäminen asennusskriptiin:
Menin hakemistosijaintiin ~/Desktop/alexa-avs-sample-app. Siellä muokkasin nanolla tiedostoa automated_install.sh.
nano automated_install.sh
Muokkasin tiedostoon seuraavat tiedot: ProductID, ClientID ja ClientSecret. ProductID:n määrittelin itse jossain vaiheessa ja ClientID ja ClientSecret generoitiin minulle, kun loin aiemmin Security Profilea.
Kun tiedot oli muokattu asennustiedostoon, tallensin ctr-x ja sitten y. Lopuksi enter, jotta muutokset tallentuvat.
Asennusskriptin ajo:
Skripti asentaa kaikki komponentit, joista Alexa Voice Service on riippuvainen, mukaanlukien kaksi kolmannen osapuolen wake word engineä. Asennusskripti asentaa kaikki tiedostot siihen hakemistosijaintiin, jossa se ajetaan.
Skriptin ajoin samassa hakemistossa, jossa olin äskenkin, eli ~/Desktop/alexa-avs-sample-app. Siellä sitten suoritin skriptin terminaalin komennolla:
. automated_install.sh
Sen jälkeen minulta kyseltiin muutama kysymys, joihin kaikkiin vastasin y eli kyllä.
Yhdessä kohdassa kysyttiin, käytänkö 3,5mm audio outputtia vai HDMI, johon vastasin 3,5mm.
Lopuksi kysyttiin haluanko käynnistää wake word enginen, johon vastasin myös kyllä, jonka jälkeen asennus alkoi.
Asennuksessa meni jopa puoli tuntia kokonaisuudessaan. Näkymä oli tällainen, kun asennus oli valmis:
Webpalvelun, sample app:in ja wake word enginen käynnistäminen:
Lopuksi tarvittavat palvelit tulee vielä aktivoida päälle. Tätä varten avasin kolme erillistä terminaali-ikkunaa:
- Terminaalissa käynnistin webpalvelun, joka valtuuttaa sample appini AVS:n kanssa.
- Terminaalissa käynnistin sample app:in, joka kommunikoi sen AVS:n kanssa.
- Terminaalissa käynnistin wake word enginen, jotta voin aloittaa puheentunnistuksen puhekomennolla “Alexa”.
Kaikki seuraavat komennot tuli suorittaa tietyssä järjestyksessä.
Webpalvelu
Webpalvelun käynnistäminen ensimmäisessä terminaali-ikkunassa hakemistossa ~/Desktop/alexa-avs-sample-app/samples komennolla:
cd ~/Desktop/alexa-avs-sample-app/samples cd companionService && npm start
Palvelu kuuntelee nyt porttia 3000.
Sample App
Seuraavaksi käynnistin alexa sample appin, joka sitten kommunikoi Alexa Voice Servicen kanssa Amazonin palvelimilla. Edelleenkin ollaan samassa hakemistossa, eli ~/Desktop/alexa-avs-sample-app/samples.
Siellä komento cd javaclient && mvn exec:exec.
cd ~/Desktop/alexa-avs-sample-app/samples cd javaclient && mvn exec:exec
Siitä seurasi ponnahdusikkuna, jossa minua pyydettiin rekisteröimään laitteeni viestin tarjoamassa linkissä. Kysyttiin haluanko avata linkin automaattisesti selaimessani, johon vastasin kyllä.
Linkki ohjasi minut Amazonin sivulle, jonne kirjauduin Amazon developer tunnuksini. Seuraavalla sivulla minua pyydettiin vahvistamaan, että haluan laitteeni pääsevän kiinni Security Profiiliini, jonka loin aiemmin. Siihen vastasin “Okay“.
Siitä minut sitten uudelleenohjattiin automaattisesti https://localhost:3000/authresponse -alkavaan URL:iin. Sivulla luki “device tokens ready”.
Palasin siihen käynnistämääni javaohjelmaan ja painoin sen ruudulla näkyvää OK-nappia.
Client-ohjelma on nyt valmis vastaanottamaan Alexa-pyyntöjä.
Nyt voin jo puheohjatusti kommunikoida Alexa Voice Servicen kanssa painamalla “Listen“-painiketta. Haluan kuitenkin kyetä herättämään palvelun kuuntelemaan minua puheellani, joten sitä varten minun tulee vielä käynnistää wake word engine.
Wake word engine
Kuten aiemmin mainitsin, Alexa tukee kahta kolmannen osapuolen wake word engineä, joista voin valita kumpaa käytän. Vaihtoehdot ovat joko Sensoryn TrulyHandsFree tai KITT_AI:n Snowboy. Molemmat mahdollistavat sen, että Alexa aloittaa kuuntelemiseni, kun kutsun sitä sanalla “Alexa”.
Itse päätin käyttää Sensoryä, joten käynnistin sen kolmannessa terminaali-ikkunassani.
cd ~Desktop/alexa-avs-sample-app/samples cd wakeWordAgent/src && ./wakeWordAgent -e sensory
-e parametria käytetään tuossa komennossa valitsemaan kumman osapuolen wakeWordAgenttia käytetään.
Nyt voin kutsua Alexaa sen nimellä ilman, että tarvitsee näkyä Rasbian käyttöjärjestelmää edes toisella ruudullani.
INFO:===> WakeWordAgent: wake word detected <=== INFO:WakeWordAgent: State set to WAKE_WORD_DETECTED(3) INFO:WakeWordAgent: State set to SENT_WAKE_WORD_DETECTED(4) INFO:WakeWordAgent: IPC Command received:3 INFO:WakeWordAgent: State set to WAKE_WORD_PAUSE_REQUESTED(5) INFO:SensoryWakeWordEngine: handling pause INFO: *** THREAD JOINING: Sensory *** INFO:SensoryWakeWordEngine: mainLoop thread ended INFO:WakeWordAgent: State set to WAKE_WORD_PAUSED(6) INFO:WakeWordAgent: IPC Command received:4 INFO:WakeWordAgent: State set to WAKE_WORD_RESUME_REQUESTED(7) INFO:SensoryWakeWordEngine: handling resume INFO:SensoryWakeWordEngine: mainLoop thread started INFO:WakeWordAgent: State set to IDLE(2)
Ylläoleva tulostus oli seurausta siitä, että kutsuin Raspbia sanalla “Alexa”, jolloin se antoi äänimerkin, jonka jälkeen se vastaanotti minulta komentoja puheentunnistuksella.
Lopputulos:
Toimiva Amazon Alexa Voice Service Raspberry Pi 3 model B tietokoneellani.
Lähteet:
Raspi-config
https://www.raspberrypi.org/documentation/configuration/raspi-config.md
Alexa AVS Sample App Repository
https://github.com/alexa/alexa-avs-sample-app
Alexa AVS Sample App for Raspberry Pi
https://github.com/alexa/alexa-avs-sample-app/wiki/Raspberry-Pi
Create Security Profile
https://github.com/alexa/alexa-avs-sample-app/wiki/Create-Security-Profile