Vi presento MoodStream
Il modulo di riconoscimento delle emozioni in tempo reale per l'interazione uomo-AI
Scopri MoodStream qui: repository di MoodStream su GitHub
Importante: MoodStream è stato progettato e realizzato con l’unico scopo di essere utile alle persone: non per la sorveglianza, la profilazione o il controllo dei comportamenti, né per sostituire il ruolo delle persone. Il riconoscimento delle emozioni è una tecnologia potente e delicata, e usarla in modo responsabile significa consenso, trasparenza e limitazione delle finalità.

Per la maggior parte delle persone il linguaggio è il principale mezzo di comunicazione. È senza dubbio la forma più controllata e diffusa, eppure spesso sottovalutiamo il potere della comunicazione non verbale. Tutti noi ci affidiamo costantemente a essa, ma non siamo altrettanto abili a trasmetterla quanto lo siamo con le parole. Espressioni facciali, gesti, postura, contatto visivo, prossemica, tono di voce e microespressioni sono tutti esempi di comunicazione non verbale: inviamo tutti questi segnali contemporaneamente, per lo più senza pensarci.
Ora pensa a come comunichiamo con le macchine.
Le macchine sono ovunque intorno a noi, sulla scrivania, in tasca, e si integrano in modo sempre più naturale nelle nostre vite. Arriverà un giorno, e non credo sia lontano, in cui i robot, umanoidi o meno, faranno parte della nostra quotidianità. Ci aiuteranno con le faccende di casa, faranno piccole riparazioni e magari diventeranno persino qualcuno con cui parlare senza sentirsi giudicati, come molte persone fanno già con gli AI chatbot. Qualunque sia il compito, dovrai interagire con queste macchine. Il loro cervello sarà molto probabilmente basato su LLM che ricevono ciò che dici sotto forma di testo trascritto.
Tuttavia, il tuo futuro robot non saprà se sei arrabbiato, triste, in ansia o semplicemente esausto, perché riceverà solo le parole che hai scelto di dire, parole che puoi selezionare con cura per nascondere ciò che provi davvero. Sarà incredibilmente facile ingannarlo e, di conseguenza, non sarà in grado di adattare il suo comportamento, il tono o le risposte a ciò di cui hai realmente bisogno.
MoodStream nasce per colmare questa lacuna.
È un modulo open source che classifica in tempo reale la tua espressione facciale e trasmette il tuo stato emotivo attraverso una pipeline, così che altri sistemi possano usarlo. Il tuo robot, la tua applicazione, la tua dashboard, il tuo strumento di ricerca ricevono una versione più sincera di te, che comunica non solo ciò che dici, ma anche ciò che il tuo volto rivela sul tuo stato emotivo mentre lo dici.
L’emozione rilevata può essere visualizzata su una dashboard in tempo reale e i dati vengono salvati in un database per analisi successive. MoodStream è pensato per funzionare su hardware con risorse limitate, come una piccola telecamera montata su un robot, ma funziona anche sul tuo laptop con una normale webcam.
Come funziona
Il sistema è costruito come una pipeline di piccole fasi indipendenti: ognuna svolge un solo compito e passa il proprio output alla successiva.
Ecco il percorso completo di un singolo frame video:
- Acquisizione. Un frame viene acquisito da una sorgente video: una webcam tramite OpenCV, un modulo camera embedded (OpenMV Cam H7+) collegato via UART, oppure una sorgente sintetica per i test. La sorgente attiva viene scelta all’avvio tramite flag da CLI.
- Face detection. Il frame viene convertito in scala di grigi e passato a un classificatore Haar Cascade, che individua uno o più volti e ne restituisce le bounding box. Se non viene trovato alcun volto, il ciclo passa semplicemente al frame successivo.
- Ritaglio e preprocessing. Ogni volto rilevato viene ritagliato, ridimensionato a 48×48 pixel e normalizzato in [0, 1] come float32. Poiché a questo punto l’input è già in scala di grigi, il reshape finale aggiunge solo le dimensioni di batch e di canale attese dal modello (
1, 48, 48, 1). - Classificazione dell’emozione. Il volto preprocessato viene passato a una CNN TFLite quantizzata, che restituisce una distribuzione di probabilità softmax su 6 classi di emozioni (felicità, tristezza, rabbia, neutralità, sorpresa, paura). Vengono restituite la classe principale e il relativo punteggio di confidenza; il resto della distribuzione non viene inoltrato.
- Pubblicazione. L’etichetta dell’emozione viene pubblicata come messaggio MQTT su un broker Mosquitto. Da lì Node-RED la riceve, la arricchisce con un timestamp e un’emoji e la smista verso due destinazioni: InfluxDB per la persistenza come serie temporale e Grafana per la visualizzazione in tempo reale.

