4- Getting started: Installare Google Assistant SDK sulla Pi-Zero

Nel numero 57 di The MagPi di maggio 2017 Google regalava un Voice kit per incoraggiare le persone a costruirsi il proprio Google Home.
Il progetto si chiama AIY,  miscuglio tra AI (Artificial Intelligence) e DIY (Do It Yourself), e nasce con l’intento di  soddisfare la crescente voglia di prodotti dotati di intelligenza artificiale.

Seguendo le istruzioni all’interno della rivista o sul sito è possibile costruire una vocal user interface (VUI), all’interno di un cubo di cartone, in grado di utilizzare i servizi cloud di Google (Assistant SDK o Cloud Speech API ) trasformando così l’interazione uomo-macchina più simile all’interazione uomo-a-uomo.
Google Home non è disponibile in Italia, però con Raspberry Pi Zero W e l’impiego di Google Assistant Service con API gRPC possiamo avere il nostro assistente per controllare  qualunque dispositivo con la voce.

Tech Stack

[1] Raspberry Pi Zero W
[2] MicroSD card con Raspbian (16 GB )
[3] Setup del microfono USB e lo speaker
[4] Aver abilitato l’API di Assistant e ottenuto la OAuth Key
[5] Aver installato Python 3.x

Step 1 – Setting up Python Virtual Env

Un’ottima best practice è creare un’ambiente di lavoro virtuale indipendente dall’installazione di default di python in modo da poter testare e lavorare in sicurezza con diversi moduli , ma prima eseguiamo il seguente comando:

$ sudo apt-get install python3-dev python3-venv




Con il modulo  venv ,che fa parte della standard library di Python 3, creeremo da termianle un nuovo ambiente virtuale a cui daremo il nome env:

$ python3 -m venv env




Ora con pip installeremo o in caso aggiorneremo i setuptools (versione 38.5.1) :

$ env/bin/python -m pip install --upgrade pip setuptools




Infine per attivare l’ambiente env digiteremo il comando:

$ source env/bin/activate




Se attivo (env) comparirà fra parentesi come prefisso del prompt dei comandi:

(env) pi@raspberrypi:~ $




Step 2 – Clonare il repository di Assistant 

Installiamo git (versione 1:2.11.0-3+deb9u2):

$ sudo apt-get install git




Ora con GIT cloneremo da GitHub il repository di Google Assistant SDK che creerà nella nostra MicroSD in /home/pi/ una nuova cartella assistant-sdk-python.

(env) git clone https://github.com/googlesamples/assistant-sdk-python




Copiamo l’intera directory grpc contenuta nel SDK Python appena clonato, con l’opzione ricorsiva -r , all’interno della nuova cartella di lavoro a cui saremo il nome ZeroAssistant che verrà creata in /home/pi/

(env) cp -r assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc ./ZeroAssistant




Dal file manager PCMan possiamo vedere come nella nostra  home ora ci siano due nuove cartelle e che all’interno di ZeroAssistant ci sono alcuni codici di esempio (python  samples) che ci potranno essere d’aiuto nella configurazione di Assitant.

Step 3 – Installazione OAuthtool

Ora dobbiamo fornire il token di autorizazione che avevamo scaricato in questo tutorial  stando attenti a fornire il percorso corretto e a non rinominarlo. Per farlo dobbiamo prima installare l’authorization tool:

(env) pip install --upgrade google-auth-oauthlib[tool]

Successfully installed cachetools-2.0.1 certifi-2018.1.18 chardet-3.0.4 click-6.7 
google-auth-1.4.1 google-auth-oauthlib-0.2.0 idna-2.6 oauthlib-2.0.6 pyasn1-0.4.2 
pyasn1-modules-0.2.1 requests-2.18.4 requests-oauthlib-0.8.0 rsa-3.4.2 six-1.11.0 urllib3-1.22




Il file json dev’essere nella MicroSd della Pi-Zero quindi se l’avessimo scaricato su un altro computer basta spostarlo con un file manager come WinSCP magari nella cartella /home/pi/

(env) google-oauthlib-tool --client-secrets client_secret_XXXXX.json
--scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless




Ci verrà così dato un URL che apriremo dal browser della Pi-Zero o preferibilmente da un altro computer per velocizzare l’operazione.

Please go to this URL: https://...
Enter the authorization code:




Ci verrà richiesto di loggarci con il nostro account Google (1) e ci verrà fornito un codice di autorizzazione (2) che incolleremo nella shell della Pi-Zero.

L’operazione ha esito positivo nel momento in cui le credenziali vengono salvate:

credentials saved: /home/pi/.config/google-oauthlib-tool/credentials.json
(env) pi@raspberrypi:~ $ 




Step 4 – Installazione gRPC API

Prima di poter utilizzare il binding in Python di Google Assistant gRPC API dobbiamo  soddisfare alcune dipendenze:

(env) sudo apt-get install portaudio19-dev libffi-dev libssl-dev

(env) pip install --upgrade wheel




Ora non ci resta che installare il servizio google assistant gRPC con il seguente comando:

(env) pip install --upgrade google-assistant-grpc




L’esecuzione di questo comando sulla Pi-Zero potrebbe richiedere anche 50 minuti di tempo quindi vi consiglio di prendervi una pausa con un buon thé nero.

Successfully installed google-assistant-grpc-0.1.0 googleapis-common-protos-1.5.3 
grpcio-1.9.1 protobuf-3.5.1




Ora installiamo i requirements per la libreria che troviamo nella cartella ZeroAssistant precedentemente creata.

cd ZeroAssistant
(env) pip install --upgrade -r requirements.txt




Step 5 – Installazione SDK

Sempre da terminale installiamo l’SDK di Google Assistant con i relativi python samples:

python -m pip install --upgrade google-assistant-sdk[samples]

Installing collected packages: google-assistant-sdk
Successfully installed google-assistant-sdk-0.4.3




L’ultima versione del SDK è la 0.4.3 rilasciata il 21 febbraio 2018.

Step 6 – Registrazione dispositivo

Dobbiamo fornire a Google Assistant alcune informazioni inerenti al nostro device (tipologia,il produttore,etc) che verranno associate al nostro progetto.
Sostituiamo alla voce my-model un nome a nostra scelta con l’unica cautela che  dev’essere univoco a livello mondiale.

(env) googlesamples-assistant-devicetool register-model --manufacturer my-manufacturer \
          --product-name my-product-name [--description my-product-description] \
          --type device-type [--trait supported-trait] --model my-model




Da root digitiamo il comando di esempio:

(env) googlesamples-assistant-devicetool register-model --manufacturer "Google Assistant SDK" 
          --product-name "ZeroAssistant" --type LIGHT --model ZeroAssistantModel




Ad informarci dell’esito positivo della registrazione avremo:

Creating new device model
Model ZeroAssistantModel successfully registered




Controlliamo che le informazioni che abbiamo inserito siano corrette e per ricordarci il Project ID che ci verrà inseguito richiesto:

(env) googlesamples-assistant-devicetool get --model ZeroAssistantModel

Device Model ID: ZeroAssistantModel
        Project ID: zeroassistant-196222
        Device Type: action.devices.types.LIGHT
No traits




Step 7 – Hey Google!

We want users to have an ongoing 2 way dialogue with Google
Sundar Pichai, Google I/O 2016

Dal suo debutto nel 2012 come Google Now  si era abituati ad attivare l’assistente  vocale con “Ok Google”  invece oggi è più naturale e colloquiale farlo con “Hey Google”. All’inizio la nuova hotword era limitata allo smartspeaker Home e agli smartphone Pixel, ma poi è stato attivata per tutti gli altri dispositivi in grado di supportare Google Assistant.


Il nuovo assistente vocale a “due vie di dialogo” era stato presentato dal CEO Sundar Pichai come evoluzione di Google Now durante la conferenza annuale Google I/O 2016.

(env) googlesamples-assistant-pushtotalk --project-id zeroassistant-196222 
--device-model-id ZeroAssistantModel --lang it-IT




Da smartphone per attivare Google Assistant è sufficiente tenere permuto a lungo il pulsante home invece da computer dobbiamo premere Enter e  sarà pronto a rispondere ai nostri comandi:

INFO:root:Connecting to embeddedassistant.googleapis.com
Press Enter to send a new request...
INFO:root:Recording audio request.
WARNING:root:SoundDeviceStream read overflow (3200, 6400)
INFO:root:End of audio request detected
INFO:root:Finished playing assistant response.
Press Enter to send a new request...
INFO:root:Recording audio request.
INFO:root:Transcript of user request: "Ehi Google".




 

Sitografia

[1] Google Assistant is a two-way conversational personal assistant for all your devices

AIY Projects
[1] Google AIY Voice Kit for Raspberry Pi
[2] The MagPi, 04/05/2017
[3] Billy Rutledge, AIY Projects: Do-it-yourself AI for Makers, Google Developers, 04/05/ 2017
[4] Aggiornamento AIY Projects: nuovi progetti, nuovi partner e nuovi kit per i maker, 22/09/2017

Hey Google
[1] Lorenzo Longhitano ,“Hey Google” è ora la nuova parola d’ordine di Google Assistant, Wired, 18/12/2017
[2] Vezio Ceniccola, Google Assistant arriva ufficialmente in Italia: finalmente parla italiano!, Androidworld, 01/11/2017
[3] Jacob Kleinman, Soon You Won’t Have to Say ‘Hey Google’ to Launch Google Assistant, Lifehacker, 30/01/2018

Documentazione 
[1] Introduction to Google Assistant Service
[2] Configure and Test the Audio
[3] Install the SDK and Sample Code
[4] Release Notes

gRPC
[1] Google Assistant API
[2] Python Samples for the Google Assistant gRPC API

Device model
[1] Register the Device Model