Le fondamenta

Prima ancora del deep learning "in tempo reale": la computer vision classica

La computer vision è il ramo dell'intelligenza artificiale che permette alle macchine di elaborare, analizzare e comprendere immagini e video — un campo di ricerca molto più vecchio dell'AI generativa e degli LLM multimodali di oggi. Prima di raccontare i due progetti che abbiamo costruito davvero — il Theremin virtuale (una forma di pose estimation applicata alle mani) ed EmoLens (una forma di classificazione applicata alle micro-espressioni del volto) — vale la pena guardare la mappa completa dei compiti che questo campo affronta: sono entrambi, in fondo, casi particolari di questa tassonomia più generale.

Compiti su una singola immagine

01 — Classificazione
01 — Classificazione

"Cosa c'è in questa foto?"

Assegna un'etichetta a un'intera immagine scegliendo tra un insieme predefinito di classi (es. "persona", "auto"). È il compito più semplice e il primo su cui le reti convoluzionali hanno superato le prestazioni umane, un decennio prima dei transformer.

02 — Identificazione
02 — Identificazione

"Chi è questa persona?"

Non basta riconoscere "è un volto umano" (classificazione): bisogna riconoscere quale istanza specifica di quella classe — questa persona, non un'altra. È la base del riconoscimento facciale.

03 — Rilevamento
03 — Rilevamento

"Dove si trova, esattamente?"

Localizza uno o più elementi in un'immagine con un riquadro di delimitazione. Spesso è una fase preliminare: rilevare un volto prima di analizzarlo, o un componente danneggiato prima di classificarne il guasto. È il compito centrale di strumenti come YOLO e Detectron2.

04 — Segmentazione
04 — Segmentazione

"Quali pixel, esattamente?"

Non un riquadro ma una maschera pixel-per-pixel. La segmentazione di oggetti restituisce una maschera per classe (tutti i pixel "auto"); la segmentazione di istanze una maschera diversa per ogni singola auto riconosciuta — un compito in cui le reti neurali sono ancora lontane dalla precisione del cervello umano.

05 — Pose estimation
05 — Pose estimation

"Come è orientato/posizionato?"

Per oggetti rigidi, la posizione e l'orientamento nello spazio 3D rispetto alla telecamera (utile per la robotica). Per corpi umani, la posizione delle parti del corpo l'una rispetto all'altra — esattamente il compito che MediaPipe Hands risolve per il nostro Theremin, solo applicato alle mani invece che all'intero corpo.

Compiti su un flusso video

La visione artificiale non si ferma alla singola immagine: alcuni compiti richiedono di considerare una sequenza nel suo complesso, non fotogramma per fotogramma, per tenere conto della coerenza temporale. Il tracciamento localizza un elemento specifico lungo tutto il flusso video — potrebbe essere fatto applicando il rilevamento a ogni singolo fotogramma, ma è molto più efficiente usare i risultati dei fotogrammi precedenti per prevedere la posizione futura, sfruttando la continuità del movimento. Il riconoscimento di azioni va oltre: riconoscere un gesto o un movimento (ballare, disegnare un cerchio) richiede per definizione una sequenza continua, allo stesso modo in cui non si può capire una frase da parole isolate e disordinate. È il principio dietro il debouncer che usiamo nel Theremin per confermare un pugno chiuso solo dopo alcuni fotogrammi consecutivi, non da un singolo frame isolato.

E poi è arrivata l'AI generativa

Gli stessi compiti, un'interfaccia completamente diversa

Fino a pochi anni fa, ciascuno di questi cinque compiti richiedeva un modello dedicato, addestrato su un dataset specifico per quel compito. Gli LLM multimodali cambiano l'interfaccia: un solo modello, un prompt in linguaggio naturale, e la risposta arriva come testo libero invece che come classe/riquadro/maschera strutturati. In SOLVEIAGENTS (https://blog.solvei.it/blog/solveiagents-medilog.html) questo si traduce in due agenti — agent-image e agent-medical — che interpretano il contenuto di un'immagine qualunque su richiesta, senza che nessuno abbia addestrato un modello apposta per quel task specifico. Tre esempi reali, presi dall'uso quotidiano della piattaforma.

descrivi questa immagine
Foto del corridoio ospedaliero usata come input per agent-image
La foto originale usata come input

Nessuna classe predefinita, nessun riquadro di delimitazione: il modello descrive soggetti, sfondo, colori dominanti, composizione e persino il testo leggibile su un cartello nel corridoio — un compito che avrebbe richiesto la combinazione di almeno quattro modelli specializzati (rilevamento persone, riconoscimento colori, OCR, stima della profondità) fino a pochi anni fa.

Risposta di agent-image
Soggetto principale

In primo piano (sinistra): una donna con capelli biondi raccolti in trecce, completo da infermiera blu scuro, tessera identificativa. Seduta a un tavolo, mano destra sul tastierino del computer, l'altra appoggiata al mento in un gesto riflessivo. Sul tavolo documenti sparsi, un monitor con dati medici, un telefono fisso, penne.

Al centro: un uomo con capelli scuri, completo da infermiere azzurro chiaro, cammina verso destra tenendo in mano un foglio.

A destra (primo piano): una donna con capelli corti grigi, completo verde acqua, spinge un carrello medico pieno di pacchi e documenti, tablet in mano.

Sfondo

Il corridoio si estende verso l'interno, illuminato da luci fluorescenti. Sulla parete sinistra un cartello: "Ambulatori Cardiologia Degenza / Chirurgia". Sullo sfondo altre persone in uniforme medica e un uomo con vestito scuro e cravatta, probabilmente personale amministrativo.

Colori dominanti

Tonalità cliniche — azzurri, verdi, grigi, bianchi — con i colori delle uniformi (blu scuro, azzurro chiaro, verde acqua) predominanti sulle tonalità neutre di pareti e pavimento. La luce fluorescente bianca contribuisce all'atmosfera fredda tipica di un ambiente ospedaliero.

Composizione

Prospettiva a "sfondo profondamente ricavato", con l'area del tavolo in primo piano come punto focale mentre il corridoio si allunga creando profondità. I tre soggetti sono distribuiti in modo dinamico: attività lavorativa, movimento, azione operativa.

Testi leggibili

Sul cartello: "Ambulatori Cardiologia Degenza / Chirurgia", chiaro e ben visibile. Nessun altro elemento testuale rilevante (niente scrittura leggibile su schermo o documenti).

Elementi rilevanti

Oggetti medici e amministrativi (carrello, monitor, documenti, penne); ambientazione clinica tipica (illuminazione fluorescente, pareti neutre, corridoio lungo); movimento umano dinamico che riflette l'attività quotidiana dei professionisti sanitari.

Lo stesso agente si presta anche a un uso più insolito — l'analisi grafologica di un appunto scritto a mano:

fai una analisi calligrafica della immagine allegata e tratteggia il carattere dello scrivente
Appunto scritto a mano usato come input per l'analisi grafologica
L'appunto originale usato come input
Risposta di agent-image
Descrizione dell'immagine

Un foglio di carta bianca, probabilmente un blocco per appunti, appoggiato su una superficie scura di legno. Il testo è scritto a mano con una penna a inchiostro nero: un elenco di note tecniche organizzate in punti, con predominanza di termini informatici e acronimi.

Pressione

Osservazione: costante e media, senza forti variazioni di spessore nel tratto, a eccezione di alcuni tratti finali più leggeri.

Interpretazione: equilibrio emotivo e controllo razionale, nessun segno di impulsività aggressiva né di estrema fragilità.

Dimensione

Osservazione: scrittura di dimensioni medie, con tendenza alla compattezza specialmente nelle parole tecniche ("GLM-OCR", "LM-STUDIO").

Interpretazione: persona adattabile, senso di misura, preferisce l'efficienza alla teatralità.

Inclinazione

Osservazione: prevalentemente verticale, con lievi oscillazioni verso destra in alcune parole.

Interpretazione: predominio della ragione sull'emozione — tratto tipico di chi è analitico e orientato all'obiettivo.

Ritmo e regolarità

Osservazione: ritmo rapido e funzionale; lettere non perfettamente formate ma coerenti, con semplificazione di alcuni tratti per velocizzare la scrittura.

Interpretazione: mente rapida e pragmatica, che privilegia contenuto e velocità di acquisizione rispetto alla forma estetica.

Connessioni tra lettere

Osservazione: lettere sciolte o collegate in modo intermittente, scrittura "ibrida" tra stampato e corsivo.

Interpretazione: pensiero sintetico, intelligenza che procede per blocchi logici piuttosto che per flussi emotivi continui.

Margini e spaziatura

Osservazione: margini a sinistra rispettati ma irregolari; spaziatura ampia e ariosa tra le righe, variabile tra le parole.

Interpretazione: metodo di lavoro schematico, abitudine a lasciare spazio per integrazioni future — tipico di chi pianifica processi tecnici.

Profilo sintetico

Profilo fortemente orientato alla razionalità, alla pragmatica e all'efficienza: una mentalità analitica, abituata a gestire flussi di informazioni complessi. Nessuno spazio per l'ornamento o l'emotività superficiale — un profilo tecnico/professionale, disciplinato ma rapido, capace di sintesi e con un forte controllo di sé.

Testo estratto (OCR)
GLM-OCR modello local per trasformare PDF "sporco" in .md "pulito"
FARE WEB APP che consente di trascinare PDF e ottenere markdown scorribile
OLLAMA LM-STUDIO - VLLM sono MODEL RUNNERS
EMBEDDING GEMMA — skills.sh
AGENTI - WEB APP per PDF/DOCX/XLSX/PPTX → .MD — LLM-WIKI

agent-medical applica lo stesso principio in ambito clinico, con un modello diverso e un prompt di sistema orientato alla diagnostica per immagini:

Analizza l'immagine allegata che contiene una RX torace tratta dal web e fai una diagnosi
Radiografia del torace usata come esempio per agent-medical
La RX torace usata come input — presa dal web solo a scopo dimostrativo, non un caso clinico reale
Risposta di agent-medical
Descrizione dell'immagine

Sede: torace, vista anteriore-posteriore (PA).

Morfologia: struttura ossea completa (scapole, clavicole, coste) con bordi ben definiti; cuore posizionato centralmente, rapporto cardio-toracico normale (≤50%); polmoni con opacità segmentali nell'area inferiore destra e sinistra, suggerendo infiltrazione parenchimale.

Bordi: le opacità hanno margini irregolari e non delimitati, tipici di processi infiammatori.

Segni clinici rilevanti

Presenza di opacità segmentali e distribuzione focalizzata suggerisce un processo infettivo, come una polmonite. Nessun segno di pleurite (costofrenico non blunting), né di effusione pleurica o pneumotorace.

Diagnosi differenziale
Probabilità più alta

Polmonite batterica (es. Streptococcus pneumoniae) — opacità segmentale tipica, distribuzione focale, frequente nell'area inferiore.

Probabilità moderata

Tubercolosi polmonare — richiederebbe esami complementari (test di tubercolina o TC) per essere confermata o esclusa.

Probabilità ridotta

Infiammazione cronica (asma severo o sindrome da infiammazione respiratoria) — di norma associata a sintomi persistenti, non a opacità segmentali così marcate.

Nota generata dall'agente stessa, per design del prompt di sistema: queste informazioni non sostituiscono il parere di un medico professionista.
Il punto di partenza

Da un flusso di pixel a un significato

Una webcam, di per sé, non "vede" niente: cattura un flusso di numeri — trenta volte al secondo, un milione di pixel a botta, ciascuno con tre valori di colore. Il lavoro interessante comincia dopo, quando quel flusso di numeri viene trasformato in qualcosa che ha significato per una persona: questa è una mano, sta indicando lì; questo è un volto, e sta per sorridere davvero — non solo con la bocca.

Negli ultimi anni questo passaggio — da pixel a significato — è diventato accessibile a chiunque abbia un laptop, grazie a un pugno di librerie open source mature che fanno il lavoro sporco (rilevare un volto, tracciare uno scheletro di mano, stimare una posa) lasciando al resto del codice il compito di decidere cosa farne. In questo articolo raccontiamo lo stato dell'arte di questi strumenti attraverso tre progetti concreti nati in casa nostra: uno già suonato dal vivo, uno già in produzione, e uno che per ora è solo un piano molto dettagliato scritto in un file Markdown.

Stato dell'arte

Cosa può vedere oggi una webcam qualunque

Semplificando parecchio, il riconoscimento visivo basato su volti/mani/corpi si divide in due famiglie di problemi, spesso confuse tra loro ma concettualmente molto diverse. La prima è la geometria: dove sono, nello spazio, i punti che compongono una mano, un volto, uno scheletro — coordinate, distanze, angoli. La seconda è la semantica: cosa significa quella geometria — questa configurazione di muscoli facciali è un sorriso genuino o di circostanza, questo movimento del polso è uno smash o un lob. I due strumenti open source più maturi disponibili oggi coprono, non a caso, esattamente queste due famiglie.

Geometria

MediaPipe

  • 468 punti sul volto (Face Mesh), 21 per mano (Hands), 33 sullo scheletro (Pose)
  • Modelli leggerissimi (BlazeFace/BlazePose), pensati per girare in tempo reale su CPU
  • Gira nel browser via WebAssembly + WebGL — nessun server necessario
  • Nessuna nozione di "emozione" o "intenzione": solo coordinate
Progetto solveiAgentsTheremin virtuale, PoseOverlay in EmoLens (client-side)
Semantica

py-feat

  • Rileva Action Unit facciali (intensità per singolo muscolo) ed emozioni
  • Wrappa più reti neurali pretrained (RetinaFace, modelli di regressione AU)
  • Nato in ambito accademico (Dartmouth) per implementare la metodologia FACS
  • Più pesante: pensato per girare su server, non nel browser
Progetto solveiAgentsEmoLens (analisi immagine/video/webcam)
⚙️ Un cambio d'epoca silenzioso

Fino a pochi anni fa, un pipeline decente di riconoscimento facciale richiedeva un server con GPU e un modello proprietario a pagamento. Oggi MediaPipe gira in un tab del browser sul telefono di chiunque, e py-feat automatizza un compito che fino agli anni 2000 richiedeva mesi di addestramento umano specializzato (lo vediamo più avanti, parlando di FACS). Il salto non è solo di prestazioni: è di accessibilità.

Primo caso di studio

Il Theremin virtuale: suonare l'aria con una webcam

Il primo progetto che abbiamo costruito nella "palestra tecnologica" SOLVEI è un prototipo che trasforma il movimento delle mani davanti a una webcam in suono, ricreando digitalmente uno degli strumenti musicali più strani e affascinanti mai inventati — il theremin. Per capire perché è un caso di studio perfetto per parlare di riconoscimento gestuale, bisogna prima raccontare chi lo ha inventato: perché la storia del suo inventore è, quasi letteralmente, più incredibile del suo strumento.

Lev Termen, l'uomo che suonava il vuoto

Lev Sergeevič Termen — in Occidente conosciuto come Léon Theremin — nasce a San Pietroburgo nel 1896. Studia fisica e, in parallelo, violoncello: una combinazione che si rivelerà decisiva. All'inizio degli anni '20, mentre lavora su sensori di prossimità per misurare la densità dei gas, nota un effetto collaterale curioso: avvicinando la mano a un circuito oscillante ad alta frequenza, la frequenza stessa cambia in modo udibile. Invece di considerarlo un rumore di fondo, ci costruisce sopra uno strumento musicale.

Lev Termen suona il theremin
Lev Termen al theremin. Foto storica, dominio pubblico — Wikimedia Commons.

Il principio è di una semplicità elegante: due antenne, una verticale che controlla l'altezza della nota e una a cappio orizzontale che ne controlla il volume, ciascuna collegata a un oscillatore radio. La mano dell'esecutore, avvicinandosi o allontanandosi, altera la capacità elettrica del circuito e quindi la frequenza generata; due oscillatori vicini producono, per eterodina, una frequenza differenza udibile. Il risultato è spesso definito lo strumento musicale elettronico più antico ancora suonato oggi, ed è certamente il primo pensato per essere suonato senza alcun contatto fisico — puro gesto nello spazio, catturato da un campo elettromagnetico invece che da un microfono o una tastiera.

1920-21

Termen costruisce il primo theremin a Petrograd. Lo dimostra a Lenin in persona, che secondo la tradizione riesce a suonare "Il cigno" di Saint-Saëns al primo tentativo e lo abbraccia entusiasta.

1927-1938

Tournée europea, poi trasferimento a New York. Il brevetto viene concesso in licenza a RCA. Termen fonda una società, inventa il Terpsitone (un palco che genera musica dai passi di una ballerina) e, con il compositore Henry Cowell, il Rhythmicon — considerato uno dei primi drum machine della storia.

1938

Sommerso dai debiti della Grande Depressione e sposato da poco con Lavinia Williams, ballerina afroamericana (un matrimonio già scandaloso per l'alta società newyorkese segregata dell'epoca), Termen scompare da un giorno all'altro. Viene richiamato — di fatto rimpatriato con la forza — in Unione Sovietica, senza che la moglie sappia più nulla di lui per decenni.

Anni '40

Condannato ai lavori forzati, viene poi trasferito in una sharashka — un laboratorio-prigione dell'NKVD — dove è costretto a mettere il suo talento al servizio dello spionaggio sovietico. Inventa "The Thing": un microfono passivo nascosto dentro una riproduzione lignea dello stemma USA, donata all'ambasciatore americano a Mosca nel 1945. Resterà lì, in ascolto, per sette anni prima di essere scoperto. Per questo lavoro riceve il Premio Stalin.

