Riconoscimento di parole chiave con Arduino Nano 33 BLE Sense

Da alcuni anni il concetto di riconoscimento vocale è entrato a far parte della vita delle persone. Che si tratti di cercare una parola su un motore di ricerca, di avviare una chiamata sullo smartphone o di chiedere informazioni ad un assistente virtuale, il riconoscimento vocale opera all'interno dell'applicazione usata. In questo articolo presentiamo un progetto in cui insegneremo alla nostra scheda Arduino a comprendere ed eseguire i nostri comandi vocali.

Introduzione

Il riconoscimento vocale automatico (ASR) è il processo di conversione di un segnale vocale in una sequenza di parole mediante un algoritmo implementato come programma per computer. Ovvero, insegniamo ad un dispositivo elettronico a riconoscere i nostri comandi vocali in modo da abilitare l'interazione tra uomo e macchina attraverso la voce. Per poter riconoscere voce e comandi, il dispositivo deve far uso di potenti software per il riconoscimento vocale. Questi software di elaborazione del linguaggio naturale (NLP) generalmente non vengono eseguiti sul dispositivo, ma su server remoti dotati della potenza e della memoria non disponibili sui dispositivi smart. Alcuni degli esempi ben noti sono:

  • i sottotitoli automatici dei video di YouTube che, grazie ad un motore ASR in esecuzione, produce le trascrizioni corrispondenti all'audio;
  • Siri, Cortana, Google Voice, e tutti i loro front-end sono motori ASR.

Ma negli ultimi anni un differente approccio al problema del riconoscimento vocale e dell'apprendimento macchina in genere, ha attirato l'attenzione degli sviluppatori. Fare in modo cioè che i software possano essere eseguiti direttamente sui dispositivi (microcontrollori) eseguendo l'inferenza localmente e non più in remoto. Questa tendenza è denominata Embedded Machine Learning o anche TinyML. In questo articolo descriviamo la realizzazione di un progetto di riconoscimento vocale embedded. In particolare, parliamo della programmazione di un dispositivo per discriminare le parole "rosso", "blu" e "verde" pronunciate da un utente ed accendere un LED del colore discriminato. Il tool online Edge Impulse, ampiamente descritto in precedenti articoli, semplifica notevolmente la realizzazione di progetti di TinyML. Per quanto riguarda i componenti utilizzati, il solo richiesto è la scheda Arduino Nano 33 BLE Sense. La scelta della scheda non è opzionale. Infatti, Arduino Nano 33 BLE Sense è l'unica scheda Arduino supportata dal tool online, ed è quella ottimale per il machine learning.

Alcuni cenni teorici

L'obiettivo del riconoscimento vocale è quello di abilitare una macchina ad "ascoltare", "capire" e "agire in base a" informazioni parlate. Nel riconoscimento vocale la capacità di riconoscere il segnale vocale può essere suddivisa in differenti classi:

  • Parole isolate - il sistema accetta una singola battuta alla volta. E di solito richiede che ogni espressione sia preceduta e succeduta dal silenzio, ovvero si richiede all'oratore di attendere tra le parole.
  • Parole connesse - si possono dare più parole al sistema che le elabora separatamente come parole isolate.
  • Discorso continuo - il parlato naturale viene pronunciato dall'utente ed è rilevabile dalla macchina. Il riconoscimento vocale continuo è difficile da creare poiché richiede specifici metodi implementativi.
  • Discorso spontaneo - in cui si riescono a gestire anche pronunce errate, non parole, etc.

Ogni oratore ha proprietà uniche che influenzano la voce. Sulla base di queste proprietà il sistema può essere distinto in due classi principali:

  • Modello dipendente da chi parla - il modello dipende dallo specifico oratore. Questi modelli sono più facili da implementare e meno costosi. Forniscono risultati più accurati per gli oratori specifici e risultati meno accurati per gli altri.
  • Modello indipendente da chi parla - il modello dipende da molti oratori. Questi modelli sono difficili da implementare e più costosi. Forniscono risultati più accurati per molti oratori.

