
Google Assistant: visual feedback
La voce sta giocando un ruolo importante in questa fase di transizione da un paradigma "mobile first" ad uno "AI First" sotto forma di assistenti vocali come Google Assistant , Amazon Alexa, Apple Siri. Portando così il potere della voce nel mercato consumer tramite prodotti intelligenti come smart-phones, smart-speakers, smart-watches, ecc. che nascono dalla forte combinazione di hardware, software e intelligenza artificiale (AI). Per rendere "smart" anche i nostri progetti aggiungendo l'assistente di Google abbiamo due metodi: [1] L'utillizo della libreria in python Google Assistant Library che è l'ideale per il rapid prototyping per costruire device come AIY Voice Kit.[2] O il servizio gRPC con Google Assistant Service, che fornisce il binding per diversi linguaggi come Go, Java, C#, Node.js o Ruby. Queste 2 API sono molto simili in termini di funzionalità, ma la libreria Python fornisce l'attivazione tramite hotword ("Ok Google") avendo così le mani libere. Invece impiegando l'API gRPC, dobbiamo premere un pulsante (fisico o digitale). La prima API supporta solo architetture x86-64 e ARMv7 (Raspberry Pi 2 e 3) e non ARMv6 (Raspberry Pi 1), invece con la seconda possiamo usare Google Assistant anche sulla Pi-Zero come avevamo già visto in questo tutorial. gRPC serviceUna conversazione può essere composta da più connessioni gRPC, ciascuna costituita da più richieste e risposte. Ad esempio, se l'utente dice: "aggiungi alla mia lista della spesa" l'assistente risponderà: "Cosa vuoi aggiungere ?".
gRPC utilizza uno streaming bidirezionale per ricevere i risultati, per ogni chiamata abbiamo la richiesta audio dell'utente (audio_in) e una risposta da parte dell'assistente (audio_out). Feedback visivoIl nostro intento è di associare un feedback visivo alle richieste dell'utente e alle risposte dell'assistente utilizzando i colori di un led RGB in modo da sapere lo stato della conversazione. Durante il turno di conversazione dell'utente, quando sta esprimendo una richiesta, associeremo il colore verde [G] e alla risposta dell'assistente il led rosso [R] perché il turno dell'utente è terminato. Infine associeremo il colore blu [B] quando non c'è nessuna interazione fra utente e assistente che rimane in attesa che l'utente prema il pulsante fisico per esprimere una nuova richiesta. RGB: terna di coloriUn led RGB può riprodurre le lunghezze d'onda dei tre colori di base ([R] rosso, [G] verde, [B] blu) e dalla somma della terna di colori è possibile ottenere il colore bianco [W], mentre dalla loro assenza il nero. Invece dalla sovrapposizione di due colori: Led RGBUn led RGB possiede 4 reofori che collegheremo ai pin GPIO-13, GPIO-19 e GPIO-26 della Raspberry e GPIO-22 alla massa. [R] GPIO-13 Utilizzando il servizio gRPC per iniziare la conversazione con Google Assistant dobbiamo premere un pulsante fisico che collegheremo alla GPIO-22 Editare push to talkPer prima cosa aggiungiamo alla Raspberry il pacchetto RPi.GPIO per il supporto GPIO (porta generica I/O) usando il seguente comando:
Modifichiamo il file pushtotalk.py , dopo averne fatto una copia di backup (pushtotalk_orig.py), che se abbiamo seguito questo tutorial si troverà nella cartella site-packages delle librerie per Python. Aggiungiamo le seguenti righe per il supporto al led RGB e al pulsante.
L’utente sta parlandoAll'interno del metodo assist inseriamo le righe di codice inerenti a quando l'utente sta parlando quindi il led verde [G] sarà acceso e i restanti spenti.
L’assistente sta rispondendoOra dobbiamo associare il led rosso [R] alla risposta dell'assistente che coinciderà con la fine dell'utterance.
L’assistente è in attesa di una richiestaQuando l'assistente finisce il turno di conversazione lo mandiamo in modalità di attesa di una richiesta da parte dell'utente.
Pulsante fisicoPer poter iniziare la conversazione e l'utente esprimere la sua richiesta deve prima poter premere il pulsate fisico. Andremo quindi ad aggiungere all'interno del metodo main le righe per il pulsante.
Impostare l’assistente all’avvioL'idea è che ogni volta che la Raspberry Pi termina il processo di avvio, eseguiremo lo script python che autenticherà e inizializzerà l'Assistente Google. Per farlo editeremo uno script shell a cui daremo il nome assistant-autostart:
Al file appena creato aggiungeremo le seguenti righe:
Dopo aver dato i permessi potremmo lanciare Assistant quante volte vogliamo dallo script.
Se volessimo lanciare Assistant all'avvio della Raspberry con il Desktop dovremmo editare il file autostart
ed aggiungervi il percorso dello script shell.
Sitografia[1] James Schaefer, Smart Devices – What Makes Them “Smart”?, IotForAll, 14/01/2017[2] Mark Bergen, Google CEO Sets ‘AI-First’ Device Blueprint to Catch Apple, Bloomberg, 04/08/2017 [3] Robert Triggs, What being an “AI first” company means for Google, Android Authority, 08/11/2017 [4] Martin Recke, The AI-First world requires new products, Next Conference, 13/12/2017 Google Assistant Embedded: v1alpha2 |