Skip to main content

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:

OutputSignificato
x, yPosizione nel piano dell'immagine, normalizzata rispetto a larghezza e altezza
zProfondità stimata, relativa a un punto di riferimento (disponibile solo su alcuni modelli)
visibility / scoreConfidenza 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.
Falsa precisione

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:

MisuraSoliditàNota
Variazione dello stesso angolo, stesso soggetto, stesso setup, nel tempoAltaÈ il caso d'uso più difendibile: gli errori sistematici si cancellano nel confronto
Asimmetria destra/sinistra nella stessa immagineMediaRobusta agli errori comuni ai due lati, sensibile alla rotazione del soggetto
Angolo articolare assoluto sul piano sagittale (vista laterale)MediaRichiede protocollo di acquisizione rigoroso
Angolo assoluto sul piano frontaleMedio-bassaMolto sensibile alla rotazione del soggetto
Distanze e proporzioni in unità metricheBassaNon disponibile senza calibrazione esplicita
Valutazione di curve rachidee (es. cifosi, scoliosi)Non supportataI 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.