3 dicembre 2018

tutorial: come usare amazon alexa e google assistant in italiano sul raspberry pi 3


Benvenuti!
Questo tutorial vi fornirà una doppia guida su come installare, configurare ed utilizzare i due assistenti vocali di Amazon e Google: Alexa e Assistant. Il tutto sfruttando un Raspberry Pi 3 più un microfono per comandi hands-free.

Nota: il presente articolo contiene una infarinatura generale ed alcuni dettagli sono stati tralasciati. Se volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto i video di supporto a questa guida che ho pubblicato sul mio canale YouTube:



Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per portare a termine il progetto occorrono:
  • un Raspberry Pi 3 + una microSD + un alimentatore da almeno 2.4A + un microfono USB + un monitor, tastiera e mouse + (opzionale) uno speaker
  • Raspbian OS
  • una connessione ad Internet
Per quanto riguarda il primo punto, tutte le configurazioni ed utilizzo degli assistenti avverranno direttamente sul Pi 3 che perciò dovrà essere collegato ad un monitor con tastiera e mouse per l'uso. Ovviamente è necessario un microfono USB che consentirà di parlare con gli assistenti vocali, mentre lo speaker è opzionale poiché potrà essere sfruttato l'audio in uscita dal monitor via HDMI (se dotato di casse). Indispensabile un alimentatore che eroghi almeno 2.4A di corrente.
Raspbian OS è la scelta migliore poiché è il sistema testato da Amazon e Google stesse e con le quali certificano la compatibilità.
Infine è indispensabile una connessione ad Internet per installare tutte le librerie ed il software di controllo e poi perché gli assistenti digitali delle due aziende vivono nel cloud.


2. amazon alexa



Una volta configurato Raspbian OS con il wizard di primo avvio, si può procedere alla configurazione dell'assistente di Amazon. Rispetto al passato, configurare oggi un Pi 3 a mo' di "Speaker SMART powered by Alexa" è cosa davvero molto più semplice e bastano 5 facili passaggi:
  1. scaricare l'AVS SDK
  2. configurare un nuovo prodotto nel portale developer di amazon
  3. installare il software fornito dall'azienda comprensivo di tutto il necessario per il funzionamento
  4. autorizzare il Pi 3 ad usare un account developer di amazon
  5. infine, usare l'applicazione di esempio per chiacchierare con Alexa (anche in Italiano)

STEP 1: Download AVS SDK
Aprite il terminale e digitate i seguenti 3 comandi per prelevare l'SDK che consentirà l'uso delle API Alexa Voice Service (il download è relativamente veloce):
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/setup.sh 
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/genConfig.sh 
wget https://raw.githubusercontent.com/alexa/avs-device-sdk/master/tools/Install/pi.sh

