Il nome Pete Warden alla maggior parte dei lettori potrebbe non dire molto, ma questo ex ingegnere di Google è ampiamente considerato uno dei padri fondatori della tecnologia TinyML. Recentemente, dopo aver lasciato Google, ha formato una startup per sviluppare moduli sensore abilitati all'Intelligenza Artificiale. Useful Sensors, il nome della nuova startup, si pone come obiettivo quello di portare le capacità dell'Intelligenza Artificiale nei sensori per l'elettronica di consumo e gli elettrodomestici. In questo articolo, andremo a presentare il primo prodotto dell'azienda denominato Person Sensor, un sensore rilevatore di persone, e descriveremo un esempio applicativo.
Introduzione
L'esecuzione di algoritmi di apprendimento automatico su piccoli dispositivi di edge computing sta rivoluzionando ciò che è possibile fare con i gadget elettronici. Riconoscere una persona, chiamare automaticamente i servizi di emergenza dopo un incidente d'auto o rilevare quando una persona anziana è caduta, sono ora funzionalità comuni integrate nei dispositivi alimentati da microcontrollori. Ma queste tecnologie non vengono utilizzate a pieno vantaggio a causa delle complessità che riguardano la costruzione, l'addestramento e l'implementazione di un modello di Machine Learning. Fortunatamente, ci sono diversi modi per affrontare questa complessità e rendere queste tecniche più accessibili a tutti. Un approccio che viene sempre più esplorato è costruire gli algoritmi direttamente in un sensore.
Pete Warden è l'autore, insieme a Daniel Situnayake, di un testo diventato ormai di culto tra coloro che si interessano di Intelligenza Artificiale periferica e intitolato proprio "TinyML" (Figura 1).
TinyML si riferisce all'Intelligenza Artificiale o all'apprendimento automatico (ML) in esecuzione su dispositivi con risorse limitate, in genere microcontrollori. Nonostante il lavoro del team di Warden, presso Google, per sviluppare il framework ML open source TensorFlow Lite per microcontrollori, l'adozione della tecnologia da parte dei produttori di beni di consumo è ancora piuttosto lenta.
Con la sua nuova startup, denominata Useful Sensors, Warden mira a fornire ai produttori di elettronica di consumo e di elettrodomestici qualcosa che non richieda una personalizzazione significativa, ma che possa essere pronta all'uso per risolvere un problema specifico.
Il primo prodotto dell'azienda è un sensore rilevatore di persone, denominato Person Sensor, e riportato in Figura 2.
Si tratta di una scheda dal costo di 10$ e di dimensioni 20 x 20 mm con una fotocamera sul davanti e un microcontrollore sul retro. La scheda ha due uscite: un singolo pin che va in alto quando viene rilevata una persona, più un'interfaccia I2C per lo scambio di informazioni, come la posizione delle persone all'interno dell'inquadratura della telecamera, se la persona sta guardando il dispositivo e il riconoscimento facciale di base (sufficiente per distinguere tra i membri della famiglia che usano lo stesso dispositivo).
Non è necessaria alcuna sapienza tecnica particolare per utilizzare questo sensore pre-programmato. Basta accenderlo e puntare la fotocamera. I risultati vengono trasmessi su I2C tramite un'interfaccia Qwiic. Queste informazioni diranno all'utente quanti volti sono stati rilevati e dove sono rispetto al dispositivo.
Il sensore risulta facile da incorporare in dispositivi più grandi che vengono "svegliati" quando una persona si avvicina, che disattivano un microfono quando nessuno è presente o che personalizzano le esperienze per ogni utente. Sono disponibili diversi tutorial per aiutare i nuovi utenti a integrare il sensore nei propri progetti, sia che desiderino bloccare automaticamente lo schermo del laptop o integrare il sensore nelle proprie build utilizzando un Raspberry Pi, Arduino, Raspberry Pi Pico o CircuitPython.
Il focus della startup non è lo sviluppo di nuovi chip, ma la creazione di set di dati e lo sviluppo di modelli per quelle aziende che non hanno dimestichezza con le tematiche del TinyML, in modo da fornire soluzioni pronte all'uso.
Applicazione
Il Person Sensor è un piccolo modulo hardware a basso costo che rileva i volti delle persone vicine e restituisce informazioni su quanti ce ne sono, dove sono rispetto al dispositivo ed esegue il riconoscimento facciale. È progettato per essere utilizzato come input per un sistema più ampio e questo esempio mostra come utilizzarlo per bloccare automaticamente lo schermo del laptop quando ci si allontana e ridurre a icona la finestra corrente se qualcuno osserva da dietro le spalle.
I componenti hardware utilizzati per il progetto sono:
- una scheda Adafruit Trinkey QT2040
- un cavo di collegamento SparkFun Qwiic
- la scheda di Useful Sensors Person Sensor
Adafruit Trinkey QT2040
Trinkey QT2040 è un circuito stampato con al centro un microcontrollore RP2040 e connettore Stemma QT.
Il PCB è progettato per essere inserito in qualsiasi porta USB A di un computer o laptop. C'è un microcontrollore RP2040 a bordo, un LED RGB NeoPixel, un tasto reset e uno di bootloader (personalizzabile come tasto utente) e una porta STEMMA QT. La scheda viene fornita con 8 MB di memoria flash QSPI.
Caratteristiche principali:
- Connettore USB di tipo A con PCB extra spesso da inserire in una porta host USB
- RP2040 32-bit Cortex M0+ dual-core in esecuzione a ~125 MHz con logica e alimentazione a 3,3 V
- 264 KB RAM
- Chip SPI FLASH da 8 MB per l'archiviazione di file e l'archiviazione del codice CircuitPython/MicroPython. Nessuna EEPROM
- USB nativa supportata da ogni sistema operativo: può essere utilizzata come console seriale USB, MIDI, tastiera/mouse HID, o anche come una piccola unità disco per la memorizzazione di script Python.
- Può essere usato con MicroPython o CircuitPython
- LED RGB NeoPixel
- Porta STEMMA QT / Qwiic per connettività I2C
- Regolatore 3.3V con 600mA di corrente di picco
- Cristallo 12MHz
- Pulsante Reset e pulsanti di selezione Bootloader per riavvii rapidi (nessun stacca e ricollega per rilanciare il codice)
- Il pulsante Bootloader può essere utilizzato in sicurezza anche nel codice "utente"
I connettori STEMMA (tecnicamente chiamati connettori JST PH a 3 e 4 pin) sono un modo di semplificare il plug-and-play di vari sensori e dispositivi senza troppi cablaggi. L'idea è che avendo cavi facili da collegare, si possono collegare i dispositivi senza saldature, cavetti e complessità.
STEMMA QT (4 pin JST SH) sono connettori più piccoli con passo da 1,0 mm e sono pensati per l'uso di I2C quando i connettori JST PH più grandi (passo da 2,0 mm) non si adattano a una piccola scheda sensore.
Il sistema Qwiic Connect di SparkFun utilizza connettori JST a 4 pin per interfacciare rapidamente le schede di sviluppo con sensori, LCD, relè e altro ancora. Ciò significa che un cavo di collegamento Qwiic e un connettore STEMMA QT sono compatibili.
Il Person Sensor trasmette su I2C tramite un'interfaccia Qwiic, quindi risulta indispensabile utilizzare un cavo Qwiic per collegare la scheda sensore Person Sensor con il Trinkey QT2040.
Sviluppo
Per iniziare, collegare la porta del sensore all'estremità del Trinkey utilizzando il cavo Qwiic. Quindi, premere il pulsante di avvio sul Trinkey mentre lo si collega a una porta USB del laptop. Questo dovrebbe aprire un'unità RPI-RP2 nel visualizzatore di file.
C'è una guida passo passo per installare CircuitPython su un Trinkey, ma il succo del discorso è che occorre scaricare CircuitPython per Trinkey (Link per scaricare) e copiarlo sull'unità RPI-RP2.
Per chi non avesse mai sentito parlare di CircuitPython, analizziamo brevemente le differenze con MicroPython. In MicroPython, Python resta sostanzialmente invariato a parte la funzionalità aggiunta per interfacciarsi con l'hardware. CircuitPython è un derivato di MicroPython che cambia alcune cose per rendere il linguaggio più facile da imparare e da usare. CircuitPython è creato e mantenuto da Adafruit. È un derivato open source adatto per la didattica su MicroPython. CircuitPython è supportato sulle schede di sviluppo per l'educazione di Adafruit. Gli aggiornamenti di MicroPython vengono implementati anche su CircuitPython.
Una volta completata la copia, dovrebbe apparire una nuova unità CIRCUITPYTHON.
L'applicazione funziona emulando una tastiera che invia la pressione di un tasto alla macchina per comandare il blocco dello schermo o ridurre a icona la finestra principale. Adesso, quindi, c'è bisogno della libreria adafruit_hid per eseguire l'emulazione della tastiera. Il primo passo è scaricare un grosso pacchetto di tutte le librerie CircuitPython da circuitpython.org/libraries. Occorre trovare il pacchetto giusto per la propria versione di CircuitPython.
Una volta scaricato, decomprimere il pacchetto sul proprio computer locale. Nel visualizzatore di file, andando alla cartella lib, all'interno del pacchetto decompresso, occorre copiare la directory adafruit_hid nella cartella lib sull'unità CIRCUITPYTHON. Questo dovrebbe installare la libreria di cui abbiamo bisogno per emulare una tastiera.
Ora, è necessario il codice CircuitPython per controllare il sensore e bloccare lo schermo se necessario. Se si ha familiarità con git, si può utilizzare la riga di comando per clonare il repository github.com/usefulsensors/person_sensor_screen_lock. In caso contrario, si può semplicemente scaricare il codice come archivio ZIP da questo link e decomprimerlo sul proprio computer.
Su Windows, il codice dovrebbe funzionare senza modifiche. Su MacOS o Linux occorre modificare quali chiavi vengono inviate per bloccare lo schermo. Guardando alla fine di code.py, si dovrebbero vedere le opzioni commentate per i diversi sistemi operativi. Basta aprire il file in un editor di testo e aggiungere un # prima della riga di Windows e rimuovere il # prima della riga per il proprio sistema operativo.
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2350 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.