1964-67

Riabilitato durante il disgelo chruščëviano, lavora al Conservatorio di Mosca costruendo nuovi strumenti elettronici — finché una campagna sovietica contro la musica "formalista" non pone fine anche a questo capitolo.

1991

Riscoperto da giornalisti occidentali dopo decenni di oblio, riceve la visita a Mosca di Robert Moog — il padre del sintetizzatore moderno, che da giovane costruiva e vendeva theremin — e torna per un'ultima volta negli Stati Uniti, a 95 anni, per rivedere la sua allieva più celebre, Clara Rockmore.

1993

Muore a Mosca, a 97 anni. La sua storia — fisico, musicista, spia, prigioniero, riabilitato — è raccontata nel documentario Theremin: An Electronic Odyssey (1993).

Un fisico che inventa uno strumento suonabile senza toccarlo, lo porta in tournée nell'America del jazz, viene rapito dai servizi segreti del proprio paese, e con lo stesso talento con cui faceva musica costruisce microspie per il KGB. Poche biografie tecnologiche reggono il confronto.

Il theremin, insomma, è probabilmente il primo esempio di riconoscimento gestuale della storia — analogico, fatto di antenne e capacità elettrica invece che di reti neurali, ma concettualmente identico a quello che facciamo oggi con una webcam: trasformare la posizione di una mano nello spazio in un parametro continuo, in tempo reale.

La versione digitale: MediaPipe al posto del campo elettromagnetico

Il nostro Theremin virtuale sostituisce le due antenne con MediaPipe Hands: la webcam cattura il flusso video, MediaPipe estrae 21 punti di riferimento per ciascuna mano rilevata (nocche, punte delle dita, palmo) a ogni fotogramma, e da quei punti calcoliamo le stesse due grandezze che Termen otteneva con la fisica pura — una distanza mano-camera che guida l'altezza della nota, una seconda distanza (tipicamente pollice-indice) che ne guida il volume. Il principio dello strumento non è cambiato in un secolo; è cambiato solo il modo in cui si cattura il gesto.

Pipeline del Theremin virtuale
Webcam
30 fps
MediaPipe Hands
21 landmark/mano
Calcolo distanze
pitch / volume
Sintesi audio
Web Audio API
🐛 Una lezione di ingegneria, non solo di musica

La prima versione dello strumento suonava con un ritardo percepibile e uno sfasamento fastidioso tra gesto e suono. La causa non era, come si sospettava all'inizio, la potenza di calcolo — era un accumulo di fotogrammi in attesa che cresceva silenziosamente, perché nulla rallentava l'acquisizione quando il resto del sistema non riusciva a stare al passo: ogni fotogramma nuovo veniva accodato anche se i precedenti non erano ancora stati processati, e il ritardo cresceva nel tempo invece di restare costante. La soluzione (un "frame gate" che scarta i fotogrammi in eccesso invece di accumularli) è un promemoria che spesso il collo di bottiglia in una pipeline video in tempo reale non è il modello — è la coda davanti al modello.

▶ Demo
Il Theremin virtuale suonato dal vivo
Come nell'originale di Termen, le due mani hanno ruoli distinti: la mano sinistra regola il volume, la mano destra modifica la sequenza delle note; stringere il pugno sinistro cambia la forma d'onda del suono. Questa demo riprende la versione 1 del prototipo: due mani, un pugno per cambiare forma d'onda, un range di poco più di sei ottave — cosa è cambiato da allora è raccontato più avanti, nella sezione "Versione attuale".

Versione attuale: da prototipo a strumento suonabile davvero

Dopo il primo test dal vivo, sono emersi i limiti tipici di ogni prototipo che funziona "in teoria": un range di poco più di sei ottave (troppo stretto per un pianoforte vero), un gesto di cambio forma d'onda che a volte scattava per sbaglio, e nessun riscontro visivo su quale nota si stesse effettivamente suonando. Ecco cosa è cambiato:

Range

88 tasti veri, non più 80

Da 27,5 Hz (La0) a 4.186,01 Hz (Do8) — l'intera estensione di un pianoforte acustico, non più fermata a metà tra Mi7 e Do8. La mappatura resta logaritmica: passi uguali di movimento della mano coprono lo stesso numero di ottave, non gli stessi Hz.

Layout

Due pannelli, non più uno

Webcam e controlli separati in due colonne invece di un overlay semitrasparente sopra il video — spazio dedicato per la tastiera a 88 tasti e il nome della nota, leggibili anche in fullscreen.

