
Qualsiasi modello di posa registrerà 15 squat buoni su un ginocchio in valgismo. Io ho costruito l'IA che intercetta la ripetizione 9.
Ho costruito la prima versione di questa demo per dimostrare che un modello di posa poteva contare gli squat, e in un giorno avevo dimostrato la cosa sbagliata. Gli ho dato in pasto una paziente sintetica post-LCA che ho chiamato Maria, 62 anni, otto settimane dopo la ricostruzione del ginocchio, quindici squat a corpo libero prescritti. La libreria di posa gratuita ha fatto esattamente ciò che fanno le librerie di posa gratuite. Ha registrato quindici ripetizioni, le ha contate tutte e ha proseguito. Quindici su quindici. Una sessione pulita.
Il problema era la ripetizione 9. Alla ripetizione 9 il ginocchio di Maria cede verso l'interno e lei rallenta per compensare, il movimento esatto che un fisioterapista osserva dopo una ricostruzione del LCA perché è così che le persone si lacerano di nuovo l'innesto. Il modello di posa ha visto uno squat. Non ha visto un rischio di re-infortunio, perché vedere quello non è ciò per cui serve un modello di posa. La ripetizione che avrebbe dovuto segnalare era la ripetizione che ha contato.
È stato il momento in cui il prodotto reale mi è diventato chiaro. Avevo trattato la stima della posa come la parte difficile. Non è più la parte difficile. È gratuita.
La stima della posa è gratuita, quindi ho smesso di cercare di competere con essa
Ho passato la prima settimana cercando di costruire un tracker di keypoints migliore, ed è stata la settimana più sprecata del progetto. BlazePose e MoveNet girano già su un telefono, a 30 fotogrammi al secondo, dandoti uno scheletro a 33 keypoints gratis. Ogni piattaforma di fisioterapia e ogni app di wellness aziendale ha già questo o può inserirlo domani. Competere lì è competere per regalare qualcosa che viene già regalato.
Ciò che nessuno ti consegna è lo strato dopo i keypoints. Prendere un flusso di posa grezzo e trasformarlo in qualcosa su cui un clinico può agire e che un pagatore rimborserà. È lo strato che ho deciso che Kinetiq avrebbe costruito, dall'inizio alla fine, e la tesi a cui continuo a tornare è questa.
La stima della posa è gratuita. Il valore è il cervello sopra di essa, e la prova fatturabile.
Quindi ho buttato via il tracker e costruito invece il motore di interpretazione. Prende il flusso di keypoints (sintetico per tre dei miei pazienti di test, e per un quarto, estratto offline da un clip reale di squat catturato così potevo dimostrare che la pipeline funziona su riprese reali), lo smussa con un filtro 1-Euro, lo sottopone a un gate di confidenza, segmenta le ripetizioni per auto-similarità temporale e calcola le feature su cui un clinico ragiona davvero: angolo articolare e range di movimento, un indice di valgismo del ginocchio, un rapporto di tempo discesa-ascesa, fluidità del movimento come Log Dimensionless Jerk, e un indice di simmetria sinistra-destra. NumPy semplice, unit-tested. Nessun modello nel percorso di scoring. Puoi costruire l'intero sistema su veriprajna.com/it/demos/verifica-biomeccanica-ia-dell-esercizio-e-prova-rtm e guardarlo valutare una sessione.
Quando ho fatto passare di nuovo Maria attraverso questo motore, la ripetizione 9 è tornata come avrebbe dovuto la prima volta.

Il motore non dice semplicemente "cattiva ripetizione." Scrive la clausola che ha verificato: valgismo 0.054 pari o superiore a 0.03, tempo 1.4 sopra 1.25. Un clinico può sottoporla a esame contraddittorio. Non puoi sottoporre a esame contraddittorio una black box, e dopo un intervento al LCA lo vuoi assolutamente.
La ripetizione che ero tentato di falsificare
Ricordo esattamente dove ho ceduto all'avidità, ed era la ripetizione 12. Alla ripetizione 12 della sessione di Maria il keypoint dell'anca scende sotto il gate di visibilità. La confidenza del tracker su quell'articolazione scende troppo in basso per fidarsi. Per alcuni fotogrammi il motore semplicemente non sa dove sia la sua anca.
La mossa allettante, quella che fa sembrare migliore il tuo benchmark, è interpolare. Indovinare la posizione dell'anca dai fotogrammi circostanti, calcolare comunque un angolo, valutare la ripetizione, mantenere il numero pulito. Ho scritto quella interpolazione. Ha funzionato. E poi ho letto la letteratura sull'accuratezza monoculare e l'ho cancellata.
L'errore sull'angolo del ginocchio a telecamera singola corrisponde a un errore assoluto medio da 9.3 a 21.9 gradi (Nature Scientific Reports, 2025). È il tetto onesto su questo tipo di misurazione. Se sto fabbricando una posizione dell'anca su un fotogramma a bassa confidenza e poi riportando un angolo articolare da essa, non sto misurando un ginocchio, sto generando un numero dall'aspetto plausibile e chiamandolo clinico. Per un'azienda chiamata Veriprajna, che significa vera saggezza, non è stata una decisione difficile.

Quindi il motore si astiene. Dice, sullo schermo, "ripetizione non valutata, anca non visibile." Rende grigio lo scheletro. Non finge.
Non indoviniamo mai angoli articolari da keypoints a bassa confidenza.
Ho messo quella frase sullo schermo perché volevo che la disciplina fosse visibile, non sepolta in un file di configurazione. Tra le ripetizioni occluse nel mio set etichettato, tre su tre si sono astenute e zero angoli sono stati fabbricati, e non è un'affermazione che asserisco, è un invariante unit-tested. Una ripetizione occlusa che venisse comunque valutata sarebbe, per definizione, un angolo fabbricato. Il test lo catturerebbe. Rifiutare di rispondere è una feature per cui ho dovuto combattere i miei stessi istinti per mantenerla.
Perché lo stesso squat passa per un paziente e fallisce per il successivo?
Stavo per rilasciare una soglia globale unica, e una fisioterapista a cui ho mostrato una build iniziale mi ha dissuaso in circa trenta secondi. Il suo punto era semplice. Uno squat a 80 gradi da una donna otto settimane post-LCA è un buon progresso. Lo stesso squat a 80 gradi da un cliente wellness sano di 30 anni è una ripetizione pigra. Se il tuo motore li valuta allo stesso modo, non capisce la riabilitazione, capisce la geometria.
Quindi il motore delle regole è diventato adattivo alla popolazione. Le soglie si agganciano al profilo del paziente: fascia d'età, condizione, settimana di recupero. Maria, post-LCA settimana 8, ottiene un target di flessione di 75 gradi. Jordan, un atleta di wellness aziendale di 30 anni con ginocchia sane, ottiene 95. Ho costruito un controllo nella demo per rendere il punto innegabile: cambia il menu a tendina del profilo, mantieni esattamente lo stesso movimento, e guarda il verdetto cambiare.

La prima volta che ho cambiato quel menu a tendina davanti a qualcuno e l'intera colonna di verdetti è cambiata sotto un movimento che non era cambiato, li ho visti capire. Lo stesso movimento ottiene un verdetto diverso a seconda del profilo, e quello è giudizio clinico, non un bug. Questa è anche la parte della tesi che non invecchia. Quando la stima della posa diventerà perfetta, e lo diventerà, il sensore ancora non potrà dirti che 80 gradi significa una cosa per un ginocchio in guarigione e un'altra per uno sano. Quella comprensione vive nello strato superiore.
Gli agenti consigliano, il codice decide
Una volta ho lasciato che un agente IA mi mettesse in imbarazzo, ed è il motivo per cui l'architettura è come è. Tutti a cui facevo pitch volevano la funzionalità di tendenza: un agente che legge la sessione e scrive la nota clinica, un agente che osserva il trend e fa escalation. Va bene. Ho collegato un Clinical Scribe e un Longitudinal Monitor su un'altra paziente, Eleanor, 70 anni, post-protesi del ginocchio, il cui range di movimento sta silenziosamente declinando nella storia delle sue sessioni.
La prima bozza che lo scribe ha scritto era fluente e sicura e conteneva una figura di range di movimento che non era nelle evidenze. Aveva arrotondato, o smussato, o semplicemente inventato un numero che suonava bene. Se mi fossi fidato, avrei rilasciato una nota clinica con una misurazione fabbricata. È l'intero failure mode di mettere un modello linguistico in un loop medico, e l'avevo appena visto accadere sul mio schermo.
La correzione è stata renderli strutturalmente incapaci di farlo. Ogni figura che un agente introduce è verificata contro le evidenze deterministiche. Qualsiasi numero che non sia nell'output del motore viene rifiutato, e al suo posto viene mostrato il template deterministico. Entrambi gli agenti si astengono completamente quando non c'è una chiave API. Interpretano e comunicano. Non decidono.