STEP 2: AVS Console Setup
A questo punto va aperto il browser web e caricato il sito https://developer.amazon.com/ accedendo alla sezione AVS Console tramite l'apposito bottone
Nota: se non avete un account developer amazon, va creato a questo punto.
Una volta dentro la console, si può aggiungere un nuovo prodotto che richiederà alcune informazioni: un nome, un ID di identificazione, la tipologia di prodotto che si sta creando (Device con Alexa built-in), niente app companion, tipologia Wireless Speaker, una descrizione, Device Hands-Free (cioè l'utente interagirà con la sola voce), ed infine selezionare "no" alle 4 domande successive. Salvata la configurazione base, viene richiesta la creazione di un profilo di sicurezza: scegliete un nome a piacere ed altrettanto per la descrizione.
Completati questi due passaggi verrà generato un ID per il profilo di sicurezza ed occorrerà specificare le informazioni di piattaforma. Selezionate "Altri dispositivi e piattaforme", quindi inserite un nominativo e generare l'ID. Scaricate la configurazione creata che sarà esportata in formato JSON. Accettate quindi le condizioni d'uso e terminate così la creazione del prodotto compatibile con le API Alexa Voice Service (o AVS).
Nota: il prodotto appena creato è identificato da un Client ID un Client Secret più il profilo di sicurezza, dati che non dovrebbero essere condivisi con nessuno.
Prima di passare al passo successivo, aprite il file manager e spostate dalla cartella Download alla cartella home il file config.json scaricato poc'anzi e contenente la configurazione del prodotto appena creato.

STEP 3: Install Software
Il terzo step è il più lungo di tutti, ma completamente automatizzato. Tornate al terminale e lanciate il comando sudo bash setup.sh config.json (cioè avviate l'installazione del software fornito da Amazon dandogli in input la configurazione specifica del prodotto creato nello step 2). Accettate l'installazione digitando la stringa AGREE.
Nota: la procedura di installazione dura circa 20-25 minuti, ma è importante dopo circa 5 minuti dall'avvio accettare le licenze d'uso del Sensory TrulyHandsFree che fondamentalmente è una libreria che consente di parlare ad Alexa e ricevere le risposte. Una volta accettato il contratto, digitando yes, l'installazione proseguirà. 
Nota 2: se durante il setup esso dovesse bloccarsi per un periodo di tempo elevato, basterà scollegare la corrente dal Pi, riavviare il sistema e quindi tutto il processo di installazione da capo. Il processo ripartirà dal punto in cui si era bloccato (niente panico!).
Al termine, assicuratevi di leggere la scritta: Configuration/Build completata.

STEP 4: Authorization
A questo punto si deve autorizzare il Pi 3 ad accedere all'account developer amazon, e per fare ciò aprite sul browser l'URL https://amazon.com/us/code e loggatevi con il vostro utente. Lasciate la pagina aperta e tornate sulla console per lanciare il comando sudo bash startsample.sh
Nota: se non avete ancora collegato un microfono USB al Pi 3, allora troverete un errore nella creazione della SampleApplication. Va collegato il microfono e rieseguito il comando!
Questo comando eseguirà varie operazioni finché non rimarrà in attesa della autorizzazione, stampando a video un codice che va copiato ed incollato sul browser nella pagina poc'anzi aperta. Fatto ciò, cliccate continua e acconsentite al prodotto creato nello step 2 di accedere ai servizi AVS e all'Account Developer stesso (assicuratevi di ottenere un messaggio di successo). Tornate al terminale e scorrete fino alla fine per verificare la presenza del messaggio: "Alexa è al momento in attesa!".

STEP 5: "Alexa!?"
A questo punto non rimane altro che premere il tasto C, quindi 1, ed infine 9 per cambiare la lingua in Italiano.
Nota: tutti gli step precedenti e le configurazioni viste vanno fatte solo la prima volta mentre le successive sarà sufficiente lanciare l'app di esempio per dialogare con Alexa.
Ora sarà possibile domandare all'assistente quasi tutte le cose che è possibile chiedere ai prodotti commerciali Echo. Ad esempio: "Alexa, quanto fa 2+2?" o "Alexa, chi è il presidente degli Stati Uniti d'America?" oppure "Alexa, imposta un timer tra XX minuti" e via discorrendo...


3. google assistant



A differenza dell'Alexa Voice Service, installare ed utilizzare le Google Assistant API è cosa leggermente più complessa, e l'intero processo richiede 6 passaggi:
  1. configurazione dell'hardware
  2. creazione di un nuovo progetto sulla actions console
  3. abilitazione delle API apposite per l'assistente vocale più la creazione di un client di autenticazione
  4. registrazione di un nuovo prodotto sul portale developer di google per interagire con le suddette API
  5. installare l'SDK con tutti i tool forniti da Google
  6. avviare l'applicazione di test per parlare con l'assistente

STEP 1: Hardware Setup
Il primo passo è quello di specificare quale microfono e quale speaker utilizzare per interagire con l'assistente vocale. Collegate un microfono USB ed eventualmente uno speaker al Pi ed aprite il terminale: con il comando arecord -l potete vedere tutti i dispositivi di input connessi, con il comando aplay -l tutti quelli di output. Segnatevi i numeri di card e device per entrambi i dispositivi (chiaramente quelli che volete utilizzare) ed inseriteli all'interno del file /home/pi/.asoundrc scrivendo all'interno del file la seguente configurazione:
pcm.!default {
    type asym
    capture.pcm "mic"
    playback.pcm "speaker"
}
pcm.mic {
    type plug
    slave {
        pcm "hw:<card number>,<device number>"
    }
}
pcm.speaker {
    type plug
    slave {
        pcm "hw:<card number>,<device number>"
    }
}
I punti riportati in grassetto devono essere modificati inserendo i valori desiderati recuperati poc'anzi. In pcm.mic andrà indicato il numero di card e quello di device che si vuole usare per il micrfono, e lo stesso in pcm.speaker per l'audio. Ad esempio un microfono USB potrebbe riportare valori card = 1 e device = 0, mentre l'audio in uscita dal TV a cui il Pi è connesso via HDMI potrebbe avere valori card = 0 e device = 1. Questi dati vanno specificati nel file asound.rc modificando le stringhe ad esempio in: "hw:1,0" e "hw:0,1".
Per testare la configurazione ed il funzionamento di microfono e speaker, potete digitare alsamixer per regolare i volumi, speaker-test -t wav per controllare che venga riprodotto un suono di test, mentre testare il funzionamento del microfono con i seguenti comandi:
arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw 
aplay --format=S16_LE --rate=16000 out.raw 
Nota: se avete digitato valori di card e device errati all'interno della configurazione, riceverete a video messaggi di errore. Sarà sufficiente tornare nel file di configurazione ed indicare i valori corretti. Quindi ripetere i comandi per registrare un suono di test e poi riascoltarlo.

STEP 2: Actions Console Setup 1/2
Ora dovete aprire il browser web e recarvi al sito https://console.actions.google.com/ ed autenticarvi con un account Google.
Nota: in caso non ne aveste uno, dovrete crearlo in questo momento
Una volta dentro cliccate su "Aggiungi progetto", specificate un nome, la lingua di default (Italiano) e lo stato (Italia), quindi procedete. Nella pagina che verrà caricata potrete selezionare la categoria di progetto che state sviluppando: scorrete fino in fondo alla pagina e selezionate Device Registration. A questo punto occorre procedere con l'abilitazione delle API.

STEP 3: API & Authentication
Aprite un nuovo tab sul browser ed accedete al sito https://console.developers.google.com/ quindi cliccate su Crea nuovo progetto, specificate un nome a piacere e date l'OK per la creazione.
Una volta completata la fase di creazione, accedete al progetto stesso e, qualora non vi trovaste nella pagina dedicata alle API e Servizi, cliccate sul menu in alto a sinistra e accedete a tale sezione. Qui scegliete la voce Credenziali, quindi create delle nuove credenziali secondo il protocollo Oauth. Nella schermata che appare cliccate sul bottone Configure Consent Screen, aggiungendo un nome per l'applicazione ed ignorando tutto il resto, infine premete Salva. Tornerete nella pagina di creazione delle credenziali Oauth, quindi selezionate l'opzione Other, inserite un nome e procedete.
Ora che è stato creato un nuovo client Oauth esso andrà utilizzato per l'autenticazione ed uso delle API di Assistant. Cliccate perciò sull'iconcina preposta per il download della configurazione (verrà esportata in JSON) ed aprite il file manager per spostare il client_secret_*.json dalla cartella download alla home: per semplicità conviene rinominare il file in un più semplice client_secret.json
Nota: assicuratevi di avere abilitati sull'account google che state utilizzando i seguenti permessi. Aprite un nuovo tab sul browser e recatevi sul sito https://myaccount.google.com/activitycontrols e verificate che Web & App Activity, Device Information e Voice & Audio Activity siano abilitati, altrimenti non potrete utilizzare l'assistente vocale.

STEP 4: Actions Console Setup 2/2
A questo punto, potete tornare sulla Actions Console e registrare un nuovo modello (o prodotto). Compilate tutti i campi richiesti: nome del prodotto, autore e tipologia di device che è a scelta in un menu a tendina (ad esempio potete selezionare speaker). Registrate tale modello e, una volta completato lo step, andate avanti fino al terzo passaggio che può essere al momento ignorato poiché serve per abilitare le capabilities dell'assistente che non ci interessano.

STEP 5: Install SDK & Software
Il quinto passaggio è quello più lungo poiché prevede l'installazione di diversi pacchetti software. Il primo passo è quello di lanciare il comando sudo apt update seguito da sudo apt install python3-dev python3-venv per assicurarsi di avere questi pacchetti configurati.
Una volta terminata l'eventuale installazione, eseguite il comando python3 -m venv env così da poter successivamente aggiornare alcune librerie python, con il comando env/bin/python -m pip install --upgrade pip setuptools wheel che una volta terminato va seguito dal comando source env/bin/activate
A questo punto lanciate i seguenti comandi per installare tutte le librerie di supporto e l'SDK di Assistant più alcune app d'esempio (compresa la libreria di autenticazione via Oauth):
sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev 
python -m pip install --upgrade google-assistant-library
python -m pip install --upgrade google-assistant-sdk[samples]
python -m pip install --upgrade google-auth-oauthlib[tool]
Questa fase dura circa 10 minuti, al termine della quale va lanciato il seguente comando che prende in input il file client_secret.json scaricato poc'anzi:
google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \
      --scope https://www.googleapis.com/auth/gcm \
      --save --headless --client-secrets /home/pi/client_secret.json
Nota: se non lo avete rinominato come suggerito nello step 3 allora dovrete utilizzare il nome completo del file contenente la configurazione del client Oauth.
L'applicazione che viene avviata a seguito del comando genera una URL che va copiata ed incollata sul browser. Acceduti alla pagina (dopo esservi autenticati con il vostro account google) vi sarà richiesto di acconsentire l'accesso al vostro account per l'applicazione creata nello step 4. Confermate e copiate la stringa di autenticazione che viene mostrata a video. Tornate quindi sul terminale ed inserite la stringa per ottenere in cambio le credenziali di autenticazione definitive che verranno salvate sul Pi 3 e saranno poi usate per l'avvio di Assistant.

STEP 6: "Hey Google!?"
L'ultimo step consiste nel semplice avvio dell'applicazione di esempio che consentirà di interagire con l'assistente di Google tramite la nostra voce. Il comando per avviarlo è il seguente e richiede l'inserimento di due informazioni che vanno recuperate sulla Actions Console:
googlesamples-assistant-hotword --project-id [PROJECTID] --device-model-id [MODELID]
I due valori in grassetto sono quelli che devono essere sostituiti: il secondo è il model_id indicato nel progetto creato allo step 4. Il primo invece è il project_id associato al progetto creato nello step 2 e va recuperato dalle impostazioni: cliccate sull'icona ingranaggio (se la barra laterale è chiusa verrà aperta, quindi premete nuovamente sull'icona ingranaggio), selezionate la voce project settings dal popup che verrà mostrato ed il project_id sarà riportato sotto il nome del progetto. A questo punto inserite le due stringhe nel comando e lanciatelo.
Nota: nel qual caso si verificasse un errore di segmentazione, probabilmente dipenderà dal fatto che nel progetto creato nella developer console per qualche motivo non siano state associate/abilitate le Google Assistant API.
Per associare queste API bisogna recarsi sulla Developer Console, quindi cliccare sul menu laterale alla voce Library (oppure sul bottone Add API & Sevices) ed attendere il caricamento di tutte le librerie di API fornite da Google. Qui va cercata la voce Assistant, selezionata e quindi abilitata.
Una volta faccio ciò, dalla schermata che appare cliccate su Create Credentials e nel form selezionate nel menu a tendina la voce Google Assistant API, quindi nel secondo menu a tendina che apparirà selezionate la voce Other UI ed infine selezionate User Data. Cliccate sul bottone di conferma ed il sistema dovrebbe indicarvi che avete già delle credenziali pronte all'uso (quelle che create nello step 3), quindi accettate.
Tornate sul terminale e rilanciare il comando che dovrebbe funzionare senza problemi e restare in ascolto della vostra voce per dialogare con l'assistente.

A questo punto Assistant funzionerà in inglese, e infatti ponendo domande in tale lingua esso risponderà di conseguenza. Per impostare l'italiano occorre installare su un dispositivo compatibile (Android o iOS) l’applicazione Assistant, quindi configurarla affinché, con lo stesso account che state utilizzando sul Pi, Assistant prediliga l’italiano. Fatto ciò potete tornare sul Pi e rilanciare il comando di avvio della sample app.
Nota: tutti gli step precedenti e le configurazioni viste vanno fatte solo la prima volta mentre le successive sarà sufficiente lanciare l'app di esempio per dialogare con Assistant. Per lanciare l'app assicuratevi di trovarvi nell'environment corretto: se il sistema non trova il comando, lanciate prima env/bin/activate quindi la sample app.
Ora sarà possibile porre tutte le domande che si desidera e attendere la risposta dall'assistente vocale. Ad esempio: "Hey Google, quanto fa 15+17?" o "Hey Google, chi è il presidente degli Stati Uniti d'America?" e poi "Hey Google, quanto è alto?" oppure "Hey Google, raccontami una barzelletta" e via discorrendo...


4. conclusioni ed ultime note

Alexa ed Assistant sono due assistenti vocali decisamente evoluti, in grado di eseguire una marea di azioni e soprattutto di essere programmati per aggiungerne di custom. Gli SDK e gli esempi forniti da Amazon e Google vanno intesi principalmente come strumenti per sviluppare nuove abilità per gli assistenti stessi, o per costruire nuovi dispositivi con la funzione di assistenza digitale built-in. Insomma, non vanno assolutamente considerati come sostituiti delle linee commerciali (es: Echo ed Home) ed infatti gli SDK non sono neanche in grado di eseguire tutti i comandi che invece i prodotti in commercio possono sfruttare.


Bene: come indicato ad inizio guida, alcuni aspetti sono stati lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o dei video ad esso correlati, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

1 commento: