Bacchetta magica IA con TensorFlow Lite per microcontroller e Arduino

1. Introduzione

Che cosa creerai

In questo codelab impareremo a utilizzare TensorFlow Lite for Microcontrollers per eseguire un modello di deep learning su Arduino Nano 33 BLE. L'utente trasforma il microcontrollore in una "bacchetta magica" digitale da agitare per lanciare una serie di incantesimi. Quando l'utente muove la bacchetta, questi dati dei sensori complessi e multidimensionali, che sarebbero incomprensibili per un essere umano, vengono passati come input al modello, che restituisce una semplice classificazione che ci avvisa se si è verificato uno dei diversi movimenti.

9208eb1207211349.gif

Machine learning sui microcontrollori

Il machine learning può essere utilizzato per creare strumenti intelligenti che semplificano la vita degli utenti, come l'Assistente Google. Tuttavia, spesso queste esperienze richiedono una grande quantità di calcoli o risorse, che possono includere un potente server cloud o un computer desktop. Ora, però, è possibile eseguire l'inferenza di machine learning su hardware piccolo e a basso consumo energetico, come i microcontrollori.

I microcontrollori sono estremamente comuni, economici, richiedono pochissima energia e sono molto affidabili. Fanno parte di tutti i tipi di dispositivi domestici: elettrodomestici, auto e giocattoli. Ogni anno vengono prodotti circa 30 miliardi di dispositivi alimentati da microcontrollori.

1914a419dfacf0b5.jpeg

Portando il machine learning sui piccoli microcontrollori, possiamo aumentare l'intelligenza di miliardi di dispositivi che utilizziamo nella nostra vita, senza dover fare affidamento su hardware costoso o connessioni internet affidabili. Immagina elettrodomestici intelligenti in grado di adattarsi alla tua routine quotidiana, sensori industriali intelligenti che comprendono la differenza tra problemi e funzionamento normale e giocattoli magici che possono aiutare i bambini a imparare in modo divertente e piacevole.

TensorFlow Lite for Microcontrollers (software)

864114d0c2b4c919.png

TensorFlow è il framework di machine learning open source di Google per l'addestramento e l'esecuzione di modelli. TensorFlow Lite è un framework software, una versione ottimizzata di TensorFlow, progettata per eseguire modelli TensorFlow su dispositivi piccoli e con una potenza di calcolo relativamente bassa, come gli smartphone.

TensorFlow Lite for Microcontrollers è un framework software, una versione ottimizzata di TensorFlow, progettata per eseguire modelli TensorFlow su hardware piccolo e a basso consumo energetico, come i microcontrollori. Rispetta i vincoli richiesti in questi ambienti incorporati, ad esempio ha una dimensione binaria ridotta, non richiede il supporto del sistema operativo, librerie C o C++ standard o l'allocazione dinamica della memoria e così via.

Arduino Nano 33 BLE (hardware)

bcd452d4d660efa9.jpeg

Arduino è una piattaforma open source molto diffusa utilizzata per la creazione di progetti elettronici. È composto da:

  1. Una scheda di circuiti programmabile fisica (spesso un microcontrollore) come Arduino Nano 33 BLE utilizzato in questo codelab.
  2. L'IDE (Integrated Development Environment) di Arduino, un software utilizzato per scrivere e caricare il codice del computer sulla scheda fisica.

Arduino Nano 33 BLE è una piattaforma basata su microcontrollore: un piccolo computer su una singola scheda di circuiti. Dispone di un processore, memoria e hardware di I/O che gli consentono di inviare e ricevere segnali digitali ad altri dispositivi. A differenza di un computer, un microcontrollore non è potente e in genere non esegue un sistema operativo. Al contrario, hanno processori piccoli, poca memoria e i programmi che scrivi vengono eseguiti direttamente sull'hardware. Tuttavia, poiché sono progettati per essere il più semplici possibile, un microcontrollore può utilizzare pochissima energia.

Attività previste

  • Configurare il microcontrollore Arduino Nano 33 BLE e trasformarlo in una "bacchetta magica" digitale
  • Configurare l' IDE di Arduino e installare le librerie richieste
  • Eseguire il deployment del programma sul dispositivo
  • Lanciare una serie di incantesimi agitando la bacchetta magica e visualizzare le previsioni

Che cosa ti serve

2. Configurare il microcontrollore Arduino

Disimballare Arduino

Rimuovilo dalla confezione e dal polistirolo. È conduttivo e, in caso contrario, può causare problemi.

6ed84a651c871a58.jpeg

