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
1 |
Raspberry Pi 3 o 4 |
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.
1 |
Micro SD card |
Inoltre abbiamo bisogno di una minimo di 8 GB per installare Raspbian e l’AVS SDK di Alexa.
1 |
USB 2.0 microphone |
La Raspberry Pi non ha un microfono integrato, quindi per interagire con Alexa dobbiamo acquistarne uno esterno da inserire nella porta USB.
1 |
Altoparlante esterno o una cuffia |
Dobbiamo connetterci alla Raspberry Pi con un speaker dotato di un cavo audio da 3,5 mm
Required software
1 |
Raspian |
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
1 |
Alexa Voice Service |
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.
1 |
sudo apt–get updates |
Infine scarichiamo i 3 bash scripts della configurazione del SDK:
1 2 3 |
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 |
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:
1 2 |
scegliete un nome 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.
Accettiamo le condizioni d’uso e terminate così la creazione del prodotto compatibile con AVS.
Il file contiene dati nel seguente formato:
1 2 3 4 5 6 |
{ “deviceInfo”: { “clientId”: ” “, “productId”: ” “ } } |
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:
1 |
sudo bash setup.sh config.json |
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:
1 |
**** Completed Configuration/Build *** |
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:
1 |
https://amazon.com/us/code |
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:
1 |
sudo bash startsample.sh |
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.
1 2 3 4 |
PA_ALSA_PLUGHW=1 ./SampleApp “/home/pi/alexa/build/Integration/AlexaClientSDKConfig.json” “/home/pi/alexa/third-party/alexa-rpi/models” DEBUG9 |
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:
1 |
Alexa is currentrly idle |
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