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:
1 |
$ 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:
1 |
$ python3 –m venv env |
Ora con pip installeremo o in caso aggiorneremo i setuptools (versione 38.5.1) :
1 |
$ env/bin/python –m pip install —upgrade pip setuptools |
Infine per attivare l’ambiente env digiteremo il comando:
1 |
$ source env/bin/activate |
Se attivo (env) comparirà fra parentesi come prefisso del prompt dei comandi:
1 |
(env) pi@raspberrypi:~ $ |
Step 2 – Clonare il repository di Assistant
Installiamo git (versione 1:2.11.0-3+deb9u2):
1 |
$ 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.
1 |
(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/
1 |
(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:
1 |
(env) pip install —upgrade google–auth–oauthlib[tool] |
1 2 3 |
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/
1 2 |
(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.
1 2 |
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:
1 2 |
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:
1 |
(env) sudo apt–get install portaudio19–dev libffi–dev libssl–dev |
1 |
(env) pip install —upgrade wheel |
Ora non ci resta che installare il servizio google assistant gRPC con il seguente comando:
1 |
(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.
1 2 |
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.
1 2 |
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:
1 |
python –m pip install —upgrade google–assistant–sdk[samples] |
1 2 |
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.
1 2 3 |
(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:
1 2 |
(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:
1 2 |
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:
1 |
(env) googlesamples–assistant–devicetool get —model ZeroAssistantModel |
1 2 3 4 |
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.
1 2 |
(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:
1 2 3 4 5 6 7 8 9 |
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