In base alle classificazioni riportate, possiamo quindi affermare che il progetto che andiamo a descrivere corrisponde ad un modello dipendente dal parlatore per parole isolate.

Un sistema per il riconoscimento vocale può essere suddiviso in quattro stadi principali:

  1. Analisi - si occupa della segmentazione del segnale vocale per le ulteriori elaborazioni.
  2. Estrazione delle caratteristiche - si occupa della riduzione della dimensionalità del vettore di input conservando i fattori discriminanti del segnale. Esistono diverse tecniche di estrazione delle caratteristiche (features).
  3. Modellazione - si occupa di creare un modello dell'oratore utilizzando il vettore di caratteristiche. Anche per questo stadio esistono diverse tecniche che possono essere utilizzate.
  4. Matching - si occupa di abbinare una parola rilevata ad una nota.

Possiamo ora iniziare a descrivere il progetto.

Il progetto

All'interno del proprio account Edge Impulse è possibile avviare un nuovo progetto, denominandolo a piacere. La prima cosa da fare, all'interno del progetto, è collegare un dispositivo supportato all'SDK. Ciò consente al dispositivo di comunicare con il servizio cloud per ricevere comandi e inviare automaticamente i dati del sensore. Nel nostro caso si tratta della scheda Arduino Nano 33 BLE Sense.

Configurazione preliminare

Il sito di Edge Impulse fornisce tutta la documentazione in inglese per la configurazione di tutte le schede supportate. Per completezza riportiamo di seguito le operazioni per la scheda Arduino Nano 33 BLE Sense. Facendo click sui link dei vari software si viene condotti nelle pagine web dove scaricarli.

  1. Installare Node.js v12 o superiore
  2. Installare il CLI Arduino. Un tutorial video su youtube può essere d'aiuto per l'installazione su Windows 10
  3. Installare il CLI Edge Impulse. Basta aprire il prompt ed eseguire la seguente riga di comando:
npm install -g edge-impulse-cli

Con tutti i software installati, è ora possibile collegare la scheda di sviluppo Arduino Nano 33 BLE Sense ad Edge Impulse.

Con un cavo micro-USB collegare la scheda di sviluppo al computer. Quindi premere due volte RESET per avviare il bootloader. Il LED di bordo dovrebbe indicarlo iniziando a pulsare.

La scheda Arduino Nano 33 BLE Sense necessita del giusto firmware per poter operare. Occorre quindi:

  1. Scaricare l'ultima versione del firmware Edge Impulse, ed estrarre il contenuto dal file zip
  2. Aprire il flash script relativo al proprio sistema operativo per flashare il firmware
  3. Aspettare la fine dell'operazione e premere il tasto reset sulla scheda per avviare il nuovo firmware

Da un prompt dei comandi o da un terminale, eseguire:

edge-impulse-daemon

Il dispositivo è ora connesso a Edge Impulse. Per verificarlo, basta andare nel progetto e fare click sulla scheda "Devices" dove vengono riportati tutti i dispositivi connessi al tool.

Raccolta dei campioni

Il dispositivo è ora in grado di raccogliere e caricare i campioni vocali da utilizzare come dataset per l'addestramento e il testing del modello. Arduino Nano 33 BLE Sense è dotato di un microfono integrato, basterà quindi avviare il campionamento dal tool per iniziare a raccogliere i dati. Per la fase di addestramento raccogliere almeno 60 campioni di durata 1 secondo ciascuno per ogni colore; mentre per la fase di test 15 campioni per ogni colore sono sufficienti. Raccogliere più di 200 campioni singoli potrebbe essere ripetitivo e stancante. In alternativa, si possono raccogliere campioni di lunghezza pari alla maggiore consentita dal software (13 secondi). In questi campioni lunghi si deve ripetere in continuazione la stessa parola chiave da discriminare, con intervalli di silenzio di 1 secondo circa tra una parola e l'altra. Successivamente, la funzione "Split" (Figura 1) fornita da Edge Impulse permette la suddivisione automatica in campioni più piccoli da 1 secondo ciascuno. Durante l'operazione di "Split" l'utente può sempre intervenire per modificare i parametri manualmente.

[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2317 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend