Trasformiamo la Raspberry PI 4 in un device Echo Alexa

Amazon Alexa Voice Service (AVS) consente ai produttori di hardware di integrare Alexa in schede di prototipazione hardware come la Raspberry Pi o i development kits di terze parti come NXP, Qualcomm, offrendo la comodità del controllo vocale.

Tech Stack

Una volta configurato Raspbian OS con il wizard di primo avvio di NOOBS, si può procedere alla configurazione dell’assistente di Amazon, ma prima dobbiamo soddisfare i requisiti hardware.

Required hardware

Nel mio caso sto utilizzando una Raspberry PI 4 con 4 GB di RAM acquistata con l’ottimo starter kit Labists che ho comprato su Amazon.

Inoltre abbiamo bisogno di una minimo di 8 GB per installare Raspbian e l’AVS SDK di Alexa.

La Raspberry Pi non ha un microfono integrato, quindi per interagire con Alexa dobbiamo acquistarne uno esterno da inserire nella porta USB.

Dobbiamo connetterci alla Raspberry Pi con un speaker dotato di un cavo audio da 3,5 mm

Required software

Con l’utilizzo di NOOBS possiamo installare e configuare come sistema operativo Raspbian (release date 26/09/2019) che si appoggia al kernel Linux versione 4.19.75

Alexa Voice Service SDK 1.17.0

Alexa-enabled prototype 

Quando progettiamo un nostro client device dobbiamo scegliere la scheda di prototipazione in base anche alla tipologia di interazione: con la voce o con il tocco.
Nel primo caso basta utilizzare la wake-word “Alexa” per interagire con il device avendo le mani libere (Hands-free), invece nel secondo caso dobbiamo toccare (tap) o tenere premuto (push) un componente fisico come un pulsante.

Quando il wake word engine (WWE) rileva la parola di attivazione “Alexa” spedisce il messaggio all’audio input processor (AIP) che è responsabile di inviare i dati verso i servizi in cloud AVS.

Quando attivato, l’AIP continua a trasmettere l’audio fino a quando non riceve una direttiva di Stop. L’AIP discrimina la fonte audio in base anche al tipo di interazione dell’utente.

Step 1 – Download AVS SDK

Il primo step è digitare da terminale il seguente comando in modo da assicurarci che la nostra Raspberry Pi abbia accesso alle dipendenze richieste.

Infine scarichiamo i 3 bash scripts della configurazione del SDK:

Questi scripts verranno successivamente utilizzati per scaricare e autorizzare AVS Device SDK e lanciare l’app di esempio.

Step 2 – Registrazione del prodotto

Per iniziare dobbiamo registrarci come sviluppatori al portale Alexa Voice Service Developer Console e creare un nuovo prodotto.

Iniziamo scegliendo il nome (1) del prodotto, un ID (2) di identificazione e la tipologia di prodotto (3) che andremo a creare.

Come tipologia di prodotto scegliamo Wireless Speaker (1) ed inseriamo una breve descrizione (2) del prodotto.

L’utente interagirà con il nostro prodotto con la voce, avendo quindi le mani libere (3) (hands-free ) ed infine selezionare “no” alle 4 domande successive.

Step 3 – Profilo di sicurezza

Salvata la configurazione base, viene richiesta la creazione di un profilo di sicurezza:

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.

Accettiamo le condizioni d’uso e terminate così la creazione del prodotto compatibile con AVS.

Il file contiene dati nel seguente formato:

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.

Step 4 –  Installazione software

Adesso dobbiamo avviare l’installazione del software fornito da Amazon passandogli come argomento il file di configurazione che abbiamo precedentemente salvato. Da terminale quindi lanciamo il comando:

Accettiamo l’installazione digitando la stringa AGREE.

L’installazione dura circa 20 minuti, ma è importante dopo circa 5 minuti dall’avvio accettare le licenze d’uso della tecnologia TrulyHandsFree sviluppata dall’azienda Sensory in modo da poter iteragire con Alexa anche da devices IoT. Inoltre Sensory si è occupata di gararantire che il sistema venga attivato solo nel caso in cui venga pronunciata la wakeword “Alexa”.

Accettiamo il contratto digitando yes e lasciamo che l’installazione prosegua. Al termine, assicuratevi di leggere la scritta:


Una volta configurato Raspbian OS con il wizard di primo avvio, si può procedere alla configurazione dell’assistente di Amazon.

Step 5 –  Autorizzazione

Adesso dobbiamo autorizzare la Raspberry Pi ad accedere all’account developer di Amazon aprendo dal browser la pagina web:

Ci verrà chiesto di loggarci e di inserire l’authorization code di 5 cifre di registrazione del nostro device.

Lasciamo la pagina aperta.

 

Alexa core states

Durante la formulazione della richiesta da parte dell’utente Alexa passa dallo stato di inattività a quello di ascolto attivo. Quando viene identificata la fine del discorso dell’utente, Alexa esce dallo stato di ascolto.

Gli stati principali di Alexa sono: in ascolto, pensando e parlando.

Quando l’utente ha completato di formulare la sua richiesta, Alexa entra nella modalità di thinking ossia che sta elaborando una risposta. In questo stato il microfono è disattivato e non vengono più accettati comandi vocali.

L’utente visualizza lo stato di speaking durante la risposta di Alexa quando Alexa risponde a una richiesta con la sintesi vocale (TTS). Al contrario non viene visualizzato quando Alexa sta rispondendo con media come musica, audio libri.

Step 1 – Alexa is currently idle

L’SDK è disponibile per sviluppatori e makers, con tutorial, documentazione e un’app di esempio che possiamo lanciare dal terminale:

Questo comando rimarrà in attesa della autorizzazione, stampando a video l’authorization code che va inserito nel form della pagina web che abbiamo lasciato aperta prima.

 

La libreria CBLAuthDelegate potrebbe impiegare fino a 30 secondi per accettare il token di aggiornamento dalla finestra di login di Amazon.

Torniamo al terminale e scorriamo fino alla fine per verificare la presenza del messaggio:

Alexa è inattiva (idle) e in attesa di una richiesta da parte dell’utente, ma la lingua è ancora settata di default in inglese.

Step 2 – Impostiamo l’italiano

A questo punto non rimane altro che premere il tasto “c” sul terminale e scegliamo l’opzione “1” per modificare la lingua di Alexa.

Adesso per impostare come lingua di default l’italiano non ci resta che digitare “13”.

Tutti gli steps precedenti  vanno fatti solo la prima volta mentre le successive sarà sufficiente lanciare l’app di esempio per dialogare con Alexa.

Ora possiamo domandare alla nostra Raspberry quasi tutte le cose che è possibile chiedere ai prodotti commerciali Echo.

Sitografia

[1]  Sensory Brings “Alexa” Wake Word to IoT Device Manufacturers

Documentazione ufficiale
[1] Raspberry Pi
[2] Register a Product
[3] Use the sample app

[4] Build the AVS Device SDK
[5] Get a Refresh Token

AVS documentazione
[1] Development Kits for AVS

Amazon blog
[1] Introducing the Alexa Voice Service Device SDK for Commercial Device Makers
[2] 5 New Tutorials to Help You Integrate Alexa Voice Capabilities into Your Product
[3] Build and Launch Alexa Built-in Products with Solution Providers

Videografia

[1] Alexa Voice Service (AVS) – Dota de Voz a tu Producto con Alexa
[2] Getting Started with the AVS Device SDK
[3] Give Your Product a Voice with Alexa