June 3, 2020
  • 3:00 am Microsoft 365 -käyttäjätilin kaappaamiseen reagointi – Tilanteen normalisointi
  • 12:40 am Microsoft 365 -käyttäjätilin kaappaamiseen reagointi – Tilin turvaaminen
  • 1:28 am Windows 10 – Chocolatey-paketinhallinta ja ohjelmistoasennusten automatisointiskripti
  • 8:06 pm Windows 10 -käyttäjäprofiilin migraatio Azure AD -tenanttimuutoksen yhteydessä (USMT)
  • 10:06 pm Microsoft Teams -kalenterikutsut eivät reitity toivotusti sähköpostipalveluiden ollessa G Suitessa

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
AlexaPiKuva


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.
AlexaPiKuva2


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.
Audio1
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:
Audio2
Audio:
Audio3
1 Force 3,5mm headphone jack:
Audio4
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/
amazonacc
Jouduin täyttelemään lomakkeen henkilötietoja, jonka jälkeen pääsin eteenpäin:
info1
Sitten hyväksyin sopimusehdot:
info2
Ja lopuksi vielä ilmoitin olevani tuloja tavoittelematon kehittäjä:
info3
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.
alexa1
Ensiksi rekisteröin uuden laitteen:
alexa2
Device Type Infon alla annoin laitteelle Device Type ID:n ja Display nimen.
alexa3
Seuraavaksi loin uuden Security Profilen, jolle annoin nimen ja kuvauksen.
alexa4
Sitten minulle generoitiin Security Profile ID, Client ID ja Client Secret. Otin nämä talteen, sillä tarvitsen niitä myöhemmässä vaiheessa.
alexa5
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).
alexa6
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ä:
alexa7
Kun nuo olivat valmiit, painoin Next, jonka jälkeen täyttelin vielä laitetietoja. Latasin laitteelle kuvan, annoin sille kuvauksen jne.
Alexa8
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“.
alexa10
Seuraavaan kohtaan en tarvitse oikeaa osoitetta, joten laitoin siihen vaan http://example.com ja tallensin.
alexa11
Profiili on nyt aktivoitu, joten aloitin softan asentelun Raspberry Pi:lle.
alexa12


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

GitClone


Omien tietojen päivittäminen asennusskriptiin:

Menin hakemistosijaintiin ~/Desktop/alexa-avs-sample-app. Siellä muokkasin nanolla tiedostoa automated_install.sh.

nano automated_install.sh

installscript1
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.
installscript2
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

asennus
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.
Screenshot - 270717 - 18_10_52
Lopuksi kysyttiin haluanko käynnistää wake word enginen, johon vastasin myös kyllä, jonka jälkeen asennus alkoi.
Screenshot - 270717 - 18_11_31
Asennuksessa meni jopa puoli tuntia kokonaisuudessaan. Näkymä oli tällainen, kun asennus oli valmis:
Screenshot - 270717 - 19_05_32


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:

  1. Terminaalissa käynnistin webpalvelun, joka valtuuttaa sample appini AVS:n kanssa.
  2. Terminaalissa käynnistin sample app:in, joka kommunikoi sen AVS:n kanssa.
  3. Terminaalissa käynnistin wake word enginen, jotta voin aloittaa puheentunnistuksen puhekomennolla “Alexa”.

Screenshot - 280717 - 21_58_17
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

webpalvelu
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ä.
1
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“.
t22
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.
t23
Client-ohjelma on nyt valmis vastaanottamaan Alexa-pyyntöjä.
t24
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.
t25

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.
Screenshot - 280717 - 22_37_08
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.
loppu


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


TÄTÄ DOKUMENTTIA SAA KOPIOIDA JA MUOKATA GNU GENERAL PUBLIC LICENSE (VERSIO 3 TAI UUDEMPI) MUKAISESTI. HTTP://WWW.GNU.ORG/LICENSES/GPL.HTML
MARKUS PYHÄRANTA
Markus Pyhäranta

RELATED ARTICLES
LEAVE A COMMENT