Collegarlo al laptop

  • Collega il cavo micro USB alla presa del chip.
  • Collega l'altra estremità del cavo a una presa USB del laptop.
  • Il LED in basso a sinistra di Arduino (in alto a sinistra nell'immagine seguente) dovrebbe accendersi.

c6936696f9659104.jpeg

Acquisire familiarità con il flusso di lavoro

99852afbed7e78b0.png

Come mostrato nel diagramma sopra, l'interprete TFLite su Arduino esegue periodicamente l'inferenza sul modello. Il modello utilizza i dati dell'accelerometro elaborati come input e restituisce una previsione che suggerisce il gesto che si è verificato con maggiore probabilità. Inoltre, verrà stampato un output desiderato e i LED giusti si accenderanno.

3. Configurare l'IDE di Arduino

1. Scaricare l'IDE di Arduino

Per eseguire il deployment del programma sul microcontrollore Arduino, utilizziamo l'IDE di Arduino.

Dopo averlo scaricato, installa e apri l'IDE di Arduino facendo clic sull'applicazione la cui icona è simile a questa: 75717f13527f36b9.png

La pagina di destinazione iniziale si aprirà come segue:

933c91e6e1997c61.png

2. Configurare il Board Manager

  1. Dal menu Arduino, seleziona Tools -> Board: "Arduino .." —> Boards Manager
  2. Cerca "Arduino Nano 33 BLE" e installa Arduino nRF528x Boards (Mbed OS). In questo modo, l'IDE di Arduino supporterà il microcontrollore Arduino Nano 33 BLE. 817c63346152eda9.png
  1. Dal menu Arduino, seleziona Tools -> Board: "Arduino .." -> "Arduino Nano 33 BLE"

9357691e1a1348eb.png

  1. Infine, verifica che la scheda selezionata sia "Arduino Nano 33 BLE" in basso a destra dell'IDE.

aa08706bb84fa9b2.png

3. Configurare la porta

Dal menu Arduino, seleziona Tools -> Port: "/.../" -> /dev/... (Arduino Nano 33 BLE). Dovresti vedere qualcosa di simile a questo:

8c25990d0c6fb6f8.png

4. Controllare la connessione della scheda

Dal menu Arduino, seleziona Tools -> Get Board Info. Dovresti vedere qualcosa di simile a questo:

ccd8f5305be6cf59.png

4. Installare le librerie

1. Libreria Arduino di TensorFlow

Questa libreria contiene tutti gli esempi di TensorFlow Lite for Microcontrollers, incluso il codice sorgente della bacchetta magica richiesto per questo codelab.

  1. Dal menu Arduino, seleziona Sketch -> Include Library -> Add .ZIP Library...
  2. Aggiungi la libreria Arduino di TensorFlow .zip che hai scaricato.

2. Libreria Arduino LSM9DS1

Questa libreria ti consente di leggere i valori dell'accelerometro, del magnetometro e del giroscopio dall'IMU LSM9DS1 su Arduino Nano 33 BLE Sense.

  1. Dal menu Arduino, seleziona Sketch -> Include -> Manage Libraries...
  2. Cerca e installa "Arduino_LSM9DS1". ac2f78a737c5f233.png

5. Caricare e creare l'esempio

1. Caricare l'esempio

Dal menu Arduino, seleziona File -> Examples -> Arduino_TensorFlowLite -> magic_wand per caricare il codice campione.

de349f2d3cb49b98.png

Verrà caricato il codice sorgente della bacchetta magica.

cda8c35a597b0798.png

2. Creare l'esempio

Fai clic sul pulsante Upload nella finestra dello sketch.

71cb1474d5e14669.png

Dopo alcuni minuti dovresti vedere un testo rosso che indica che il flashing è stato completato. Durante il caricamento, il LED destro dovrebbe pulsare e poi spegnersi alla fine.

3df1d0858c6e40a4.png

6. Demo

La bacchetta magica può attualmente rilevare 3 gesti, come mostrato di seguito: 99a607da66af9fc8.png

  1. Ala: inizia dall'angolo in alto a sinistra e traccia con attenzione la lettera "W" per due secondi.
  2. Anello: inizia in posizione verticale, muovi la bacchetta in un cerchio in senso orario per un secondo.
  3. Pendenza: inizia tenendo la bacchetta rivolta verso l'alto, con i LED rivolti verso di te. Muovi la bacchetta verso il basso con un'inclinazione verso sinistra e poi orizzontalmente verso destra per un secondo.

L'immagine seguente mostra due gesti. Innanzitutto, una pendenza e poi un'ala (utilizza questa immagine come riferimento per la tua demo).

9208eb1207211349.gif

Per eseguire la demo, segui le istruzioni riportate di seguito:

  1. Con la USB collegata, seleziona Tools -> Serial Monitor dal menu Arduino. Inizialmente si aprirà una schermata vuota senza output.

38e8d53652eb28f2.png

  1. Muovi il microcontrollore Arduino per tracciare con attenzione ciascuna delle forme sopra e verifica se il monitor seriale rileva il gesto.

60b8a0017bcae419.png

  1. Dall'output nel monitor seriale, notiamo che la bacchetta magica ha effettivamente rilevato tutte le forme. Noterai anche che il LED destro si accende.

7. Passaggi successivi

Congratulazioni, hai creato la tua prima "bacchetta magica" che riconosce i gesti su un microcontrollore Arduino.

Speriamo che questa breve introduzione allo sviluppo con TensorFlow Lite for Microcontrollers ti sia piaciuta. L'idea del deep learning sui microcontrollori è nuova ed entusiasmante e ti invitiamo a sperimentare.

Documenti di riferimento

647c3ef0dc103804.png

Grazie e buon divertimento con la creazione.