Broker, Node-RED, InfluxDB e Grafana girano tutti come container Docker, quindi l’unica dipendenza necessaria sulla macchina host è Python. Un singolo docker compose up avvia l’intero stack. Inoltre, dato che ogni fase è disaccoppiata, puoi sostituirne una qualsiasi senza riscrivere le altre. Per esempio, se vuoi un face detector diverso puoi collegarlo, oppure, se vuoi inviare l’output al controller comportamentale di un robot invece che a una dashboard, puoi aggiungere un altro consumer nella fase di pubblicazione.
Modello e dati di training
Il modello attuale è una rete neurale convoluzionale leggera addestrata su FER2013, un dataset pubblico di circa 35.000 immagini di volti in scala di grigi a 48×48. La classe Disgust del dataset originale è esclusa, quindi restano sei classi: rabbia, paura, felicità, tristezza, sorpresa e neutralità. Il modello è esportato in TensorFlow Lite (quantizzato in float16), il che mantiene l’inferenza veloce e l’occupazione di memoria ridotta: abbastanza veloce da girare in tempo reale su CPU, senza bisogno di una GPU.
Su un validation set separato raggiunge un’accuratezza complessiva del 62,9%. Per contestualizzare: FER2013 è un benchmark notoriamente rumoroso, e gli stessi annotatori umani arrivano solo al ~65%, perché molte immagini sono per loro natura ambigue o etichettate in modo errato. Questo colloca il modello di MoodStream pienamente nel territorio delle prestazioni umane.
Nonostante i limiti, il modello è abbastanza buono da essere utile e funzionante: provalo tu stesso.
Versatilità hardware
MoodStream funziona su qualsiasi macchina dotata di una telecamera: sia la webcam integrata di un laptop sia una telecamera USB esterna funzionano subito tramite VideoCapture di OpenCV. L’unico vero requisito hardware è una CPU, senza bisogno di GPU. TFLite mantiene il modello abbastanza piccolo da eseguire l’inferenza in tempo reale su hardware comune, e il preprocessing ridimensiona il ritaglio del volto all’input fisso di 48×48 indipendentemente dalla risoluzione nativa della telecamera, quindi la dimensione del frame non conta.
Esiste anche un percorso embedded separato per l’OpenMV Cam H7+, che esegue un proprio firmware on-device e trasmette i risultati via UART invece di eseguire la pipeline Python.
Questo è importante perché una soluzione che funziona solo su una workstation potente non finirà mai dentro un robot di assistenza, uno strumento didattico o un dispositivo di monitoraggio a basso costo in una struttura di cura.
Dove MoodStream può aiutare oggi
Mentre sviluppavo MoodStream, avevo in mente alcuni scenari concreti in cui un sistema di questo tipo può offrire un valore reale alle persone.
-
Istruzione. Aiutare i bambini a riconoscere e dare un nome alle proprie emozioni, e a riconoscerle negli altri, è una delle competenze di base dell’intelligenza emotiva. MoodStream potrebbe alimentare strumenti educativi che trasformano tutto questo in un’esperienza visiva e interattiva: il bambino fa una faccia, il sistema dà un nome all’emozione e il bambino impara ad associare la sensazione all’etichetta.
-
Sanità e salute mentale. Individuare per tempo i segnali di disagio può salvare vite. Le persone che soffrono di depressione, isolamento o pensieri suicidi spesso nascondono ciò che provano, soprattutto a parole. Un sistema di monitoraggio non invasivo in una struttura di cura, in un contesto terapeutico o in una residenza assistita potrebbe segnalare un peggioramento emotivo prima che diventi una crisi.
Roadmap
MoodStream potrebbe evolvere in qualcosa di più ambizioso, e durante lo sviluppo ho pensato ad alcuni possibili miglioramenti.
- Un dataset di training migliore. Passare ad AffectNet, un dataset molto più grande (circa 400.000 immagini) raccolto in condizioni reali, dovrebbe migliorare sensibilmente l’accuratezza e ridurre il divario tra le condizioni di training e l’uso effettivo con una webcam.
- Oltre il volto. Il volto è solo uno dei canali non verbali. Il passo successivo è il linguaggio del corpo, con pose estimation e body segmentation per catturare postura, gesti e atteggiamento. Questo avvicinerebbe molto MoodStream a un livello completo di comprensione della comunicazione non verbale.
- Un livello etico. Un modulo integrato che ispeziona ogni input e output di un’interazione uomo-macchina, individuando potenziali abusi e segnalandoli. Questo livello potrebbe essere progettato per essere riutilizzabile in altri sistemi di AI che operano in contesti sensibili, non solo in MoodStream.
- Storico dell’umore. Salvare gli stati emotivi nel tempo trasforma i dati da un flusso a un segnale. Potrebbero emergere degli andamenti capaci di offrire alle persone indicazioni davvero utili sul proprio benessere.
Provalo!
MoodStream è open source e pensato per essere facile da avviare. Se stai leggendo da un laptop con una webcam, puoi avere la dashboard in tempo reale funzionante in pochi minuti. Clona il repository, esegui docker compose up per avviare lo stack, lancia la pipeline Python, punta la telecamera verso il tuo volto e guarda cosa vede.
Mi farebbe piacere ricevere feedback e contributi: fammi sapere se ti ha suscitato riflessioni o idee!