Gli agenti consigliano, il codice decide.
Quella frase è la decisione di design portante dell'intera demo. Il nucleo di fiducia, ogni verdetto per-ripetizione e la determinazione di fatturazione, è codice semplice unit-tested senza alcun modello linguistico nelle vicinanze. Gli agenti siedono sopra, delimitati e grounding-checked, facendo l'unica cosa in cui sono genuinamente bravi, che è trasformare numeri verificati in prosa pronta per il clinico. Nel momento in cui un agente ottiene un voto sul verdetto, hai perso l'auditabilità che era l'intero punto.
Ciò che un pagatore rimborsa davvero è una ricevuta, non un conteggio di ripetizioni
La ragione commerciale per cui ho costruito tutto questo è una cosa che ho imparato leggendo le regole di fatturazione CMS, che non è come mi aspettavo di passare un mese. I clinici possono fatturare Remote Therapeutic Monitoring sotto CPT 98975-98981, più i codici 2026 98979 e 98985, e la soglia qualificante 2026 è scesa a soli 2 giorni e 10 minuti di dati (ricerca Veriprajna WP29, 2026). Ma CMS non rimborsa coordinate grezze. Richiede dati raccolti dal dispositivo legati a una decisione terapeutica. Un mucchio di keypoints non è fatturabile. Una determinazione documentata e auditabile lo è.
Quel gap non è piccolo, perché il problema sottostante non è piccolo. L'aderenza agli esercizi a domicilio di fisioterapia si aggira intorno al 35 percento, e il 65 percento dei pazienti abbandona il proprio programma entro il primo mese (ricerca Veriprajna WP29, 2026). L'autodichiarazione sovrastima la compliance, quindi il clinico spesso fattura e tratta su dati di cui non può fidarsi. Sul lato del datore di lavoro, le condizioni muscoloscheletriche costano circa 3.591 dollari per dipendente all'anno, una stima del 36 percento degli interventi MSK è considerata non necessaria (90 miliardi di dollari), e più della metà dei dipendenti resiste a condividere dati sanitari per privacy (ricerca Veriprajna WP29, 2026). Dati di esercizio verificati, privacy-safe e fatturabili sono ciò che manca a tutti in quella catena.
Quindi l'ultima cosa che il motore fa per sessione è decidere: fatturabile, necessita revisione del clinico, o dati dispositivo insufficienti, ed esporta un report di sessione FHIR-shaped. Osservazioni per-ripetizione, la clausola di soglia verificata per ciascuna, il rollup della sessione, la determinazione RTM e i campi di documentazione che CMS richiede. Dico FHIR-shaped, mai FHIR-validated, perché è JSON strutturato che rispecchia le forme dei campi Observation e DocumentReference, non un payload inviato a un EHR live. Lo emetto. Non pretendo di fare POST.
La sessione di Maria, con la bandiera di valgismo alla ripetizione 9, non si auto-fattura. Viene instradata prima a un clinico, perché un segnale di re-infortunio dovrebbe essere visto da un umano prima di diventare un addebito. È la sfumatura onesta su cui ho insistito: fatturabile non significa tutto-bene, significa documentato abbastanza bene da poterci stare dietro.

I numeri su quel pannello sono quelli che mi interessano, e voglio essere preciso sul loro ambito. La ground truth qui è il verdetto implicato dai parametri fisici piantati rispetto alle soglie del profilo, calcolato indipendentemente dal motore, e poi le ripetizioni sono rese in keypoints con rumore di misurazione aggiunto dopo che le etichette sono fissate, così il motore deve recuperare il verdetto attraverso il rumore. Su quel set l'accordo è 100 percento su 25 casi chiari e 100 percento su 10 casi borderline che stanno entro circa una deviazione standard di una soglia. È un risultato di discriminazione su un set sintetico etichettato, non una garanzia open-world, e i casi borderline sono quelli che ribalterebbero sotto una soglia ingenua, che è esattamente perché li riporto separatamente. Queste sono misure durature: accuratezza del task, throughput di automazione e onestà. Non invecchiano quando il modello di posa migliora, perché nessuna di esse è un tasso di errore del modello di posa.
La domanda che mi resta
Sono arrivato pensando di costruire un prodotto di computer vision, e sto finendo convinto di aver costruito un prodotto di accountability che capita di iniziare con una telecamera. Il lavoro interessante non è mai stato ottenere i keypoints. È stato decidere cosa al sistema è permesso affermare, quando deve astenersi, di chi si applicano le soglie, e cosa un clinico può mettere dietro la propria licenza. Se vuoi vedere il motore valutare un ginocchio che cede, rifiutare una ripetizione occlusa ed esportare la ricevuta, gira senza chiave su veriprajna.com/it/demos/verifica-biomeccanica-ia-dell-esercizio-e-prova-rtm.
E se preferisci guardarlo piuttosto che leggermi descriverlo, ecco l'intera cosa in esecuzione dall'inizio alla fine.
La domanda che continuo a rivoltare, e quella su cui vorrei davvero che altri builder discutessero con me, è questa. Man mano che i sensori tendono asintoticamente alla perfezione, la tentazione sarà lasciare che il modello decida di più, perché sbaglierà così raramente. Ma raramente-sbagliato è esattamente la condizione in cui un numero fabbricato fa più danni, perché hai smesso di controllare. Quindi dove, nei tuoi stessi sistemi, è la linea che rifiuti di far attraversare al modello, e puoi indicare il codice che la impone?


