Facolt` a di Ingegneria
Corso di Laurea Triennale in Ingegneria Informatica
Tesi di laurea triennale
Utilizzo del sensore kinect
per analisi di postura ed equilibrio
su una piattaforma robotica
Candidato
Andrea Olivieri
Matricola 440842
Relatore
Prof.ssa Carla Limongelli
Correlatore
Ing. Andrea Orlandini
Anno Accademico 2012-2013
dedicata ai miei nonni
che, prima di tutti,
hanno permesso tutto questo.
I NDI CE
t +aortztor v
1 to+rs+o 1
1.1 Invecchiamento della popolazione . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Assistenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Gira Plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Robot di Telepresenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Valutazione della Postura . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 ktrt+ 7
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Descrizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Limiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.1 Architettura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.2 Natural User Interface . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.3 Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.4 Dati Processati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.5 Tracciamento dello scheletro . . . . . . . . . . . . . . . . . . . . 15
2.4.6 Tecniche di acquisizione dei dati: Polling VS Eventi . . . . . . . . 17
3 trrtt ttztor 19
3.1 Valutazione della Postura . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Strumenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1 MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.2 Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.3 Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.4 Facade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3.5 Repository . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4 Classe Kinect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5 Problemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4 totttstot 37
i
Indice
4.1 Casi duso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 Sviluppi Futuri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Bibliograa 41
ii
ELENCO DELLE F I GURE
Figura 1 Piramide Popolazione - ISTAT . . . . . . . . . . . . . . . . . . . 1
Figura 2 Gira . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Figura 3 Kinect Microsoft Windows . . . . . . . . . . . . . . . . . . . . . 7
Figura 4 Componenti del Kinect . . . . . . . . . . . . . . . . . . . . . . . 9
Figura 5 Spazio di Interazione . . . . . . . . . . . . . . . . . . . . . . . . 11
Figura 6 Intervalli di Identicabilit . . . . . . . . . . . . . . . . . . . . . 11
Figura 7 Architettura del SDK . . . . . . . . . . . . . . . . . . . . . . . . 12
Figura 8 Natural User Interface . . . . . . . . . . . . . . . . . . . . . . . 13
Figura 9 Interazioni tra NUI e lapplicazione utente . . . . . . . . . . . . 14
Figura 10 Tracciamento dello scheletro . . . . . . . . . . . . . . . . . . . . 15
Figura 11 Scheletro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Figura 12 Coordinate spaziali . . . . . . . . . . . . . . . . . . . . . . . . . 16
Figura 13 Tipica interazione tra componenti del pattern MVC . . . . . . . 24
Figura 14 Gerarchia degli oggetti strategia . . . . . . . . . . . . . . . . . . 28
Figura 15 Punti dello scheletro rilevati dal Kinect . . . . . . . . . . . . . . 29
Figura 16 Formula della distanza tra due punti nello spazio . . . . . . . . . 29
Figura 17 Ciclo di vita dellapplicazione per eettuare i Test . . . . . . . . 38
Figura 18 Ciclo di vita dellapplicazione per vedere il Trend dei risultati . 39
Figura 19 Ciclo di vita dellapplicazione per cambiare le opzioni . . . . . . 39
iii
ELENCO DEL CODI CE
3.1 codice del metodo che calcola il voto per la postura tra due punti . . . . . 29
3.2 codice del metodo per il calcolo della postura di un singolo scheletro . . 30
3.3 codice del metodo per la valutazione della postura nel test della camminata 31
3.4 codice del metodo per la valutazione della postura nel test di equilibrio . 32
iv
I NT RODUZI ONE
Largomento della presente tesi riguarda lo sviluppo di unapplicazione per fornire un
servizio aggiuntivo al robot di telepresenza del progetto europeo Gira Plus utilizzando
il sensore Kinect
Lapplicazione, chiamata "TestPosture" stata sviluppata presso lISTC - CNR (Istituto
di Scienze e Tecnologie della Cognizione - Consiglio Nazionale delle Ricerche) allo scopo
di valutare la postura di una persona mentre svolge alcuni semplici esercizi motori.
La tesi strutturata nel seguente modo:
Nel primo capitolo si parler del contesto per cui nata lidea di sviluppare lappli-
cazione: dei problemi dellanziano e delle tecnologie che sono state sviluppate per
migliorargli la qualit della vita, del progetto europeo Gira Plus e del suo robot di
telepresenza.
Il secondo capitolo verte sulla descrizione della periferica Kinect, e su tutto ci che
mi stato utile sapere per sviluppare lapplicazione.
Il terzo capitolo denisce i dettagli dellapplicazione, degli strumenti e pattern che
sono stati utilizzati.
Nel quarto e ultimo capitolo si conclude la tesi con una discussione degli sviluppi
futuri che lapplicazione pu avere.
v
1 CONT ESTO
1.1 tvrttnttr+o rrttt rorottztor
Il diuso benessere tipico dei paesi industrializzati, i progressi della medicina e della
tecnologia fautori tra le altre cose dellassenza di epidemie sporadiche ed endemiche,
la produzione di massa di beni alimentari sono tra le cause che si devono enumerare
per linnalzamento dellaspettativa di vita media che si aggira oggi ai 70 anni. Secondo
una previsione ISTAT ( mostrata in gura 1 ) in Italia [1] si avr un ulteriore aumento
della speranza di vita che raggiunger gli 85 anni nel 2050; il discorso tuttavia analogo
per tutti i paesi sviluppati. Inoltre labbassamento dei tassi di mortalit e di natalit fa
presupporre che il numero di giovani sia destinato a diminuire in favore di un aumento
delle persone anziane. Ci comporta una serie di problematiche tra le quali esamineremo
in dettaglio:
Lassistenza alle persone anziane
Figura 1: La piramide dellet prevista dallIstat nellanno 2061
1
1 to+rs+o 2
1.2 tssts+rzt
In un futuro dove la gura dellanziano sempre pi presente nella societ, si ritagliano
uno spazio importante tutte quelle tecnologie che migliorano la qualit della vita o aiutano
lanziano con i suoi impedimenti.
I problemi pi comuni di una persona anziana [2][3],non necessariamente malata, che
presenta autonomia e capacit funzionali compromesse, possono essere di tipo:
psicosociali
sici
cognitivi
sanitari
Per quanto concerne laspetto psicosociale lanziano non deve sentirsi un peso: deve
essere accettato come tale indipendentemente dallaspetto e dallumore; ha bisogno
daetto, comprensione, solidariet ed autostima, soprattutto quando aumenta la sua
dipendenza sica dagli altri. bene inoltre che mantenga dei contatti umani per condurre
unesistenza il pi possibile attiva ed evitare lisolamento e lemarginazione.
I problemi derivanti da impedimenti sici oppure dallabbassamento del livello cogni-
tivo maturato con let, possono essere colmati da un attenta assistenza, dando laiuto
necessario allanziano, qualora da solo abbia delle dicolt.
Inne ci sono i problemi sanitari che riguardano la salute, soprattutto per un anziano
che ha delle particolari predisposizioni nel contrarre una malattia o nel sentirsi male, la
regolare visita da un medico una routine normale e necessaria anch la persona possa
vivere bene pi a lungo.
Questa serie di problemi portano una persona anziana ad avere la necessit quotidiana
di assistenza, da parte di una persona che la assista quando pi ne ha bisogno o da parte
di un medico qualora la sua salute sia a rischio.
Purtroppo la diminuzione del numero di giovani in un prossimo futuro comporter una
mancanza di supporto umano, per questo motivo si ritagliano uno spazio importante
le tecnologie che hanno il potenziale di migliorare la qualit della vita degli adulti pi
anziani.
1 to+rs+o 3
Molti sistemi sono stati sviluppati in modo da compensare i loro problemi sici: alcune
di queste tecnologie non necessitano di un computer, come ad esempio le poltrona auto-
matica che aiuta lanziano ad alzarsi da seduto; altre fanno adamento allintelligenza
articiale o sono basate su sistemi computerizzati, come attesta il sistema di lettura
che ore la possibilit di ascoltare un testo alle persone con scarsa capacit visiva, o
il dispositivo che, con semplici gesti delle mani, da la possibilit a persone con scarsa
mobilit di controllare gli elettrodomestici.
Gli anziani possono essere supportati anche da tecnologie che aiutano ad allievare i loro
problemi psicosociali, mantenendoli sempre in stretto contatto con le persone, mediante
lutilizzo del cellulare che permette di comunicare con chiunque, oppure interagendo
con persone che si trovano lontano da loro, come possibile fare con il Dudes magic
Box, un sistema innovativo che permette ai nipotini di interagire con i nonni, ponendo i
loro giocattoli o altri oggetti di interesse in una scatola che proietta limmagine su uno
schermo touch screen a casa dei nonni.
In aggiunta ai problemi sici e psicosociali, ci sono i problemi sanitari e quelli legati
allabbassamento del livello cognitivo , i quali pi degli altri necessitano una costante
assistenza e una visita periodica da parte di un medico.
Esistono varie tecnologie che orono assistenza da remoto (end-users), cio da parte di
unaltra persona che in quel preciso momento si trova in un altro posto, ad esempio un
medico che fornisce una visita immediata a persone che in quel momento non si trovano
nei pressi di un ospedale, una di queste tecnologie il robot di tele-presenza.
1.3 ctatrr rtts
Molte iniziative in tutto il mondo hanno preso in considerazione il problema dellin-
vecchiamento della popolazione e molti programmi sono stati creati per far fronte al
problema, come il programma AAL (Ambient Assisted Living), creato dalla Commissione
Europea con lo scopo di promuovere quelle tecnologie che aiutino a creare un ambiente
intelligente in cui sia pi facile vivere bene per quelle persone, che come gli anziani,
hanno pi problemi.
In merito a questo scopo stato istituito dalla Commissione Europea il progetto
chiamato GIRAFF PLUS [4][5], che ha come obiettivi :
Sviluppare un sistema in grado di raccogliere e valutare i dati inerenti al comporta-
mento e alle misure siologiche delle persone anziane, attraverso dei sensori sparsi
1 to+rs+o 4
in tutto lambiente circostante, per poi eettuare unanalisi sui graci costruiti con
tali informazioni.
Organizzare le informazioni raccolte in modo da fornire la visualizzazione perso-
nalizzabile e servizi di monitoraggio per gli assistenti delle persone anziane
Favorire le interazioni sociali tra gli utenti primari (coloro che usufruiscono del
servizio) e gli utenti secondari (assistenti, dottori. . . ) . In altri termini, gli uten-
ti secondari possono virtualmente entrare nella casa della persona da assistere,
per visitarla o semplicemente interagire con essa, mentre lutente primario pu
richiedere assistenza o una visita in ogni momento.
Il sistema Gira Plus include un gran numero di componenti, tra cui la maggior parte
sono sensori di due tipi:
siologici, che misurano lo stato sico della persona: la pressione del sangue etc..
ambientali , che rilevano le condizioni inerenti lambiente : capiscono quando una
persona cade o si seduta, etc..
I dati raccolti dai sensori vengono interpretati da un sistema intelligente sotto forma di
attivit, ad esempio il sistema in grado di capire che la persona sta andando a dormire
oppure caduta, li memorizza e nel caso fosse necessario avvisa il medico o lassistente
che dovr prontamente intervenire. Oltre ai sensori c anche un altro componente
essenziale nel progetto Gira Plus :
il robot di telepresenza.
1 to+rs+o 5
1.4 aono+ rt +rtrrarsrzt
Figura 2: Il robot di telepresenza del progetto Gira Plus
ll robot di telepresenza, chiamato Gira [4] una piattaforma mobile di comunicazione,
dispone di una video camera, un display, un microfono, degli altoparlanti, uno schermo
touch screen e per i futuri modelli, inoltre, verr integrato un sensore Kinect della
Microsoft in grado di aumentarne le potenzialit di utilizzo.
Lo scopo principale di Gira dare la possibilit da remoto di fornire assistenza; ci
risulta possibile attraverso una connessione internet : gli utenti secondari collegandosi a
Gira ottengono la capacit di controllarlo, permettendo a dottori o assistenti di entrare
virtualmente nella casa dellanziano senza essere sicamente sul posto, questo un
grande vantaggio poich permette ad una sola persona di visitare o assistere un gruppo
di anziani qualora ne avessero bisogno.
Analogamente il robot ore la capacit allanziano di avvisare immediatamente lassi-
stente o il medico, infatti premendo un solo pulsante, si avvia una chiamata diretta al
medico che avvisa della necessit di aiuto da parte della persona anziana.
Gira, inoltre, ore molteplici funzionalit e servizi, ad esempio permette di eettuare
le videochiamate in modo tale che lanziano possa restare in contatto con amici o familiari.
Nei prossimi modelli del Gira, come gi detto, verr integrato il Kinect, questo render
1 to+rs+o 6
ancora pi vasta la variet di servizi che esso potr erogare, uno dei tanti che in fase di
sviluppo ed oggetto della tesi la valutazione della postura.
1.5 vttt+tztor rrttt ros+tat
Il compito che mi stato assegnato di sviluppare un applicazione che fornisca un
ulteriore servizio per il Gira, utilizzando il Kinect, il cui scopo valutare la postura delle
persone anziane mentre svolgono tre esercizi dierenti, questa idea nata leggendo un
articolo [6] di una universit americana dove, grazie al Kinect, si sono valutate le posture
di alcune persone, senza lausilio di un medico. Tale servizio stato sviluppato per far
fronte a tutte quelle persone che adottano una postura scorretta , che nel corso del tempo
porta ad avere seri problemi sici, come ad esempio la gobba o impedimenti motori, a
causa dei quali si rischia di non poter pi camminare bene o con facilit.
In denitiva l applicazione, non solo mira a fornire un immediato risultato sulla postura,
ma ore in tempi lunghi, tramite un graco, landamento dei risultati che lanziano ha
conseguito, questo aiuta il medico a capire la situazione e se i risultati mostrano una
curva con pendenza decrescente, la possibilit di intervenire prescrivendo una cura.
Prima di entrare nel merito dellapplicazione, il prossimo capitolo spiegher in maniera
dettagliata il Kinect, dando la possibilit di capire che tipo di tecnologia stata utilizzata
per sviluppare lapplicazione.
2 KI NECT
Figura 3: Il Kinect della Microsoft Windows
2.1 t+aortztor
Il Kinect una periferica [7][8] costituita da un insieme di sensori allo scopo di fornire
occhi e orecchie al computer con le capacit di utilizzarli.
Annunciato al pubblico nel giugno del 2009, in vendita dallanno seguente, il Kinect si
fatto conoscere in tutto il mondo grazie al suo utilizzo sulla console Xbox, piattaforma
di gioco della Microsoft, permettendo una nuova modalit di gioco pi interattiva, basata
sui movimenti del corpo umano, in grado da rendere il giocatore il vero controller del
gioco.
Tra le pi importanti funzionalit che mette a disposizione sono:
Il riconoscimento vocale: permette di controllare lapplicazione mediante parole
predenite riconosciute dal Kinect.
Lidenticazione di una persona e dei suoi movimenti.
Lacquisizione dellaudio privo del rumore di fondo, con la capacit di identicare
la sorgente del suono.
In seguito al grande successo e viste le enormi potenzialit di utilizzo da parte del
Kinect, stata rilasciata una versione per PC, dando cos lopportunit a sviluppatori
7
2 kt rt+ 8
in tutto il mondo di utilizzarne a pieno le caratteristiche per sviluppare nuovi tipi di
applicazioni, dove i movimenti del corpo, i suoni e le immagini percepite dalla periferica
diventano linput principale delle varie applicazioni.
Le applicazioni che si possono sviluppare col Kinect spaziano in diversi ambiti e
contesti; nel lungo elenco, quelle di maggior rilievo hanno lo scopo di migliorare la qualit
della vita o di facilitarla. Riportiamo ora lesempio di due ricercatori delluniversit di
Berna i quali hanno sviluppato un sistema di controllo per la visualizzazione e lanalisi di
radiograe e tomograe che svincola i medici dalluso delle mani e rende, grazie anche
alluso delle capacit di riconoscimento vocale, davvero immediata la consultazione degli
esami medici, anche durante unoperazione in corso.
Grazie al gran numero di possibilit con cui il Kinect pu essere utilizzato e i servizi che
ore, molte aziende hanno deciso di integrarlo nei propri prodotti: esemplare il caso
della smart tv, la quale con laggiunta della nuova periferica ore un nuovo modo di
interazione allutente che esercita il pieno controllo sul prodotto attraverso i movimenti
delle mani o tramite comandi vocali.
Come auspicato dalla fantascienza del secolo passato,si pensa che la rapida espansione
dellutilizzo del Kinect porter ad un futuro dove il contatto sico con gli oggetti sar
sostituito da gesti con le mani o interazioni vocali.
2.2 rrstatztor
Il Kinect formato dai seguenti componenti [9]:
Una camera RGB
Un emettitore IR
Un sensore di profondit IR
Un array di microfoni
Un motore per linclinazione
Un accelerometro
Gli occhi del Kinect sono costituiti da tre sensori che collaborano attivamente per
registrare delle immagini, a colori o di profondit.
Per la creazione delle immagini a colori, il Kinect si serve di una camera RGB in grado
di registrare, alla risoluzione di 1280x960, tutto quel che succede nel campo visivo della
2 kt rt+ 9
Figura 4: I componenti del Kinect
periferica; mentre lemettitore e il sensore di profondit a raggi infrarossi (IR) lavorano
insieme alla creazione delle immagini di profondit.
Lemettitore dionde un fascio di luce infrarossa che il sensore di profondit riceve una
volta riessa dagli oggetti nello spazio dinterazione (vedere capitolo 2.3) del Kinect; in
seguito i dati sono convertiti in informazioni che tengono traccia della distanza tra la
periferica e loggetto riettente.
Le orecchie del Kinect sono costituite da un array di quattro microfoni che vengono
utilizzati per la registrazione del suono, inoltre, grazie alla loro disposizione permettono
di risalire alla direzione di origine del suono, al contempo lanalisi della riessione del
suono sugli oggetti circostanti permette la calibrazione dellambiente.
Lultimo sensore che ha disposizione il Kinect un accelerometro [10] a tre assi
congurato per un campo di 2g, dove g laccelerazione di gravit; ci consente al
sensore di determinare lorientazione corrente in base alla direzione della forza di gravit.
I dati forniti dallaccelerometro possono aiutare il programma a capire se il Kinect si trova
in una posizione inusuale, oppure in ambiti pi complessi, insieme ai dati del pavimento
calcolati dal SDK per fornire delle proiezioni in 3-D pi accurate nei scenari di realt
aumentata.
Laccelerometro ha un limite inferiore di precisione di 1 grado dovuto in parte alla sua
sensibilit a variazioni di temperatura. Tale imprecisione, che pu essere pu essere
positiva o negativa, comporta unincertezza della posizione che pu essere corretta
confrontando il valore dellaccelerometro verticale (lasse y nel sistema di coordinate
del accelerometro) con il valore della profondit del pavimento. Le informazioni che
vengono raccolte dallaccelerometro vengono tradotte in un vettore a 4 variabili (x,y,z,w),
dove le prime tre sono date dal vettore 3-D che indica la direzione della forza di gravit,
mentre il valore della w sempre settato a zero. In situazioni normali il vettore avr i
seguenti valori: (0,-1,0,0)
2 kt rt+ 10
Oltre a tutti i sensori visti nora, il Kinect ha installato un motore elettrico posto alla
base della periferica, con lo scopo di cambiare linclinazione sullasse verticale, in modo
da incrementare il possibile spazio dinterazione di 27
verso
lalto o verso il basso.
Unaltra questione che necessario trattare la vicinanza o la lontananza delloggetto
dal sensore, per ovviare al meglio per ovviare al meglio questo problema il Kinect mette
a disposizione lutilizzo di due intervalli di profondit: da vicino e di default.
Gli intervalli concessi dal Kinect presentano comunque dei conni ben marcati entro i
quali lo strumento in grado di funzionare al meglio, mostrati in gura 6.
Al di fuori di tali intervalli il sensore pu non identicare gli oggetti, oppure a determinate
distanze denominate troppo vicino o troppo lontano loggetto viene rilevato ma non
identicato, come possibile vedere nella legenda della gura 6
Altri limiti sono dettati dalla situazione sfavorevole in cui il Kinect si pu trovare,
come ad esempio nella completa oscurit: come gi detto nel capitolo precedente, i vari
sensori che permettono al Kinect di vedere collaborano attivamente per lidenticazione
1 Ametropia: indica unanomalia di rifrazione dellocchio. In un occhio otticamente normale, ad accomodazio-
ne rilassata (in condizione cio di rifrazione statica), i raggi paralleli, provenienti da un punto oggetto posto
allinnito, convergono sulla retina a formare un punto immagine, che in questo caso coincide con il fuoco
immagine del sistema ottico oculare. Quando questa condizione ottica ideale rispettata siamo in presenza
di emmetropia. La condizione opposta detta appunto ametropia
2 kt rt+ 11
Figura 5: Lo spazio di interazione del Kinect
Figura 6: Gli intervalli di identicabilit degli oggetti da parte del Kinect
delloggetto, in questo caso la camera RGB non pu dare il suo contributo, mentre
lemettitore e il sensore di profondit IR, utilizzando i raggi infrarossi, permettono
comunque di rilevare, ma non di identicare, loggetto davanti alla periferica. Situazione
opposta si verica quando il Kinect in presenza di oggetti che non riettono i raggi
infrarossi, infatti la camera RGB resta lunica a dare un contributo.
Inne ci sono gli errori di rilevazione derivati dalla qualit dei componenti di cui
composto il Kinect, questultimi non si possono evitare, ma essendo errori di misura
trascurabili non vanno ad inuenzare la rilevazione.
2.4 srk
Al ne di incrementare le applicazioni possibili per il Kinect la Microsoft mette a
disposizione un SDK (Software Developer Kit), ovvero un insieme di strumenti che
2 kt rt+ 12
facilitano il compito dello sviluppatore.
2.4.1 Architettura
Larchitettura [12] del SDK mostrata in gura 7, ed sostanzialmente divisa in tre
parti:
Lhardware
I drivers
API
Figura 7: Architettura del SDK
La parte hardware composta dal Kinect, con i sensori di cui costituito, e il cavo USB
che permette il collegamento tra il PC e la periferica.
Nei driver fanno parte tutti quei programmi che permettono al software di gestire i
sensori.
Le API sono formate da un insieme di librerie che permettono con facilit allo sviluppatore
di accedere al Kinect, ai dati raccolti e alle funzionalit messe a disposizione.
2.4.2 Natural User Interface
API pi importante la NUI [13] (Natural User Interface) che permette laccesso al
Kinect attraverso tre diversi livelli di astrazione:
Il livello pi basso, accedendo direttamente al Kinect.
2 kt rt+ 13
Il livello intermedio, accedendo ai stream di dati [ 2.4.3].
Al livello pi alto, accedendo ai dati gi processati [ 2.4.4].
Figura 8: Natural User Interface
Oltre alla NUI vi sono anche altre API che facilitano lo sviluppatore nellimpiego di
diverse funzionalit del Kinect utilizzando i dati processati:
Il tracciamento dello scheletro [ 2.4.5].
Il riconoscimento vocale.
Il tracciamento del viso.
Molte altre funzionalit vengono sviluppate ogni giorno, per poi essere disponibili
nella versione successiva del SDK.
2.4.3 Stream
Tutti gli input raccolti dal Kinect, ovvero tutte le informazioni registrate dai sensori,
sono memorizzati in tre diversi stream [14] , un usso di dati inerenti ad un certo tipo
dinformazione:
Stream Audio.
Stream di Profondit.
Stream di Immagini.
2 kt rt+ 14
Nello stream di immagini [15] vengono memorizzate tutte le foto a colori catturate dalla
camera RGB, inoltre tramite il software possibile settare la risoluzione delle immagini
(alta o bassa) e la relativa codica(RGB, YUV o Bayer) con cui vengono registrate.
Nello stream di profondit [16] vengono salvati i frame (immagini di profondit) nei
quali ogni pixel contiene due tipi di informazioni:
La distanza in millimetri che separa il Kinect dalloggetto pi vicino nel campo
visivo del sensore di profondit
Un indice, ricavato processando le informazioni ottenute dai sensori, che iden-
tica univocamente a quale persona il pixel riferito; difatti il Kinect mantiene
aggiornata una mappa che ha come chiavi gli indici e come valori i pixel a cui sono
riferiti.
Inne nello stream audio [17] sono tenuti tutti i suoni registrati dallarray di microfoni.
Tutti gli stream, come gi accennato, sono messi a disposizione dello sviluppatore
attraverso la NUI (Natural User Interface) il cuore delle API fornite da Microsoft Win-
dows, consentendo cos la manipolazione di tali informazioni allo scopo di integrarle
nellapplicazione utente.
Figura 9: Interazioni tra NUI e lapplicazione utente
2.4.4 Dati Processati
Al livello pi alto di astrazione la NUI mette a disposizione del programmatore alcune
ulteriori informazioni: i dati processati.
I dati processati sono tutte quelle informazioni che il Kinect ricava attraverso lelabora-
zione dei dati negli stream, come ad esempio la provenienza della fonte sonora.
Esistono varie tecniche o algoritmi che utilizza il Kinect per processare i dati negli
stream, come la tecnica del beamforming utilizzata per la rilevazione della sorgente del
suono.
Il beamforming [18] consente di ottenere, in tempi estremamente brevi, una mappa
acustica dellarea in esame, sovrapposta allimmagine fotograca dellarea stessa. Grazie
2 kt rt+ 15
al tipo di rappresentazione oerto da questa tecnica quindi possibile vedere le direzioni
di provenienza del rumore e procedere allidenticazione delle sorgenti sonore presenti
nellambiente studiato, in modo rapido ed ecace.
2.4.5 Tracciamento dello scheletro
Figura 10: Tracciamento dello scheletro
Il tracciamento dello scheletro [19] permette al Kinect di riconoscere le persone e
seguire le loro azioni: vengono rilevate no ad un massimo di sei persone e soltanto di
due la periferica riesce ad identicarne completamente lo scheletro.
Lindividuazione di uno scheletro avviene tramite la rilevazione di alcuni punti del
corpo umano, mostrati in gura 15.
I punti dello scheletro vengono prima individuati dai sensori IR, poi salvati sotto forma
di misurazioni di distanza nello stream di profondit ed inne vengono processati per
ricavarne delle coordinate spaziali le quali vengono fornite allapplicazione utente ad
ogni sua nuova richiesta.
Il modo migliore per essere individuati dal Kinect mettersi di fronte ad esso e non
di prolo, dando lopportunit ai sensori IR di individuare tutti i punti del corpo, ad
una distanza tale da riuscire a entrare completamente nel campo di interazione della
periferica.[
2
]
2 si rimanda lo studio delle distanze ottimali alla lettura del paragrafo 2.3
2 kt rt+ 16
Figura 11: Scheletro
Figura 12: Coordinate spaziali
Le coordinate che il Kinect associa ad un punto nello spazio, sono espresse in metri
e fanno riferimento agli assi cartesiani del campo dinterazione della periferica, come
mostrato in gura 12. Nel caso in cui langolo di visione della periferica fosse inclinato
verso lalto o verso il basso attraverso il motore posto alla base gli assi cambiano e
seguono linclinazione.
Il Kinect ore anche due modalit di tracciamento dello scheletro [20]:
Default
Seated
In modalit di Default vengono tracciati tutti i punti dello scheletro, mentre in Seated
vengono presi in considerazione solo quelli della parte superiore del corpo, ignorando gli
altri. Ci risulta molto vantaggioso nei casi in cui le applicazioni sono gestite dallutente
con i suoi movimenti delle mani e delle braccia.
Si cita tra i vari esempi quello della smart tv, la quale non ha bisogno di conoscere il
2 kt rt+ 17
comportamento della parte inferiore del corpo perch linterazione avviene con gesti delle
mani, quindi lintroduzione della modalit Seated rende pi semplice e meno complessa
lapplicazione che non dovr calcolare tutti i punti.
2.4.6 Tecniche di acquisizione dei dati: Polling VS Eventi
Nei paragra precedenti stato pi volte detto la NUI concede laccesso ad una serie di
dati o informazioni che vengono prima raccolti dal kinect attraverso una serie di sensori,
poi salvati negli stream ed inne elaborati per ottenere quelli che vengono chiamati i dati
processati.
Non si visto per quale tecnica utilizzare per acquisire i dati che il Kinect continua-
mente cattura durante tutto il suo periodo di attivit.
Esistono due diverse tecniche di acquisizione delle informazioni dal Kinect che vengono
utilizzate dagli sviluppatori, queste sono :
La tecnica del Polling.
Utilizzando gli Eventi.
La tecnica del polling [21] consiste nel richiedere al Kinect dallapplicazione utente
periodicamente tutte le informazioni necessarie, questa attivit impegna molto del tempo
di funzionamento del processore (CPU) rallentando di conseguenza lintero sistema. Il
polling spesso utilizzato quando si vuole controllare qualcosa attraverso il Kinect, infatti
la richiesta periodica dei dati porta ad avere una conoscenza costante di tutto ci che
accade.
Una tecnica pi furba basata sulla programmazione ad eventi [22].
La programmazione a eventi un paradigma di programmazione dellinformatica. Mentre
in un programma tradizionale lesecuzione delle istruzioni segue percorsi ssi, che si ra-
micano soltanto in punti ben determinati predeniti dal programmatore, nei programmi
scritti utilizzando la tecnica a eventi il usso del programma largamente determinato
dal vericarsi di eventi esterni.
Invece di aspettare che una linea di codice impartisca al programma il comando di ela-
borare una certa informazione, il sistema predisposto per eseguire allinnito un loop
di istruzioni allinterno del quale vi sono disposizioni che vericano continuamente la
comparsa delle informazioni da elaborare (potrebbe trattarsi della creazione di un le
in una certa cartella o della pressione di un tasto del mouse o della tastiera), e quindi
lanciare lesecuzione della parte di programma scritta appositamente per gestire levento
in questione. Programmare a eventi vuol dire, quindi, ridenire in modo personalizzato
2 kt rt+ 18
le azioni di default con cui il sistema risponde al vericarsi di un certo evento.
Utilizzando la programmazione ad eventi si consente allapplicazione di acquisire i da-
ti solo in conseguenza dello scatenarsi di un evento; questo comportamento snellisce
lapplicazione utente che invece di chiedere continuamente le informazioni, dovr solo
attendere che levento si verichi. Nellapplicazione per la tesi sono state utilizzate in
situazioni diverse, in modo da sfruttare al meglio queste tecniche.
Nel prossimo capitolo verr introdotta e spiegata in dettagli lapplicazione per la tesi
chiamata: valutazione della postura.
Inizialmente verr spiegato il funzionamento dellapplicazione, poi sar analizzata la sua
struttura,i pattern utilizzati nonch gli algoritmi di valutazione implementati.
3 APPLI CAZI ONE
3.1 vttt+tztor rrttt ros+tat
Si ampiamente discusso nel capitolo 1 delle problematiche che possono insorgere
con linvecchiamento e di come possibile creare tecnologie atte al miglioramento della
qualit della vita e allassistenza delle persone che presentano disturbi motori o psicosici.
La mia applicazione mira ad orire un servizio aggiuntivo al robot di telepresenza
del progetto Gira con lo scopo di prevenzione dei danni che una postura scorretta pu
portare, con il tempo, ad una persona anziana. Lapplicazione, per raggiungere questo
scopo, fa svolgere alla persona anziana una sequenza di tre esercizi motori:
1. Camminata frontale
2. Camminata Laterale
3. Equilibrio
Nella camminata frontale la persona dovr eettuare qualche passo in avanti e indie-
tro mantenendo una postura eretta per tutta la durata dellesercizio, al termine verr
eettuata una valutazione in base alla postura tenuta e alla distanza percorsa.
Nel secondo esercizio, la camminata laterale, la persona dovr muoversi lateralmente
per tutta la durata dellesercizio, al termine, analogamente al primo test, verr eettuata
una valutazione in base alla postura tenuta e ai metri percorsi.
Nel terzo ed ultimo test, la persona sar messa alla prova con un esercizio di equilibrio:
essa dovr chiudere gli occhi, sollevare una gamba e mantenersi in questa posizione
tenendosi in equilibrio per tutto il tempo dellesercizio.
La valutazione che viene svolta, terminato lesercizio, oltre ad essere basata sulla postura
tenuta terr conto anche dellaltezza del piede sollevato durante il test.
Gli algoritmi che sono stati usati per valutare i test della postura saranno trattati nello
specico nel paragrafo 3.3.2, per avere un idea di come vengono dati i punteggi, basti
pensare che il punteggio massimo, per la postura, sar dato a coloro che terranno la
schiena, il busto e la testa, in maniera pi eretta possibile per tutto il test, mentre il
19
3 trrttttzt or 20
punteggio per la distanza verr dato confrontando i metri percorsi con un valore ricavato
sperimentalmente. Per quanto riguarda il test di equilibrio, viene dato un punteggio
maggiore a chi riesce a tenere la gamba pi sollevata possibile, il limite di altezza massimo
raggiunto tenendo il piede sollevato no allaltezza della ginocchia dellaltra gamba
Una volta terminato lo svolgimento dei tre test, verr visualizzata una pagina di
riepilogo, dove verranno mostrati tutti i risultati ottenuti con laggiunta di un commento
tecnico dato in base alla votazione presa, allo scopo di informare tempestivamente la
persona anziana sulla propria condizione posturale, rendendola cos capace di capire
autonomamente lurgenza o la necessit di cure.
Terminato il riepilogo i risultati vengono salvati permanentemente su di un le, allo
scopo di mantenere una cronologia dei risultati ottenuti, che potranno poi essere visua-
lizzati dal medico attraverso un graco che ne mostrer il trend, ovvero landamento nel
tempo delle condizioni posturali della persona. Il medico analizzando il graco avr, oltre
alla conoscenza delle condizioni eettive dellanziano, la possibilit di prescrivere una cu-
ra preventiva notando eventualmente un andamento negativo del graco corrispondente
ad un peggioramento delle condizioni siche del paziente.
3.2 s+atr+t
Nello sviluppare questa applicazione stato necessario utilizzare i seguenti strumenti:
Il Kinect e il suo SDK
Microsoft Visual Studio
C#
In principio per poter valutare la postura necessario lutilizzo di uno strumento che
sia in grado di identicare i punti del corpo umano, questo reso possibile con lutilizzo
del Kinect (approfondito nel capitolo 2).
Il Kinect, essendo un prodotto della Microsoft, ha portato ad una facile scelta dellam-
biente di sviluppo: Microsoft Visual Studio.
Microsoft Visual Studio [23] un ambiente di sviluppo integrato (Integrated de-
velopment environment o IDE [24] ) multi-linguaggio: un software che, in fase di
programmazione, agevola i programmatori nello sviluppo del codice sorgente di un
programma.
3 trrttttzt or 21
Visual Studio consiste di pi componenti software:
Un editor
Un compilatore, che a dierenza di quelli classici, converte il codice sorgente (C#)
in codice IL
1
un potente debugger interno per il rilevamento e la correzione degli errori logici
nel codice in runtime e fornisce diversi strumenti per lanalisi prestazionale.
Un tool di building automatici
2
Visual Studio supporta attualmente diversi tipi di linguaggio, quali C, C++, C#, F#,
Visual Basic .Net e ASP .Net, e che permette la realizzazione di applicazioni, siti web,
applicazioni web e servizi web, inoltre Visual Studio una multipiattaforma: con esso
possibile realizzare programmi per server, workstation, pocket PC, smartphone e,
naturalmente, per i browser.
Tra i tanti i linguaggi messi a disposizione da Visuali Studio, alla ne, stato utilizzato
C# [25] un linguaggio di programmazione orientato agli oggetti sviluppato da Microsoft
allinterno delliniziativa .NET, e successivamente approvato come standard ECMA.
La sintassi del C# prende spunto sia da quella di Delphi (hanno il medesimo autore, ovvero
Anders Hejlsberg), di C++, di Java e di Visual Basic per gli strumenti di programmazione
visuale e per la sua semplicit. Il risultato un linguaggio pi scevro di simbolismo
rispetto a C++, con meno elementi decorativi rispetto a Java, ma comunque orientato
agli oggetti in modo nativo.
Il vero motivo per cui stata fatta questa scelta la somiglianza con il linguaggio Java,
di cui ho una certa familiarit, tuttavia esistono alcune importanti dierenze fra i due
linguaggi. Quella maggiormente visibile certamente la presenza in C# di molti costrutti
(alcuni dei quali sono reminiscenze del C++) che in Java sono stati deliberatamente vietati.
I sostenitori del C# aermano che essi rendono il codice pi chiaro; i sostenitori del Java
aermano che proprio la presenza di un gran numero di parole-chiave e di regole da
ricordare rende il linguaggio pi dicile da imparare e utilizzare.
1 IL un nuovo linguaggio progettato per essere convertito in modo eciente in codice macchina nativo, esso
ad un livello di astrazione pi basso rispetto al codice sorgente (C#) , ma pi in alto rispetto ai linguaggi
macchina
2 insieme di strumenti che facilitano e automatizzano unampia variet di compiti che gli sviluppatori software
fanno nelle loro attivit quotidiane
3 trrttttzt or 22
Altre dierenze con il linguaggio Java sono le seguenti:
Java utilizza i commenti Javadoc-sintax per generare la documentazione dal codice
sorgente, mentre C# utilizza la sintassi XML nei commenti per lo stesso scopo.
Quello che in Java chiamato package, in C# viene chiamato namespace o spazio
di nomi. Un ulteriore livello di organizzazione in C# costituito dagli assembly,
che possono contenere al proprio interno diversi spazi di nomi (class).
3.3 rt++ra
Allo scopo di descrivere lapplicazione, fondamentale lintroduzione ai pattern che
sono stati utilizzati.
Nellambito dellingegneria del software il design pattern [26] un concetto che pu
essere denito come una soluzione progettuale generale a un problema ricorrente. Esso
non una libreria o un componente di software riusabile, quanto piuttosto una descrizio-
ne o un modello da applicare per risolvere un problema che pu presentarsi in diverse
situazioni durante la progettazione e lo sviluppo del software. Si possono paragonare ad
elementi architettonici che possono essere usati nello sviluppo di software diversi, ma
accomunati da problematiche simili.
Un design pattern formato da:
il nome, costituito da una o due parole che siano il pi possibile rappresentative
del pattern stesso;
il problema, ovvero la descrizione della situazione alla quale si pu applicare il
pattern. Pu comprendere la descrizione di classi o di problemi di progettazione
specici, come anche una lista di condizioni sul perch sia necessario lutilizzo del
pattern;
la soluzione, che descrive gli elementi costitutivi del progetto con le relazioni e
relative implicazioni, senza per addentrarsi in una specica implementazione.
Il concetto di presentare un problema astratto e la relativa congurazione di
elementi adatta a risolverlo;
le conseguenze, i risultati e i vincoli che derivano dallapplicazione del pattern.
Sono fondamentali in quanto possono essere lago della bilancia nella scelta dei
pattern: le conseguenze comprendono considerazioni di tempo e di spazio, possono
descrivere implicazioni del pattern con alcuni linguaggi di programmazione e
limpatto con il resto del progetto.
3 trrttttzt or 23
I design pattern possono essere classicati con diversi criteri, i pi comuni dei quali
sono quelli che evidenziano il tipo di problema che si cerca di risolvere. Il tipo di problema
pu essere legato ad uno specico dominio progettuale (telecomunicazioni, reti, software.)
oppure, pi comunemente, al problema progettuale in senso pi ampio (nellingegneria
del software, ad esempio, si pu parlare di creazione, comportamento, navigazione di
oggetti o strutture dati).
Nel libro
3
della "banda dei quattro" si identicano 23 tipi di design pattern, suddivisi in
tre categorie:
strutturali, ad esempio Facade, consentono di riutilizzare degli oggetti esistenti
fornendo agli utilizzatori uninterfaccia pi adatta alle loro esigenze.
creazionali, ad esempio Singleton, nascondono i costruttori delle classi e metto-
no dei metodi al loro posto creando uninterfaccia. In questo modo si possono
utilizzare oggetti senza sapere come sono implementati.
comportamentali, ad esempio Strategy, forniscono soluzione alle pi comuni
tipologie di interazione tra gli oggetti.
Esistono inoltre altri tipi di pattern che per non operano a livello di design del sistema,
motivo per cui non possono essere chiamati designpattern. Essi sono:
Pattern Architetturali, ad esempio MVC, operano ad un livello diverso (e pi ampio)
rispetto ai design pattern, ed esprimono schemi di base per impostare lorganizza-
zione strutturale di un sistema software. In questi schemi si descrivono sottosistemi
predeniti insieme con i ruoli che essi assumono e le relazioni reciproche.
Pattern di Metodologia
Pattern di Concorrenza, operano allo scopo di mantenere sincronizzato lo stato dei
dati quando pi processi eseguono contemporaneamente delle attivit su di essi.
I pattern pi importanti utilizzati per la creazione dellapplicazione sono stati:
Il pattern architetturale:
MVC (Model View - Controller)
I design pattern :
Strategy
3 Design Patterns: Elements of Reusable Object-Oriented Software di Erich Gamma, Richard Helm, Ralph
Johnson e John Vlissides.
3 trrttttzt or 24
Singleton
Facade
Repository
3.3.1 MVC
Larchitettura dellapplicazione stata fatta utilizzando il pattern architetturale MVC.
Il Model-View-Controller [27] (MVC), in informatica, un pattern architetturale molto
diuso nello sviluppo di sistemi software, in particolare nellambito della programma-
zione orientata agli oggetti, in grado di separare la logica di presentazione dei dati dalla
logica applicativa.
Originariamente impiegato dal linguaggio Smalltalk, il pattern stato esplicitamente
o implicitamente sposato da numerose tecnologie moderne, come framework basati su
PHP (Symfony, Zend Framework, CakePHP, Yii framework, CodeIgniter), su Ruby (Ruby
on Rails), su Python (Django, TurboGears, Pylons, Web2py, Zope), su Java (Swing, JSF e
Struts), su Objective C o su .NET.
Il pattern basato sulla separazione dei compiti fra i componenti software che
interpretano tre ruoli principali:
il model fornisce i metodi per accedere ai dati utili allapplicazione.
il view visualizza i dati contenuti nel model e si occupa dellinterazione con utenti
e agenti.
il controller riceve i comandi dellutente (in genere attraverso il view) e li attua
modicando lo stato degli altri due componenti.
Figura 13: Tipica interazione tra componenti del pattern MVC
Nellapplicazione i vari ruoli sono intrepretati da :
pagine C# che costituiscono linsieme di classi del model e dei controller.
3 trrttttzt or 25
pagine XAML che formano il view.
I dettagli delle interazioni fra questi tre oggetti software dipendono molto dalle tec-
nologie usate (linguaggio di programmazione, eventuali librerie, middleware e via di-
cendo) e dal tipo di applicazione (per esempio se si tratta di unapplicazione web, o di
unapplicazione desktop).
Un altra classicazione che si deve operare riguarda il model. Le classi del model
vengono identicate su pi livelli in base al loro compito:
Domain
Facade
Persistence
Nello strato di Domain troviamo linsieme delle classi che si occupa della pura logica
applicativa, di questo insieme fanno parte le seguenti classi scritte in C#:
Kinect, la classe principale del Model che si occupa di interagire con la periferica
attraverso linvocazione dei metodi della libreria Microsoft.Kinect. Tra i tanti metodi
che ore sono di rilievo quelli che permettono di avviare il Kinect e di memorizzare
in una lista tutti gli scheletri
4
tracciati durante lesecuzione del test, che in seguito
verranno analizzati.
Option, classe che si occupa di gestire le opzioni dellapplicazione.
Result, classe che si occupa di gestire i risultati ottenuti durante lesecuzione dei
vari test.
EvaluationStrategy, classe astratta che estende tutte le classi che implementano gli
algoritmi di valutazione della postura.
BalanceStrategy, classe che implementa lalgoritmo di valutazione della
postura per il test di equilibrio.
WalkStrategy, classe astratta che estende un sottoinsieme di classi che im-
plementano gli algoritmi di valutazione della postura medianti esercizi di
camminata.
ForwardStrategy, classe che implementa lalgoritmo di valutazione della
postura per il test di camminata frontale.
4 per scheletro si intende linsieme delle coordinate riferite ai punti tracciati del corpo umano, il nome preso
spunto dalloggetto "Skeleton" che eettivamente contiene queste coordinate
3 trrttttzt or 26
LateralStrategy, classe che implementa lalgoritmo di valutazione della
postura per il test di camminata laterale.
Nel livello intermedio tra la pura logica applicativa e la persistenza, troviamo lo strato
di "Facade" dove ci sono tutte le classi che fanno da interlocutori tra i controller e la
persistenza. Difatti le classi che vi risiedono possono anche essere associate al livello
di Domain ma sono state distinte per il loro specico ruolo. Di questo livello, per la
versione attuale dellapplicazione, presente soltanto una classe:
FacadeResult, classe che fornisce una serie di metodi per la gestione della persi-
stenza, essa lunica a conoscenza di come vengono memorizzati i dati, rendendo
trasparente il livello di persistenza alle altre classi.
Ed inne vi troviamo il livello della Persistenza, contenente le classi che implementano
i metodi CRUD, come per il livello di facade qui vi troviamo soltanto una classe:
RepositoryResult, interfaccia comune a tutte le classi che implementano i metodi
CRUD
5
ResultFile, classe della persistenza che ore i metodi CRUD su un le di testo.
3.3.2 Strategy
Una problematica di progettazione da trattare concerne la denizione della logica per
la determinazione del punteggio dei test.
La strategia di determinazione della votazione cambia a seconda del test scelto, infatti
oltre al risultato per la postura che comune a tutti gli esercizi, il test per lequilibrio non
tiene in considerazione della distanza percorsa che, al contrario, un fattore rilevante sui
test di camminata frontale e laterale.
Il pattern Strategy il pi adatto ad arontare questi problemi consigliando di denire
ciascun algoritmo di valutazione in una classe separata con uninterfaccia comune.
Poich il comportamento per la determinazione del punteggio dei test varia in base alla
strategia di valutazione (o algoritmo), si creano diverse classi, ciascuna con un metodo
polimorfo denominato "run" .
Un oggetto strategia associato a un oggetto contesto, ovvero quello su cui va applicato
lalgoritmo. In questo caso loggetto contesto "Skeleton" che mette a disposizioni
linsieme dei punti del corpo umano identicati dal Kinect, inoltre fornisce una serie di
metodi che permettono di capire se i punti sono stati tracciati e in quel caso di restituirne
5 i metodi CRUD (Create Read Update Delete) sono le quattro funzioni base per la memorizzazione persistente
3 trrttttzt or 27
le coordinate spaziali.
Ciascun "run" utilizza loggetto contesto "Skeleton" cosicch loggetto strategia di deter-
minazione del punteggio possa reperire tutte le coordinate dei punti del corpo umano
che servono per la valutazione. Limplementazione di ciascun metodo "run" sar diversa
in base allalgoritmo di valutazione della postura.
In ausilio a "run" stato implementato un altro metodo polimorfo "isPossible" il cui scopo
vericare che tutti i punti necessari alla valutazione sono eettivamente disponibili,
cio che sono stati tracciati dal Kinect e che sono accessibili attraverso linvocazione dei
metodi di "Skeleton" .
Come stato detto, ogni test ha un proprio algoritmo di valutazione della postura;
questo vero in parte poich lalgoritmo che valuta la postura per la camminata laterale
e quella frontale sono identici, in altre parole valutano lesercizio svolto allo stesso modo.
Nellimmagine 14 viene mostrata la gerarchia delle classi strategia, si pu notare che
vengono comunque distinte le due classi "Lateral" e "Forward" . La distinzione delle
due classi viene mantenuta, anche se al loro interno non denito il metodo "run" (il
quale risiede nella superclasse "WalkStrategy" ), perch orono altri metodi comuni ma
con dierente implementazione, come ad esempio il metodo "getNome" che restituisce
il nome della strategia, questo metodo viene utilizzato dal controller "Applications" per
capire che strategia si sta utilizzando e quindi la possibilit di scegliere la prossima da
eseguire.
In denitiva vi sono soltanto due algoritmi di valutazione da analizzare:
per la camminata, implementato nella classe astratta "WalkStrategy" .
per lequilibrio, implementato nella classe "BalanceStrategy" .
Algoritmi di valutazione della postura
Un algoritmo un procedimento che risolve un determinato problema attraverso un
numero nito di passi. Un problema risolubile mediante un algoritmo si dice computabile.
Il primo algoritmo che viene analizzato relativo allesercizio per la camminata che
tiene in considerazione due fattori:
la postura tenuta.
la distanza percorsa.
Per il calcolo del punteggio in base alla postura tenuta durante lesercizio si tenga
conto delloggetto contesto "Skeleton" ; infatti esso ci garantisce libero accesso a tutte le
3 trrttttzt or 28
Figura 14: Gerarchia degli oggetti strategia
informazioni relative ai punti tracciati del corpo umano, restituendoci le loro coordinate.
In questo algoritmo i punti, mostrati in gura 15, analizzati per il calcolo della postura
sono:
head.
should center.
spine.
hip center.
Una volta appurato che i punti necessari alla valutazione della postura sono stati
rilevati, attraverso linvocazione del metodo "isPossible" , si passa alla loro valutazione.
Al ne di comprenderne la modalit ci si ponga la domanda: Come dare un voto alla
posizione di due punti nello spazio?
Avere una postura corretta mentre si cammina signica che la testa ed il corpo assumono
una posizione eretta, in altre parole i punti devono formare una linea perpendicolare al
pavimento.
Dopo innumerevoli tentativi per trovare la formula corretta si giunti alla seguente
conclusione:
3 trrttttzt or 29
Figura 15: Punti dello scheletro rilevati dal Kinect
(dy / l)
g
dove :
dy: la dierenza in modulo delle ordinate dei due punti.
l: la distanza tra due punti nello spazio, calcolata con la seguente formula.
Figura 16: Formula della distanza tra due punti nello spazio
g: il grado di sensibilit della valutazione, pi grande il numero pi sensibile
il test a variazioni della postura.
La possibile implementazione del metodo che calcola il voto per la postura tra due
punti la seguente:
Codice 3.1: codice del metodo che calcola il voto per la postura tra due punti
protected double calculateEvaluation(SkeletonPoint top, SkeletonPoint bottom)
{
/
*
si calcola il modulo delle differenze delle coordinate
*
/
double dx = Math.Abs(top.X - bottom.X);
double dy = Math.Abs(top.Y - bottom.Y);
double dz = Math.Abs(top.Z - bottom.Z);
/
*
si calcola la distanza tra i due punti
*
/
double i = Math.Sqrt(Math.Pow(dx, 2) + Math.Pow(dy, 2) + Math.Pow(dz, 2));
/
*
si calcola il rapporto tra la differenza delle Y e la lunghezza
*
/
double coeff = dy / i;
/
*
si ricava il grado di sensibilita
*
/
int sensibility = this.getGradeOfSensibility();
/
*
si restituisce il punteggio
*
/
return Math.Pow(coeff, sensibility);
}
3 trrttttzt or 30
Il valore ottenuto un numero compresto tra 0 ed 1, moltiplicandolo per 10 si ottiene
un punteggio compreso tra 0 e 10. Ci rappresenta solo una prima approssimazione
del calcolo, fatta per soli due punti,che pu essere ranato se si vuole ottenere una
valutazione completa della postura di uno scheletro, occorre calcolare la media dei
punteggi calcolati tra i punti:
head - should center
should center - spine
spine - hip center
La possibile implementazione del voto complessivo per la postura di un singolo
scheletro la seguente:
Codice 3.2: codice del metodo per il calcolo della postura di un singolo scheletro
protected double getPostureEvaluation(Skeleton skeleton)
{
/
*
Si ottiene il coefficiente in base alla distanza
*
/
double tot = 0;
/
*
Si ottengono i vari oggetti SkeletonPoint, che contengono le coordinate dei
relativi punti
*
/
SkeletonPoint head = skeleton.Joints[JointType.Head].Position;
SkeletonPoint shoulderCenter = skeleton.Joints[JointType.ShoulderCenter].Position;
SkeletonPoint spine = skeleton.Joints[JointType.Spine].Position;
SkeletonPoint hip
_
center = skeleton.Joints[JointType.HipCenter].Position;
/
*
si calcolano i punteggi tra i vari punti dello scheletro
*
/
tot += this.calculateEvaluation(head, shoulderCenter);
tot += this.calculateEvaluation(shoulderCenter, spine);
tot += this.calculateEvaluation(spine, hip
_
center);
/
*
si restituisce la media dei voti
*
/
return (tot / 3)
*
10;
}
Siamo nalmente giunti al punteggio dato dalla postura di uno scheletro, tuttavia
questo risulta non bastare visto che, durante tutto il tempo di esecuzione del test, il Kinect
cattura molti scheletri; per analizzarli tutti durante la durata dellesercizio, gli scheletri
catturati vengono memorizzati in una lista. Una volta terminato lesercizio vengono
valutati attraverso un ciclo iterativo, che inoltre permette di calcolare i metri percorsi
come dierenza della distanza tra uno scheletro e quello precedente nella lista.
Lultimo aspetto da tenere in considerazione la distanza percorsa, infatti una persona
che resta immobile non pu pretendere il punteggio massimo anche se la sua postura
impeccabile.
Per tener conto dei metri percorsi il risultato medio delle posture viene moltiplicato per
un coeciente calcolato in base alla distanza percorsa.
3 trrttttzt or 31
Il calcolo del coeciente lo stesso per i due algoritmi di valutazione della postura nelle-
sercizio della camminata, ma varia il valore della velocit ottimale ( un altra caratteristica
che dierenzia "Lateral" da "Forward" ).
La formula che viene utilizzata per il calcolo del coeciente la seguente:
d / (t v)
dove:
d la distanza percorsa
t il tempo di esecuzione del test
v la velocit ottimale di camminata dellesercizio. Questo valore stato calcolato
sperimentalmente e varia tra lalgoritmo di valutazione "Lateral" e "Forward"
Una posssibile implementazione del metodo di valutazione della postura nel test della
camminata la seguente :
Codice 3.3: codice del metodo per la valutazione della postura nel test della camminata
public override double run()
{
/
*
Si inizializzano le variabili
*
/
double tot = 0;
double distance = 0;
/
*
Si prende la lista con tutti i scheletri memorizzati dal Kinect
*
/
List<Skeleton> skeletons = this.getSkeletons();
Skeleton old = null;
/
*
Ciclo Iterativo sulla lista degli scheletri
*
/
foreach (Skeleton s in skeletons)
{
/
*
Si sommano i risultati della postura di tutti gli scheletri
*
/
tot += this.getPostureEvaluation(s);
/
*
Si calcola la distanza percorsa
*
/
if (old != null)
{
SkeletonPoint n = s.Joints[JointType.HipCenter].Position;
SkeletonPoint o = old.Joints[JointType.HipCenter].Position;
distance += Math.Sqrt(Math.Pow(n.X - o.X, 2) + Math.Pow(n.Y - o.Y, 2) +
Math.Pow(n.Z - o.Z, 2));
}
old = s;
}
/
*
Si ottiene il coefficiente in base alla distanza
*
/
double coeff = this.getCoefficient(distance);
/
*
Si ottiene il numero di scheletri della lista
*
/
int cont = skeletons.Count();
/
*
Si fa la media dei punteggi e la si moltiplica per il coefficiente
*
/
double evaluation = ((tot / cont)
*
coeff);
3 trrttttzt or 32
/
*
Si restituisce il valore ottenuto approssimato alla prima cifra decimale
*
/
return Math.Round(evaluation, 1);
}
Lultimo algoritmo di valutazione della postura concepito in funzione del test di
equilibrio: la persona esaminata dovr tenersi in equilibrio con una gamba sollevata
mantenendo gli occhi chiusi (lapplicazione non verica se eettivamente gli occhi sono
chiusi, ma il programma stato sviluppato allo scopo di valutare e non di vericare che
lesercizio svolto in maniera giusta, sta alla persona rispettare le istruzioni date).
bigskip
La valutazione di questo test si basa su due fattori:
la postura tenuta.
laltezza della gamba sollevata.
Come per lalgoritmo precedente, il calcolo della postura avviene allo stesso modo
con una sola dierenza: il numero di punti del corpo dove avviene la valutazione
sono aumentati, infatti viene calcolata la postura anche dei punti riguardanti la gamba
portante:
hip - knee
knee - ankle
Oltre alla postura, che in questo test vale otto punti su dieci, viene valuta con due
punti anche laltezza del piede sollevato durante lesercizio.
Laltezza con cui vengono accreditati i due punti e pari al ginocchio della gamba portante.
Per il calcolo di questa altezza viene fatta una semplice dierenza tra lordinata del
ginocchio (della gamba portante) e lordinata del piede (della gamba sollevata).
Il metodo di valutazione della postura nellesercizio di equilibrio molto pi semplice,
non avendo bisogno del calcolo della distanza percorsa.
Una sua possibile implementazione la seguente:
Codice 3.4: codice del metodo per la valutazione della postura nel test di equilibrio
public override double run()
{
double tot = 0;
/
*
Si prende la lista con tutti i scheletri memorizzati dal Kinect
*
/
List<Skeleton> skeletons = this.getSkeletons();
/
*
Ciclo Iterativo su tutti gli scheletri
*
/
3 trrttttzt or 33
foreach (Skeleton s in skeletons)
{
/
*
Si sommano tutti i risultati della postura dei scheletri
*
/
tot += this.getPostureEvaluation(s);
}
/
*
Si ottiene il numero di scheletri della lista
*
/
int cont = skeletons.Count();
/
*
Si fa la media dei punteggi
*
/
double evaluation = (tot / cont);
/
*
Si restituisce il valore ottenuto approssimato alla prima cifra decimale
*
/
return Math.Round(evaluation,1);
}
3.3.3 Singleton
Il Singleton un design pattern creazionale che ha lo scopo di garantire che di una
determinata classe venga creata una e una sola istanza, e di fornire un punto di accesso
globale a tale istanza.
Limplementazione pi semplice di questo pattern prevede che la classe singleton abbia
un unico costruttore privato, in modo da impedire listanziazione diretta della classe.
La classe fornisce inoltre un metodo "getter" statico che restituisce una istanza della
classe (sempre la stessa), creandola preventivamente o alla prima chiamata del metodo,
e memorizzandone il riferimento in un attributo privato anchesso statico. Il secondo
approccio si pu classicare come basato sul principio della lazy initialization (lette-
ralmente "inizializzazione pigra" ) in quanto la creazione dellistanza della classe viene
rimandata nel tempo e messa in atto solo quando ci diventa strettamente necessario (al
primo tentativo di uso).
Il pattern Singleton stato utilizzato, ai ni dellapplicazione, per la creazione della
classe "Option" la quale ha il compito di ricordarsi delle seguenti opzioni:
il tempo di caricamento dei test
il tempo di esecuzione dei test
il grado di sensibilit della valutazione dei test
laltezza minima che il piede deve avere, per ritenersi sollevato.
Questi dati devono essere conservati e acceduti da molte classi, per questo si ricorso
allutilizzo del pattern Singleton. In alternativa sarebbe stato necessario passarli come
parametri ad un insieme molto vasto di classi.
3 trrttttzt or 34
3.3.4 Facade
Nellapplicazione per la valutazione della postura di notevole interesse disaccoppiare
e nascondere lo strato di persistenza dagli altri componenti, cos da avere la possibilit di
scegliere il modo in cui salvare i dati.
Tutto ci reso possibile attraverso luso del pattern facade sulla classe "FacadeResult" .
Una facade un oggetto "front-end" che rappresenta il singolo punto di entrata ai servizi
di un sottosistema, che in questo caso il livello di persistenza.
Il pattern fornisce inoltre Protected Variations da cambiamenti nellimplementazione
della persistenza, in altre parole limplementazione e gli altri componenti della persistenza
non possono essere visti da oggetti esterni, cos si pu cambiare il livello di persistenza
senza dover modicare altro. I metodi che ore la facade sono:
havePoints: verica se il le esiste e contiene almeno una serie di risultati
save: salva il risultato
getSeriesPoints: restituisce una lista con tutti i risultati relativi ad un test
clear: cancella i risultati precedentemente salvati.
Allinterno di un qualsiasi metodo della Facade viene scelto quale oggetto utilizzare
che abbia la responsabilit di salvare i dati, non avendo altre alternative, essa utilizza
"ResultFile" che ha il compito di memorizzare i risultati allinterno di un le di testo;
nel caso in cui si voglia cambiare questa modalit si dovranno eettuare delle piccole
modiche allinterno di ciascun metodo.
3.3.5 Repository
Nel livello di persistenza dellapplicazione, allo stato attuale, stata creata soltanto
una classe "ResultFile" che ore i seguenti metodi CRUD su un le di testo:
exists: verica se esiste il le di testo.
isEmpty: verica se vuoto il le di testo.
append: aggiunge una riga di risultati al le di testo.
read: legge tutti i risultati dal le di testo.
clear: cancella il le di testo.
3 trrttttzt or 35
Grazie a questa classe quindi possibile salvare i risultati su un le di testo e leggerli
quando si vuole tracciarne il graco.
Guardando al futuro, sar necessario implementare nuovi classi che diano la possibilit
di salvare i dati in maniera dierente, ad esempio utilizzando una base di dati.
A questo scopo si ricorso allutilizzo del pattern Repository sulla classe "RepositoryRe-
sult" .
Il pattern Repository deriva dal pattern Facade, che astrae ulteriormente il livello di
persistenza dagli altri creando un interfaccia comune a tutti gli oggetti che hanno la
responsabilit di salvare, ciascuno in maniera dierente, i dati. Questo garantisce la
possibilit, nel livello di Facade, di cambiare il modo con cui vengono salvati i dati, senza
ricorrere a ingenti modiche del codice.
3.4 tttssr ktrt+
Lunica classe, che vale la pena esaminare "Kinect" che stata implementata allo
scopo di fornire diversi metodi che interagiscono, attraverso la libreria Microsoft.Kinect,
con la periferica e permettono laccesso ai dati che il sensore salva continuamente.
Lo stato di questo oggetto costituito principalmente dalla strategia, con cui vengono
valutati gli oggetti "Skeleton" , che viene identicata alla creazione delloggetto stesso.
I metodi che compono la classe, tralasciando quelli meno importanti, sono:
getKinect: restituisce loggetto "KinectSensor
6
" connesso al robot
start: inizializza il Kinect allacquisizione dei dati: ogni volta che un nuovo oggetto
"Skeleton" viene identicato lo si memorizza in una lista.
stop: chiude la connessione con il sensore e restituisce il risultato della postura,
ricavato mediante linvocazione del metodo "run" delloggetto strategia di valu-
tazione che analizza la lista formata dagli oggetti "Skeleton" registrati durante
lesecuzione del test.
checkSkeleton: verica che lo "Skeleton" passato come parametro abbia identicato
tutti i punti necessari alla valutazione della postura; in caso aermativo aggiunge
lo "Skeleton" in una lista.
6 oggetto della libreria Microsoft.Kinect che permette laccesso al sensore e ai suoi stream di dati
3 trrttttzt or 36
kinect_SkeletonFrameReady: levento
7
che viene invocato ogni volta che il Kinect
acquisisce un nuovo oggetto "Skeleton"
rightOrientation: controlla se lorientazione corrente del Kinect sia giusta, che
lasse di riferimento z sia parallelo al pavimento. Condizione necessaria anch le
coordinate, riferiti ai punti dello scheletro, siano corrette per lanalisi della postura.
3.5 raontrt
Un aspetto di notevole importanza da prendere in considerazione la gestione di
eventuali problemi che si possono vericare durante lesecuzione del programma, tra i
quali:
1. Il Kinect non viene rilevato dallapplicazione, un problema di carattere tecnologico
che causato principalmente quando la periferica non collegata al robot
2. Lorientazione del Kinect non corretta, se lasse Z di riferimento non parallelo
al pavimento, si rilevano delle coordinate sbagliate causando una valutazione non
corretta.
3. Il Kinect non riesce a tracciare i punti necessari alla valutazione, una circostanza
che si riscontra usualmente quando la persona esce dal campo visivo del sensore .
4. Durante il test di equilibrio, la gamba non viene sollevata.
Questi problemi non permettono la corretta esecuzione dellapplicazione, per questo
motivo prima di ogni test si controlla che tutto sia in regola attraverso linvocazione di
metodi di supporto. Nel caso fosse rilevato un errore, lesercizio viene bloccato e viene
visualizzata una scritta inerente al problema riscontrato.
Una verica completa fatta prima di ogni test, eccezion fatta per gli ultimi due errori
che sono monitorati anche durante lesecuzione dellesercizio posturale.
7 un particolare metodo che viene invocato automaticamente al vericarsi di una condizione
4 CONCLUSI ONI
4.1 ttst rtso
Lapplicazione prevede 3 scenari di caso duso principali:
Per eettuare i test.
Per vedere il trend di risultati.
Per cambiare le opzioni.
Tutti i casi duso vengono inizializzati con una pagina principale, la MainPage, essa
composta dal titolo dellapplicazione e da due link che, una volta cliccati, portano alla
pagina dei test oppure alla visualizzazione del trend di risultati.
Il caso duso pi importante relativo allo svolgimento dei test di postura, che prevede
lesecuzione dei tre esercizi posturali e le loro valutazioni che al termine verranno salvate
su un le.
ll ciclo di vita del primo caso duso con i relativi passi sono mostrati in gura 17.
A partire dalla MainPage, il caso duso per lesecuzione dei test prevede i seguenti
passaggi :
1. Una volta cliccato sul link per avviare i test dalla MainPage, si visualizzer la
pagina dei test, dove ci sar una breve descrizione di tutti gli esercizi da svolgere.
2. In seguito al click del bottone "Start" in basso si verr spostati nella prima pagina
dei test : lesercizio per la camminata frontale, dove verranno visualizzate ancora
una volta le istruzioni relative allesercizio.
3. Un volta accettato di eseguire il test, la pagina che si caricher sar quella nominata
Applications, qui verr visualizzato un conto alla rovescia che sta ad indicare il
tempo di attesa per il test, una volta arrivato a zero partir un secondo conto alla
rovescia, questultimo testimonier il fatto che il test in esecuzione. Terminato
il tempo, il test della camminata frontale terminato. In questo passo viene
inizializzato loggetto "Result" che sar passato come parametro ad ogni pagina
seguente no alla sua memorizzazione.
37
4 totttst ot 38
Figura 17: Ciclo di vita dellapplicazione per eettuare i Test
4. Terminato il test, loggetto "Result" viene settato con il risultato dellesercizio
ottenuto per poi passare al secondo esercizio: la camminata laterale, in questa
pagina vengono ricapitolate le istruzioni da seguire per il test.
5. Avviato il test si ritorna alla pagina Applications che, come nel passo 3, far
eseguire lesercizio.
6. Come nel passo 2 e 4, terminato il test, loggetto "Result" viene settato con il
risultato dellesercizio ottenuto per poi passare alla pagina con tutte le istruzioni
relative al test, in questultimo caso quello di equilibrio.
7. Analogamente ai passi 3 e 5, si accede alla pagina Applications per eseguire questa
volta il test di equilibrio
8. Terminato lultimo test, si eettuer lennesimo settaggio alloggetto "Result" con
il punteggio appena ottenuto per poi passare alla pagina, Results, dove verranno
riepilogati tutti i risultati ottenuti insieme ad un suggerimento associato al voto
preso.
9. Nellultimo passaggio si ritorna alla schermata iniziale, contemporaneamente al
cambio di pagina, i risultati ottenuti vengono salvati su un le di testo.
4 totttst ot 39
Il secondo caso duso relativo alla visualizzazione del graco dei risultati ottenuti; il
ciclo di vita con i relativi passi sono mostrati in gura 18
Figura 18: Ciclo di vita dellapplicazione per vedere il Trend dei risultati
Lunico passaggio per la visualizzazione del graco per il trend di risultati ottenuti :
1. Con un semplice click sul link per il trend, si aprir una nestra dove verr mostrato
il trend di risultati su un graco.
Lultimo caso duso quello relativo al cambio delle opzioni dellapplicazioni, il ciclo
di vita con i relativi passi sono mostrati in gura 19
Figura 19: Ciclo di vita dellapplicazione per cambiare le opzioni
Per cambiare le opzioni bisogna seguire i seguenti passi:
1. Con il giusto click si verr portati, dalla pagina iniziale, alla pagina dei test
2. Una volta cliccato sullicona delle opzioni in alto a destra, si verr spostati nella
pagina delle opzioni.
3. Modicate le opzioni, basta premere il pulsante in basso a destra per tornare nella
schermata dei test. Contemporaneamente al click vengono salvate i nuovi settaggi.
4.2 svtttrrt rt+tat
In conclusione del progetto di tesi possibile aermare che lobiettivo principale stato
conseguito: sviluppare unapplicazione in grado di valutare la postura di una persona
anziana mentre svolge tre esercizi:
4 totttst ot 40
camminata frontale
camminata laterale
in equilibrio su una gamba
Scopo raggiunto da questa applicazione mediante uninterazione semplice dellinter-
faccia utente e una logica applicativa non troppo complessa.
Durante il tempo di realizzazione dellapplicazione sono stati implementati e testati
alcuni principali design pattern, inoltre si imparato luso del sensore Kinect, del lin-
guaggio di programmazione C# e dellambiente di sviluppo integrato Visual Studio.
Laspetto del progetto che possiamo oggettivamente considerare chiuso in maniera
soddisfacente, senzaltro il fatto che lapplicazione valuta in maniera ecace la postura
durante tutti i test. E necessario dire che lalgoritmo di valutazione della postura pu
essere migliorato in modo che tenga in considerazione anche altri fattori tra cui let o
laltezza della persona allo scopo di ottenere una valutazione ancora pi precisa che tenga
conto di un numero sempre maggiore di fattori di correlazione. Oltre a questo vanno
menzionati altri possibili sviluppi futuri dellapplicazione e gli aspetti che necessitano di
ulteriore revisione:
lapplicazione stata sviluppata con la premessa che il robot fosse dedito ad una
sola persona; con lintroduzione della multi-utenza si pu ovviare questo ostacolo
e permettere allapplicazione di essere usata per un vasto numero di persone.
lintroduzione di un nuovo modo di salvare i dati, ad esempio con linserimento di
un database, ci consentirebbe di gestire i dati in maniera pi ecace una volta
introdotta la multi-utenza.
linterfaccia utente stata scritta interamente in inglese, si pu ovviare questo
introducendo un oggetto vocabolario che permetta di cambiare lingua allapplica-
zione.
I comandi per linterazione con il robot possono essere impartiti con la voce,
utilizzando il riconoscimento vocale del Kinect.
BI BLI OGRAF I A
[1] Istat: nel 2050 Italia Paese di anziani e di immigrati
http://www.chiesacattolica.it/documenti/2006/04/00011634
_
istat
_
nel
_
2050
_
italia
_
paese
_
di
_
anziani
_
e
_
.html
[2] Problemi dellanzianit
http://www.afas.it/afas-plus/angolo-della-salute/
per-una-corretta-salute/salute-e-benessere/
problemi-dellanzianita/
[3] Martha E. Pollack Intelligent Technology for an Aging Population, Ai Magazine, 2008
http://classes.soe.ucsc.edu/cmps080j/Spring08/AIMag26-02-article.
pdf
[4] Amedeo Cesta, Luca Coraci, Gabriella Cortellessa, Riccardo De Benedictis, Andrea
Orlandini, Filippo Palumbo and Ales Stimec Steps Toward End-to-End Personalized
AAL Services
[5] Progetto GiraPlus http://www.giraffplus.eu/
[6] Validity of the Microsoft Kinect for assessment of postural control.
http://www.ncbi.nlm.nih.gov/pubmed/22633015
[7] Wikipedia Microsoft Kinect
http://it.wikipedia.org/wiki/Microsoft
_
Kinect
[8] Microsoft Kinect
http://www.microsoft.com/en-us/kinectforwindows/
[9] Kinect for Windows Sensor Components and Specications
http://msdn.microsoft.com/it-it/library/jj131033.aspx
[10] Accelerometer
http://msdn.microsoft.com/en-us/library/jj663790.aspx
[11] Interaction Space
http://msdn.microsoft.com/en-us/library/hh973071.aspx
[12] Kinect for Windows Architecture
http://msdn.microsoft.com/en-us/library/jj131023.aspx
41
Bibliografa
[13] Natural User Interface for Kinect for Windows
http://msdn.microsoft.com/en-us/library/hh855352.aspx
[14] Data Streams
http://msdn.microsoft.com/en-us/library/hh973075.aspx
[15] Color Stream
http://msdn.microsoft.com/en-us/library/jj131027.aspx
[16] Depth Stream
http://msdn.microsoft.com/en-us/library/jj131028.aspx
[17] Audio Stream
http://msdn.microsoft.com/en-us/library/jj131026.aspx
[18] Beamforming
http://inquinamentoacustico.it/
_
dowload/beamforming%20-%
20cerniglia%20costa%20valente.pdf
[19] Skeletal Tracking
http://msdn.microsoft.com/en-us/library/hh973074.aspx
[20] Tracking Modes (Seated and Default) http://msdn.microsoft.com/en-us/
library/hh973077.aspx
[21] Polling
http://it.wikipedia.org/wiki/Polling
_
(informatica)
[22] Programmazione a eventi
http://it.wikipedia.org/wiki/Programmazione
_
a
_
eventi
[23] Visual Studio
http://it.wikipedia.org/wiki/Visual
_
Studio
[24] Integrated Development Environment
http://it.wikipedia.org/wiki/Integrated
_
development
_
environment
[25] C#
http://it.wikipedia.org/wiki/C
_
sharp
[26] Design pattern
http://it.wikipedia.org/wiki/Design
_
pattern
[27] Model-View-Controller
http://it.wikipedia.org/wiki/Model-View-Controller
42
Bibliografa
[28] La vista
http://www.autoscuolavalchiampo.it/la-vista.html
[29] Craig Larman Applicare UML e i Pattern - Analisi e progettazione orientata gli oggetti
[30] Merialdo Paolo, Dispense del Corso di Sistemi Informativi su Web, Universit di Roma
Tre, A.A. 2010/2011.
[31] Cabibbo Luca, Dispense del Corso di Analisi e Progettazione del Software, Universit
di Roma Tre, A.A. 2010/2011.
43