Come funziona la pose estimation
Il meccanismo
La human pose estimation è una tecnologia matura e non proprietaria: una rete neurale riceve un'immagine e restituisce le coordinate dei punti anatomici (keypoint o landmark) della persona inquadrata.
Per ogni keypoint il modello produce tipicamente:
| Output | Significato |
|---|---|
x, y | Posizione nel piano dell'immagine, normalizzata rispetto a larghezza e altezza |
z | Profondità stimata, relativa a un punto di riferimento (disponibile solo su alcuni modelli) |
visibility / score | Confidenza del modello su quel singolo punto |
La pipeline completa di una funzionalità di analisi posturale è questa:
I passi da A a D sono forniti dalle librerie. I passi E, F e G sono codice applicativo — e il passo F è quello che richiede competenza clinica, non informatica.
Dal keypoint all'angolo
Il calcolo degli angoli è trigonometria elementare su vettori.
Angolo articolare fra tre punti (es. ginocchio: anca → ginocchio → caviglia):
// Angolo nel vertice B, formato dai segmenti BA e BC
function jointAngle(a, b, c) {
const rad =
Math.atan2(c.y - b.y, c.x - b.x) -
Math.atan2(a.y - b.y, a.x - b.x);
let deg = Math.abs((rad * 180) / Math.PI);
return deg > 180 ? 360 - deg : deg;
}
Allineamento rispetto alla verticale (es. inclinazione della linea delle spalle):
// Angolo del segmento AB rispetto all'asse verticale dell'immagine
function tiltFromVertical(a, b) {
const rad = Math.atan2(b.x - a.x, b.y - a.y);
return (rad * 180) / Math.PI;
}
Questa parte è realmente banale. Il problema è che il risultato è corretto solo se valgono alcune ipotesi, ed è qui che la funzionalità si gioca la credibilità.
I quattro limiti da conoscere
1. L'angolo misurato è una proiezione
Il modello lavora su un'immagine 2D. L'angolo calcolato non è l'angolo articolare reale, ma la sua proiezione sul piano dell'immagine. Se il soggetto è ruotato anche di pochi gradi rispetto alla camera, la proiezione comprime o dilata l'angolo reale.
Conseguenza pratica: l'errore introdotto da una rotazione del soggetto può facilmente superare la deviazione posturale che si vuole misurare. Il protocollo di acquisizione conta più del modello.
2. La verticale dell'immagine non è la verticale gravitazionale
Le "linee di riferimento verticali" sono verticali nell'immagine. Se la camera è inclinata in avanti, indietro o lateralmente, quella linea non corrisponde alla direzione della gravità e ogni valutazione di allineamento è falsata.
Mitigazioni possibili:
- su mobile, leggere l'accelerometro e mostrare una livella software che blocca lo scatto finché il dispositivo non è a piombo;
- su desktop/web, imporre un supporto fisso e verificare l'orizzontalità con un riferimento noto nella scena.
3. Senza scala non ci sono misure metriche
Il modello restituisce coordinate normalizzate. Non esiste alcun modo di ricavare centimetri da un'immagine singola senza un riferimento di scala noto: altezza del soggetto inserita manualmente, marker di dimensione nota nella scena, distanza camera-soggetto fissata, o una camera con sensore di profondità.
Perché è importante: gli angoli sono invarianti alla scala (un triangolo scalato conserva gli angoli), quindi restano utilizzabili. Le distanze e le proporzioni no. Una funzionalità che dichiara "spalla destra 2 cm più alta della sinistra" senza calibrazione sta inventando il dato.
4. Il segnale è rumoroso
Le predizioni oscillano da un frame all'altro (jitter) di alcuni pixel, per effetto di illuminazione, abbigliamento, occlusioni e compressione video. Su un segmento corto, pochi pixel di oscillazione si traducono in gradi di oscillazione dell'angolo.
Serve quindi:
- un filtro temporale sui landmark (le librerie ne includono uno, tipicamente della famiglia One Euro filter, che bilancia stabilità e latenza);
- l'aggregazione su più frame invece che sul singolo scatto — mediana su una finestra di N frame con il soggetto fermo;
- lo scarto dei frame con confidenza bassa su keypoint chiave.
Un valore come 178.3° implica una risoluzione di un decimo di grado. Con jitter, proiezione e rotazione del soggetto, l'incertezza reale su una singola acquisizione è di diversi gradi. Mostrare il decimale non aggiunge informazione: aggiunge una promessa che il sistema non mantiene.
Scelta consigliata per l'interfaccia: arrotondare al grado, mostrare la variabilità (es. 178° ± 3°) e privilegiare il confronto con la propria acquisizione precedente rispetto al valore assoluto.
Cosa il sistema può misurare in modo difendibile
Ordinati per solidità decrescente:
| Misura | Solidità | Nota |
|---|---|---|
| Variazione dello stesso angolo, stesso soggetto, stesso setup, nel tempo | Alta | È il caso d'uso più difendibile: gli errori sistematici si cancellano nel confronto |
| Asimmetria destra/sinistra nella stessa immagine | Media | Robusta agli errori comuni ai due lati, sensibile alla rotazione del soggetto |
| Angolo articolare assoluto sul piano sagittale (vista laterale) | Media | Richiede protocollo di acquisizione rigoroso |
| Angolo assoluto sul piano frontale | Medio-bassa | Molto sensibile alla rotazione del soggetto |
| Distanze e proporzioni in unità metriche | Bassa | Non disponibile senza calibrazione esplicita |
| Valutazione di curve rachidee (es. cifosi, scoliosi) | Non supportata | I keypoint sono articolari, non vertebrali: la colonna non è osservabile da questi modelli |
Quest'ultima riga merita attenzione: nessuno dei modelli considerati fornisce landmark vertebrali. Qualsiasi affermazione sulla curvatura della colonna sarebbe estrapolata da punti che non la descrivono.