Gesto

Un pugno, letto per durata

Il tentativo iniziale di aggiungere un secondo gesto ("un dito esteso") per il toggle intonazione continua/discreta interferiva col pugno esistente — riaprire il pugno passa naturalmente per uno stato "un dito esteso". Sostituito con un solo gesto, distinto solo dalla durata della tenuta: pugno breve cicla la forma d'onda, pugno tenuto alterna intonazione continua/discreta.

Riscontro

Nome della nota e tastiera

In modalità discreta il suono si quantizza al semitono più vicino (12-TET) e il nome della nota compare in notazione italiana (Do, Do#, Re…); la tastiera a 88 tasti nel pannello evidenzia in tempo reale il tasto corrispondente.

Freeze

Pinch per "congelare" la nota

Un nuovo gesto sulla mano destra (pollice-indice, con isteresi a due soglie per non sfarfallare): tenendo il pinch chiuso il suono resta fisso mentre slider e tastiera continuano ad aggiornarsi in anteprima, così si può riposizionare la mano silenziosamente prima di "rilasciare" la nuova nota.

Sotto il cofano

Niente più arretrato di fotogrammi

Il ritardo percepito e il tracking che "continuava da solo" (mani già uscite dal frame, ma il backend ancora impegnato a elaborare fotogrammi vecchi) non era un problema di potenza di calcolo ma di un meccanismo mancante che rallentasse l'invio quando il sistema non riusciva a stare al passo — un frame gate ora garantisce al massimo un fotogramma in volo per volta, come già raccontato più sopra.

▶ Demo
Il Theremin virtuale, versione attuale
Rispetto alla demo di versione 1 più sopra: range esteso a 88 tasti, tastiera e nome nota visualizzati in tempo reale, gesto pugno-per-durata al posto di due gesti separati, e il nuovo pinch per congelare l'intonazione.
Dalle mani al volto
Secondo caso di studio

EmoLens: leggere un volto come un testo

Se il Theremin virtuale è un esercizio di geometria — conta la posizione della mano nello spazio, non il significato del gesto — EmoLens, il nostro agente di analisi facciale, si muove interamente nel territorio della semantica: non si limita a tracciare un volto, ma cerca di capire cosa quel volto sta comunicando. Per farlo si appoggia a una metodologia che non nasce nell'informatica, ma nella psicologia sperimentale di mezzo secolo fa.

FACS: cinquant'anni prima delle reti neurali

Negli anni '60, lo psicologo americano Paul Ekman, insieme a Wallace Friesen, affronta una domanda che sembra semplice e non lo è affatto: come si misura oggettivamente un'espressione facciale, senza che l'osservatore ci proietti sopra la propria interpretazione culturale? Partendo dal lavoro dell'anatomista svedese Carl-Herman Hjortsjö, che negli anni '60 aveva già catalogato i muscoli responsabili delle espressioni facciali, Ekman e Friesen costruiscono nel 1978 il Facial Action Coding System (FACS): una tassonomia anatomica di circa quaranta Action Unit (AU), ciascuna corrispondente al movimento di un muscolo o gruppo muscolare preciso del viso, del tutto indipendente da qualunque etichetta emotiva.

📖 Cos'è, esattamente, una Action Unit

Una AU non è "un sorriso" o "una smorfia di disgusto" — è un movimento muscolare atomico: AU6 è il sollevamento della guancia, AU12 è la trazione dell'angolo della bocca verso l'alto, AU9 è la rugosità del naso. Le emozioni riconoscibili emergono solo dalla combinazione di più AU. Un sorriso genuino ("di Duchenne") è AU6+AU12 insieme; un sorriso di circostanza è AU12 da solo, senza il coinvolgimento dei muscoli oculari — la differenza tra i due, impercettibile a uno sguardo distratto, diventa misurabile e ripetibile.

Il motivo per cui vale la pena misurarle con questa precisione è che le espressioni non sono un sottoprodotto passivo dell'emozione — fanno un lavoro comunicativo attivo: segnalano agli altri come ci sentiamo prima ancora che troviamo le parole, anticipano un'intenzione (uno sguardo di rabbia può precedere uno scontro), e regolano in tempo reale l'interazione — un sorriso invita, una fronte corrugata mette in guardia. E diverse emozioni si concentrano in zone diverse del viso: rabbia e paura si leggono soprattutto negli occhi e nelle sopracciglia (contratte e ravvicinate nella prima, sollevate e spalancate nella seconda), felicità e disgusto soprattutto in bocca e labbra, mentre le guance — sollevate solo nel sorriso genuino di Duchenne — sono il dettaglio che più spesso separa un'emozione vera da una recitata.

Ekman non si ferma alla tassonomia: negli stessi anni conduce studi sul campo con la tribù Fore della Papua Nuova Guinea, isolata da ogni contatto con i media occidentali, mostrando fotografie di espressioni facciali e chiedendo di associarle a situazioni emotive. I risultati sostengono l'ipotesi — controversa allora, tuttora dibattuta — che un piccolo nucleo di emozioni di base si esprima con configurazioni facciali universali, le stesse in ogni cultura: felicità, tristezza, rabbia, paura, sorpresa, disgusto, e — proposta più tardi da Ekman stesso e tuttora dibattuta in letteratura — il disprezzo, settima espressione candidata all'elenco.

👁️ La prova più convincente: chi non ha mai potuto vedere un volto

Gli studi cross-culturali restano esposti a un'obiezione ovvia: anche le comunità più isolate hanno, oggi, un minimo di contatto visivo con il resto del mondo. Una prova più netta viene da chi il volto altrui non lo ha mai potuto vedere in vita sua. Nel 2009 lo psicologo David Matsumoto — allievo diretto di Ekman — ha confrontato le espressioni spontanee di atleti di judo vedenti e non vedenti dalla nascita alle Olimpiadi e Paralimpiadi di Atene 2004, nell'istante esatto della vittoria o della sconfitta di un incontro. Le configurazioni muscolari coincidevano — stessa contrazione delle sopracciglia nella sconfitta, stesso sollevamento degli angoli della bocca nella vittoria — prodotte da persone che non avevano mai potuto imparare quei movimenti guardando il volto di qualcun altro. Se un'espressione fosse un comportamento imitato, chi nasce cieco semplicemente non potrebbe riprodurla; il fatto che la riproduca è l'argomento più solido a favore di un'origine biologica, cablata, non (solo) sociale.

Un'intuizione centrale del lavoro di Ekman

Il volto perde il controllo prima del resto del corpo: un'emozione vera, anche quando la si vuole nascondere, lascia una traccia muscolare — spesso per una frazione di secondo — prima che l'espressione "corretta" prenda il sopravvento. Ekman e Friesen documentano questo fenomeno studiando filmati di interviste cliniche, chiamandolo microespressione: un lampo involontario, sotto mezzo secondo, che rivela ciò che l'espressione dominante sta mascherando.

Per decenni, codificare un video con FACS è stato un lavoro artigianale: diventare FACS coder certificato richiede circa cento ore di addestramento e un esame di affidabilità — un investimento enorme per analizzare pochi minuti di filmato. È esattamente questo collo di bottiglia che gli strumenti open source moderni hanno eliminato.

Da FACS a EmoLens: cosa abbiamo effettivamente costruito

EmoLens si appoggia a py-feat (Python Facial Expression Analysis Toolbox), un progetto open source nato in ambito accademico che automatizza esattamente il lavoro di un FACS coder umano: rileva il volto (usiamo RetinaFace), individua i landmark facciali, e con reti neurali dedicate stima l'intensità di ciascuna Action Unit e la probabilità di ognuna delle emozioni di base. Deliberatamente non attiviamo i modelli di identità e sguardo che py-feat offre — non sono mai letti dall'interfaccia, e disattivarli riduce sensibilmente il tempo di analisi.

Pipeline EmoLens — dall'immagine all'emozione
Immagine / frame
RetinaFace
rilevamento volto
Landmark + AU
py-feat
Emozione
radar chart in UI

L'agente gira in tre modalità: immagine singola (analisi sincrona), webcam live (via WebSocket, con overlay disegnato in tempo reale nel frontend) e video caricato o da YouTube (job asincrono). Un secondo servizio, agent-emolens-gpu, dedicato e su GPU, spinge oltre il perimetro classico di FACS affrontando esattamente il fenomeno che Ekman aveva documentato negli anni '60: lo spotting delle microespressioni, cioè l'individuazione automatica delle tre fasi di un'espressione fugace — onset (l'inizio del movimento), apex (il picco) e offset (la dissoluzione) — per ciascuna Action Unit, su sequenze video ad alto frame-rate.

🎭 Un limite dichiarato, non nascosto

Due trasparenze che vale la pena mettere per iscritto. Primo: py-feat non riconosce il disprezzo, la settima emozione che parte della letteratura successiva a Ekman ha proposto di aggiungere alle sei originarie — è un limite fisso della libreria, non nostro. Secondo: l'euristica di spotting delle microespressioni non è ancora tarata su un dataset reale annotato da FACS coder umani — funziona, gira in produzione con fallback automatico GPU→CPU senza perdere un fotogramma, ma la sua accuratezza quantitativa resta da validare.

🔒 Privacy by design: cosa è stato fatto davvero

Analizzare volti tocca inevitabilmente dati sensibili. Ecco cosa è effettivamente in codice, non un elenco di intenzioni:

Sul piano normativo, due punti concreti. L'AI Act (art. 5) vieta il riconoscimento delle emozioni sul posto di lavoro e nelle istituzioni educative, salvo ristrette eccezioni mediche o di sicurezza — un limite d'uso, non di tecnologia: EmoLens non è pensato per quei contesti. Il GDPR (art. 9) tratta come dato biometrico "particolare" solo i dati trattati allo scopo di identificare univocamente una persona — disattivare identity/gaze non è quindi solo una scelta di performance, tiene il trattamento fuori da quella soglia più stringente.

▶ Demo
EmoLens all'opera
La pipeline della sezione precedente in azione: rilevamento del volto, Action Unit ed emozione stimata in tempo reale, con l'overlay disegnato nel frontend a partire dai dati restituiti dall'agente.
E poi?
Un piano, non ancora un prodotto

CourtIntelligence: dal volto al campo da gioco

Il terzo capitolo di questa storia esiste solo su carta — un documento di progettazione, non una riga di codice funzionante. Vale comunque la pena raccontarlo, perché mostra bene dove porta naturalmente questa stessa cassetta degli attrezzi una volta puntata non su un volto ma su un campo da gioco: CourtIntelligence, un agente pensato per estrarre statistiche da un video (offline, upload o URL) di una partita di beach tennis o padel — metri percorsi, velocità di giocatori e palla, conteggio dei colpi per tipo.

Il piano, nella sua versione più recente, combina strumenti che abbiamo già incontrato in questo articolo con altri specifici del dominio sportivo: YOLOv8 + ByteTrack per il tracciamento multi-giocatore, un modello pretrained per la pallina (il bersaglio più difficile — piccola e velocissima), una proiezione omografica per convertire pixel in metri reali, un filtro di Kalman causale per smussare le traiettorie, e — qui torna in scena MediaPipe — la stima della posa, ma solo nella finestra temporale ristretta attorno a un contatto rilevato, per classificare il colpo (dritto, rovescio, smash, lob, drop shot, volée, servizio) con regole semplici, non con un modello addestrato ad hoc.

▶ Esempio
Pose estimation su un colpo di padel/beach tennis
Lo stesso principio di pose estimation descritto sopra (mani per il Theremin, corpo intero qui) applicato a un gesto sportivo — esattamente il tipo di segnale che CourtIntelligence userebbe per distinguere un dritto da uno smash nella finestra temporale attorno al contatto con la palla.

Una scelta di design interessante del piano è che l'overlay — riquadri sui giocatori, traiettoria della palla, statistiche istantanee — è pensato come dato strutturato disegnato su un canvas trasparente, non "bruciato" nel video: lo stesso componente funziona identico sia durante l'analisi live (dati che arrivano via WebSocket mentre il calcolo procede) sia nella dashboard finale di replay. Anche il calcolo pesante è pensato per girare on-demand su una VM GPU dedicata, che si accende all'avvio dell'analisi e si spegne da sola dopo un periodo di inattività — lo stesso pattern già collaudato per la GPU condivisa dell'orchestratore.

📋 Stato reale, senza abbellimenti

CourtIntelligence non è mai passato dalla fase di progettazione: nessun container, nessuna riga di pipeline, nessuna migrazione database. Il piano esiste come documento di design dettagliato — nome dell'agente, schema del database, rischi tecnici noti (il modello di detection della pallina non è ancora scelto, la classificazione dei colpi non è tarata su footage reale) — pronto per essere ripreso, non per essere dato per fatto.

Un'antenna che sente una mano nell'aria, una rete neurale che pesa i muscoli di un sorriso, un algoritmo che un giorno conterà gli smash su un campo di padel: stessa domanda di fondo, posta a un secolo di distanza — come si trasforma un segnale continuo, elettromagnetico o fatto di pixel, in un significato che un essere umano può usare, in tempo reale, con hardware che si possiede davvero.