Post on 18-Feb-2019
transcript
POLITECNICO DI TORINO
III Facoltà di Ingegneria Corso di laurea in Ingegneria Informatica
Tesi di Laurea
Progetto e ottimizzazione
di algoritmi di riconoscimento
di forme per il gaze tracking
Relatori:
Ing. Fulvio Corno
Ing. Laura Farinetti
Candidato:
Emiliano Castellina
Luglio 2005
Indice generale
Indice delle Figure 5
Indice delle Tabelle 8
Introduzione 10
CAPITOLO 1 Gaze tracking 12
1.1 Introduzione 12
1.2 Cos'è l'eye tracking ? 13
1.3 Storia dell'eye tracking 14
1.4 Possibili applicazioni dell’eye-tracking 16
1.4.1 Ergonomia 16
1.4.2 Studio sulla percezione visiva 17
1.4.3 Utilizzo del computer in ambienti di lavoro 18
1.4.4 Disabili motori gravi 18
1.5 Head tracking 20
1.6 Obbiettivo e struttura della tesi 21
CAPITOLO 2 Sistemi di Gaze tracking 23
2.1 Introduzione 23
2.2 Cattura delle immagini 24
2.2.1 API per l'acquisizione di immagini 26
2.3 Riconoscimento della forma 26
2.4 Determinazione del punto fissato (gaze detection) 29
2.5 Alcuni sistemi di eye-tracking esistenti 35
2.5.1 Mytobii 35
2.5.2 Eyegaze System 36
2.5.3 Quick Gaze II 37
2.5.4 EagleEyes 38
CAPITOLO 3 Active shape model 40
3.1 Introduzione 40
3.2 Modello di distribuzione dei punti 42
3.2.1 Picchettatura del training set 42
3.2.2 Allineamento del training set 43
3.2.3 Cattura delle statistiche di un insieme di forme allineate 45
3.3 Ricerca delle forme nelle immagini 47
3.3.1 Calcolo dello spostamento indicato per ogni punto del modello 48
3.3.2 Calcolo dei cambiamenti nella posizione e nei parametri della forma 48
3.3.3 Aggiornamento della posizione e dei parametri della forma 50
3.4 Implementazione dell'algoritmo 50
CAPITOLO 4 Analisi di fattibilità 52
4.1 Introduzione 52
4.2 Cattura delle immagini 53
4.3 Problematiche nell’utilizzo di ASM 54
4.3.1 Difficoltà nel produrre un modello 55
4.3.2 Calcolo della complessità computazionale 57
4.4 Determinazione punto fissato (Gaze detection) 59
4.4.1 Fase di addestramento 59
4.4.2 Utilizzo dei pesi del modello 60
4.4.3 Utilizzo dell'indice delle immagini 67
4.4.4 Classificatore senza addestramento 73
CAPITOLO 5 Progettazione del sistema 79
5.1 Struttura generale del sistema 79
5.2 Programma di Training 82
5.2.1 Cattura di una collezione di immagini 82
5.2.2 Picchettatura delle forme 83
5.2.3 Generazione del modello e delle matrici associative 86
5.2.4 Funzionalità aggiuntive 89
5.3 Programma di gaze tracking 90
5.3.1 Scelta dell'utente 90
5.3.2 Scelta del modello e della matrice associativa 91
5.3.3 Gaze tracking 92
5.3.3.AGestione dispositivo di input 93
5.3.3.BRicerca della forma 94
5.3.4 Determinazione del punto fissato 95
5.3.4.ADeterminazione del punto fissato (eye tracking) 95
5.3.4.BDeterminazione del punto fissato (head tracking) 97
5.3.5 Applicazioni 100
5.3.5.AApplicazione - Impostazione 101
5.3.5.BApplicazione – Rettangoli 102
5.3.5.CApplicazione – Editor di testi 102
5.4 Database 103
5.4.1 Scelta del Database 103
5.4.2 Struttura del database 104
CAPITOLO 6 Verifiche sperimentali 112
6.1 Introduzione 112
6.2 Parametri ottimali di funzionamento 113
6.2.1 Numero immagini del training set 113
6.3 Prestazioni del sistema 117
6.3.1 Memoria occupata sul disco fisso 117
6.3.2 Utilizzo della memoria RAM 118
6.3.3 Utilizzo del processore 118
CAPITOLO 7 Conclusione e sviluppi futuri 120
7.1 Possibili sviluppi futuri 122
7.1.1 Modifiche al programma di training 123
7.1.2 Database centralizzato 123
7.1.3 Utilizzo di due webcam 123
BIBLIOGRAFIA 124
APPENDICE A Anatomia e movimenti dell'occhio 125
Anatomia dell'occhio umano 125
Movimenti oculari 125
APPENDICE B Guida al programma di training 127
Creare un nuovo Training set e catturare una collezione di immagini 127
Creare un nuovo Training Set 127
Catturare un collezione di immagini 127
Creare un nuovo path 127
Eseguire la cattura 128
Caricare una collezione di immagini 128
Catturare una singola immagine da webcam 129
Posizionare i picchetti 129
Occhio 131
Testa 131
Generare il modello matematico e matrici associative 132
Gestire i Training Set 132
Caricare Training set 132
Inserire nuove forme 133
Visualizzare/Eliminare le forme inserite 133
Visualizzare modello 133
Gestione Database 134
Compattare Database 134
Esportare TrainingSet 134
Importare TrainingSet 134
APPENDICE C Guida al programma di gaze tracking 135
Considerazioni sulla webcam 135
Gestione utenti 135
Scelta del Training e Modello 135
Provare il modello 136
Eye-tracking 137
Finestra "Touch Image" 137
Come utilizzare le Applicazioni con l'eye-tracking 137
Impostazioni - Options 137
Applicazioni 138
Mouse Move 138
APPENDICE D Esempio di codice 139
Indice delle Figure
Figura 1.1: esempio di eye tracking 13
Figura 1.2: esempio di eye tracker indossabile 15
Figura 1.3: esempio delle zone osservate con maggior frequenza in una pagina web 17
Figura 2.1: ausilio informatico 24
Figura 2.2: schema sistema gaze-tracking 24
Figura 2.3: Cattura delle immagini 25
Figura 2.4: Riconoscimento della forma 27
Figura 2.5: filtro di Sobel 28
Figura 2.6 : determinazione punto fissato 30
Figura 2.7: immagine di Tobii 36
Figura 2.8: immagine di eyegaze 37
Figura 2.9: Quick Glace in configurazione portatile 38
Figura 3.1: immagini di occhio catturate da webcam 43
Figura 3.2: Picchetti occhi 43
Figura 3.3: Memorizzazione matrice colori 52
Figura 4.1: disposizione webcam Eye tracking 55
Figura 4.2: disposizione webcam Head tracking 55
Figura 4.3: immagine dell'occhio 57
Figura 4.4: posizione picchetti sull'occhio 57
Figura 4.5: immagine del volto 57
Figura 4.6: posizione dei picchetti sulla testa 57
Figura 4.7: fase di addestramento 61
Figura 4.8: variazione della forma del modello in relazione ai pesi 62
Figura 4.9: Verifica 1 e 2, griglia 64
Figura 4.10: Verifica 3 e 4, griglia 3x3 65
Figura 4.11: Verifica 5 e 6, griglia 2x3 65
Figura 4.12: Relazione tra pesi delle forme e zone osservate. Griglia 2x3 66
Figura 4.13: Relazione tra pesi delle forme e zone osservate. Griglia 3x3 66
Figura 4.14: andamento tasso di errore verifiche 5 e 6 67
Figura 4.15: andamento del tempo di classificazione nelle verifiche 5 e 6 68
Figura 4.16 : andamento tasso di errore Griglia 3x4 71
Figura 4.17 : andamento tasso di errore Griglia 3x3 71
Figura 4.18 : andamento tasso di errore Griglia 2x3 72
Figura 4.19: andamento del tempo di addestramento in funzione del numero di forme catturate per ogni
zona 72
5
Figura 4.20: tasso di errori in funzione del parametro 73
Figura 4.22: andamento del tasso d'errore in funzione della differenza di posizione. Griglia 3x4 76
Figura 4.23 andamento del tasso d'errore in funzione della differenza di posizione. Griglia 3x3 77
Figura 4.24 andamento del tasso d'errore in funzione della differenza di posizione. Griglia 4x4 77
Figura 4.25:andamento del tasso d'errore in funzione di F , Griglia 3x4, Differenza di posizione 0,5 cm
78
Figura 4.26:andamento del tasso d'errore in funzione di F , Griglia 3x3, Differenza di posizione 0,5 cm
78
Figura 4.27:andamento del tasso d'errore in funzione di F , Griglia 2x3, Differenza di posizione 0,5 cm
79
Figura 5.1: applicazione di training 81
Figura 5.2: Applicazione di Gaze tracking 82
Figura 5.3: schema del funzionamento del programma di training 83
Figura 5.4: esempio di punti che costituiscono un PATH 84
Figura 5.5: zona intorno intorno all'occhio da selezionare 85
Figura 5.6: zona della testa da selezionare 85
Figura 5.7: ordine di posizionamento dei picchetti sull'occhio 86
Figura 5.8: ordine di posizionamento dei picchetti sulla testa 86
Figura 5.9: rappresentazione coordinate PUNTO 87
Figura 5.10 : esempio di variazione delle forme del modello della testa 88
Figura 5.11 : esempio di variazione delle forme del modello dell'occhio 88
Figura 5.12: intorno dei picchetti nelle differenti matrici associative 90
Figura 5.13: funzionalità applicativo di gaze tracking 91
Figura 5.14 : finestra di Scelta del modello 92
Figura 5.15 : schema componenti comuni tra head tracking e eya tracking 94
Figura 5.16: indicazione posizione occhio 96
Figura 5.17 indicazione posizione modello della testa 96
Figura 5.18: scambio messaggi eye tracking 97
Figura 5.19: finestra di confronto immagine (eye tracking) 97
Figura 5.21: picchetti utilizzati per il calcolo del punto medio 99
Figura 5.22: dominio di variabilità della posizione del punto medio 99
Figura 5.24: controllo movimento del mouse 100
Figura 5.25 scambio di messaggi tra sistema e applicazioni 102
Figura 5.26: layout applicazione - impostazione 103
Figura 5.27: Applicazione Editor di testo 104
Figura 5.28: schema delle relazioni tra le tabelle del database 106
Figura 6.1: numero forme riconosciute su numero di forme del training set 115
Figura 6.2: percentuale forme riconosciute su forme del training set 115
Figura 6.3: tempi di costruzione dei modelli in funzione del numero di immagini del training set 116
6
Figura 6.4: percorso di cattura A 117
Figura 6.5: percorso di cattura B 117
Figura 7.1 Tempi per l'utilizzo del sistema di gaze tracking 122
Figura A: morfologia dell'occhio 126
7
Indice delle Tabelle
Tab. 2.1 CARATTERISTICHE TECNICHE Mytobii 36
Tab. 2.2: Caratteristiche tencniche Eyegaze System 37
Tab. 2.3: Caratteristiche tecniche Quick Glace II 38
Tab 2.4: Caratteristiche tecniche Eagle Eyes 39
Tab. 4.1: Verifica sperimentale 1 63
Tab. 4.2: Verifica sperimentale 2 63
Tab. 4.3: Verifica sperimentale 3 63
Tab. 4.4: Verifica sperimentale 4 63
Tab. 4.5: Verifica sperimentale 5 64
Tab. 4.6: Verifica sperimentale 6 64
Tab 4.7: Verifica sperimentale 7 69
Tab 4.8: Verifica sperimentale 8 70
Tab 4.9: Verifica sperimentale 9 70
Tab 4.10: Verifica sperimentale 10 70
Tab 4.11: Verifica sperimentale 11 70
Tab 4.12: Verifica sperimentale 12 70
Tab. 4.13: Verifica sperimentale 13 75
Tab. 4.14: Verifica sperimentale 14 75
Tab. 4.15: Verifica sperimentale 15 75
Tab. 4.16: Verifica sperimentale 16 75
Tab. 4.17: Verifica sperimentale 17 75
Tab. 4.18: Verifica sperimentale 18 76
Tab. 5.1: Caratteristiche nell'intorno dei picchetti nelle differenti matrici associative 90
Tab. 5.2 : Tabella Archive 106
Tab. 5.3 : Tabella TrainingSet 107
Tab. 5.4 : Tabella SpotsInfo 108
Tab. 5.5 : Tabella Spots 108
Tab. 5.6 : Shapets 109
Tab. 5.7 : Tabella Matrix 109
Tab. 5.8: Tabella ImagesTs 110
Tab. 5.9: Tabella Collection 111
Tab. 5.10: Tabella ImaColl 111
Tab. 5.11: Tabella PathList 112
Tab. 6.1: Specifiche computer 114
Tab. 6.2: Specifiche webcam 114
8
Tab. 6.3: Caratteristiche dei TEST 117
Tab. 6.5: Utilizzo della Ram programma di training 118
Tab. 6.6: Utilizzo della Ram programma di training 119
Tab. 6.7: Utilizzo CPU programma di training 119
Tab. 6.8: Utilizzo CPU programma di gaze tracking 119
9
Introduzione
Tutti i cittadini hanno pari dignità sociale e sono eguali davanti
alla legge senza distinzione di sesso, di razza, di lingua, di reli-
gione, di opinioni politiche, di condizioni personali e sociali
(art. 3 Costituzione della Repubblica Italiana)
Il numero di disabili in Italia secondo le stime di un’indagine dell’ISTAT sulle salute del
1999-2000 è di 2.165.000 pari a circa il 5% della popolazione. La percentuale di popola-
zione invalida è in costante aumento nei paesi industrializzati essenzialmente per l'occor-
renza di tre circostanze:
� l'aumento della vita media : incrementano le persone di età avanzata che sono mag-
giormente soggette a difficoltà sensoriali,motorie e psichiche;
� la diminuzione della mortalità infantile: grazie all'efficacia delle terapie mediche è
possibile tenere in vita neonati con gravi malformazioni;
� l'aumento di incidenti non mortali della strada, lavorativi e domestici.
10
In questo contesto sono sempre più necessarie nuove tecnologie che permettano di fornire
una vita più dignitosa e agevole alle persone disabili.
L’utilizzo del computer può essere d’ausilio alle persone disabili permettendo di comuni-
care e interagire con l’ambiente circostante.
Sovente le periferiche di input come mouse e tastiera non sono utilizzabili da utenti disabi-
li, per questo si è reso necessario lo studio di sistemi alternativi per l’interazione tra uomo e
computer.
Il gaze tracking o tracciamento del punto fissato è una tecnica utilizzata per poter controlla-
re il computer tramite la stima del punto osservato sullo schermo dall’utente. Esso può ba-
sarsi sull’analisi e l’elaborazione dei movimenti della testa (head tracking) o degli occhi
(eye tracking).
Nel 2004 il politecnico di Torino è entrato a far parte di COGAIN, una rete di eccellenza
per lo sviluppo e la ricerca di tecnologie per l'interazione fra utenti disabili e computer.
COGAIN è un consorzio finanziato dall’unione europea, costituito da ricercatori, imprese
e associazioni di utenti ,che ha come scopo il miglioramento della qualità della vita per le
persone afflitte da disordini nel controllo motorio.
L’efficienza, il comfort e l'ergonomia delle tecnologie prodotte è garantita dal forte coin-
volgimento delle comunità di utenti nel progetto.
Nell’ambito di questo consorzio il Politecnico di Torino ha progettato e sviluppato un pro-
prio sistema di gaze tracking finalizzato all’ausilio per le persone disabili.
11
CAPITOLO 1
Gaze tracking
1.1 Introduzione
Per gaze tracking si intende l’insieme delle tecnologie hardware e software atte a permette-
re l’interazione tra utente e computer attraverso la cattura e l’elaborazione del punto dello
schermo osservato.
Il gaze tracking si può ulteriormente distinguere in eye tracking ed head tracking a seconda
che per il riconoscimento si analizzino gli occhi o la testa dell’utente.
Le tecniche di eye tracking hanno una diffusione maggiore sia per quanto riguarda il nume-
ro di sistemi commerciali esistenti sia per il numero di articoli pubblicati su algoritmi e stu-
di teorici.
Questo capitolo tratterà un’introduzione all’eye tracking di cui si illustreranno la storia e gli
ambiti di utilizzo.
Un breve paragrafo sarà dedicato all’head tracking e ai suo campi di applicazione.
12
CAPITOLO 1 Gaze tracking
Una volta introdotti i sistemi e le metodologie di gaze tracking verranno descritti gli ob-
biettivi e la struttura della presente tesi.
1.2 Cos'è l'eye tracking ?
Per eye tracking o tracciamento oculare si intende la tecnica utilizzata nelle scienze cogni-
tive, in psicologia, nell'interazione fra uomo e computer e in numerosi altri campi per cattu-
rare e registrare i movimenti degli occhi.
Figura 1.1: esempio di eye tracking
Nell'osservazione del contenuto di una schermata di computer gli occhi presentano due
comportamenti tipici fondamentali: delle saccadi e delle fissazioni.
Le saccadi sono i movimenti che sono volti a posizionare il contenuto dello schermo nella
zona di maggior risoluzione dell'occhio. Sono i movimenti più rapidi che il corpo umano
possa eseguire: possono superare i 400 gradi al secondo e hanno una durata che si aggira
tra i 20 e 50 millisecondi.
Le fissazioni sono soste del movimento oculare su singoli elementi interessanti. Questa
pause( della durata media di un quarto di secondo) sono volte al recupero e all'analisi del
contenuto fissato, il che permette di leggere un testo, interpretare un'immagine,ecc.
I movimenti saccadici e le fissazioni si alternano in modo che l'occhio si muova da un pun-
to all'altro dello schermo. La registrazione dell'alternanza tra movimenti saccadici e fissa-
zioni è denominata scanpath.
Attualmente sono disponibili quattro tecniche che permettono di registrare i dati relativi ai
movimenti oculari:
1. l'elettrooculografia: per mezzo di elettrodi posti vicino agli occhi registra l'attività elet-
trica prodotta dalla loro rotazione. Le informazioni hanno un buon data-rate (elevati
13
CAPITOLO 1 Gaze tracking
dati al secondo) ma sono poco precise sulla posizione dello sguardo.
2. La tecnica galvanometrica o della “bobina sclerale”: i movimenti oculari sono dedotti
dalle variazioni del campo magnetico in cui il soggetto è immerso. Le variazioni sono
dovute al fatto che sull'occhio del soggetto è posta una speciale lente a contatto conte-
nente un filamento elettrico. La precisione dei dati è elevata ma questa tecnica è molto
invasiva, quindi scarsamente usata.
3. La tecnica del riflesso corneale: inviando un piccolo fascio luminoso infrarosso al cen-
tro della pupilla, è possibile dedurre i movimenti dell'occhio dalle variazioni del rifles-
so rinviato. Maggiori dettagli su questa tecnica saranno esposti nella descrizione di al-
cuni sistemi commerciali di eye-tracking nel paragrafo 2.5.
4. Le tecniche di analisi dell'immagine: le immagini catturate in tempo reale vengono
processate ed elaborate per stabilire il punto osservato. La precisione e le prestazioni
sono dipendenti dalla risoluzione del dispositivo di cattura utilizzato e dalla capacità di
elaborazione del computer sui cui è in funzione il sistema. Il sistema, oggetto di questa
tesi, utilizza queste tecniche.
1.3 Storia dell'eye tracking
Lo studio del movimento degli occhi precede la diffusione del computer di almeno 100
anni, un esempio di tali ricerche è “Physiologie de la lecture et de l'écriture”,scritto dal-
l’oftalmico francese Emile Javal nel 1878.
I primi metodi per tracciare la posizione fissata dagli occhi erano piuttosto invasivi, richie-
devano un contatto meccanico diretto con la cornea.
Dodge e Cline nel 1901 svilupparono la prima tecnica precisa e non invasiva di traccia-
mento oculare usando la luce riflessa dalla cornea. Il loro sistema registrava su una lastra
fotografica solamente la posizione orizzontale dell’occhio e richiedeva che la testa del par-
tecipante fosse senza movimento.
Poco dopo, nel 1905 Judd,McAllister e Steel applicarono la tecnica cinematografica per
registrare l’aspetto temporale del movimento degli occhi in due dimensioni. La loro tecnica
registrava il movimento di una piccola particella bianca inserita negli occhi dei partecipanti
invece della luce riflessa direttamente dalla cornea.
Queste e altre ricerche inerenti lo studio del movimento degli occhi fecero ulteriori pro-
gressi durante la prima metà del ventesimo secolo con la combinazione della tecnica cine-
14
CAPITOLO 1 Gaze tracking
matografica e della riflessione della luce dalla cornea in diversi modi.
Negli anni trenta, Miles Tinker e i suoi colleghi iniziarono ad applicare tecniche fotografi-
che allo studio del movimento degli occhi durante la lettura. Studiarono gli effetti sulla ve-
locità di lettura e i differenti modelli di movimento oculare risultanti dalla variazione di ca-
rattere, dimensione di stampa e layout di un testo.
Nel 1947 Paul Fitts e i suoi collaboratori iniziarono ad utilizzare la tecnica cinematografica
per studiare il movimento degli occhi dei piloti al fine di comprendere come venivano os-
servati i controlli e gli strumenti nella cabina di pilotaggio durante la fase di atterraggio.
Gli studi di Fitts rappresentano la prima applicazione di eye tracking per l’ergonomia, ossia
uno studio sistematico delle interazioni tra utenti e prodotto per migliorare la progettazione
del prodotto.
Nel 1948 Hartridge e Thompson inventarono il primo eye tracker che si posizionava sulla
testa.
Rozzo per gli attuali standard, questa innovazione servì a liberare i partecipanti agli studi
dai costrittivi vincoli al movimento della testa.
Negli anni sessanta Shackel, Mackworth & Thomas migliorarono il sistema di eye-tracking
posizionato sulla testa rendendolo meno fastidioso e riducendo ulteriormente le restrizioni
al movimento della testa.
Figura 1.2: esempio di eye tracker indossabile
La ricerca sul movimento oculare e sull’eye tracking rifiorì negli anni settanta, con grandi
progressi sia nella tecnologia di eye-tracking , sia nella teoria psicologica del legame tra i
processi cognitivi e i modelli di movimento oculare.
Molto del lavoro fu focalizzato sulla ricerca in psicologia e fisiologia nel comprendere
come l’occhio umano funzionasse e cosa potesse rivelare sui processi percettivi e cogniti-
15
CAPITOLO 1 Gaze tracking
vi.
Le pubblicazioni degli anni settanta riportano una stasi nell’utilizzo dell’eye-tracking per
l’ergonomia, probabilmente cioè fu dovuto alla difficoltà nelle raccolta e soprattutto nel-
l’analisi dei dati.
Molti dei rilevanti lavori degli anni settanta riguardavano il miglioramento tecnico per au-
mentare l’accuratezza e la precisione dei tracker. La scoperta che la riflessione multipla
dall’occhio potesse essere usata per dissociare la rotazione oculare dal movimento della te-
sta incrementò la precisione del tracciamento e aprì la strada allo sviluppo di sistemi senza
vincoli di movimento per i partecipanti.
Nel 1974 due imprese belliche statunitensi in collaborazione con l’esercito e la marina svi-
lupparono ognuna un sistema automatico di eye tracking in tempo reale, utilizzando un mi-
nicomputer,
Questi sistemi furono i precursori nell’utilizzo di sistemi di eye tracking per l’interazione
uomo macchina in tempo reale.
Negli anni ottanta con il diffondersi dei personal computer, i ricercatori iniziarono a studia-
re come l’eye tracking potesse essere applicato alla interazione uomo computer. Dapprima
fu utilizzato per lo studio dell’ergonomia delle applicazione, in seguito per permettere l’uti-
lizzo del computer ad utenti disabili.
1.4 Possibili applicazioni dell’eye-tracking
In periodi recenti con l’evoluzione della capacità elaborativi dei personal computer e il mi-
glioramento continuo della tecnologia hardware relative all’acquisizione di immagini l’uti-
lizzo dell’eye-tracking si è potuto diffondere oltre l’ambito accademico di ricerca in cui è
stato sviluppato.
1.4.1 Ergonomia
Uno dei campi di maggior utilizzo dei sistemi di eye-tracking è lo studio dell’ergonomia
dei prodotti per migliorarne la progettazione.
Vengono condotti test statistici di osservazione su campioni rappresentativi di individui e
grazie ai dati raccolti si ottimizza il layout del prodotto.
16
CAPITOLO 1 Gaze tracking
Esempi di prodotti interessati da un’analisi dell'ergonomia condotta con tracciamento ocu-
lare sono:
• applicativi informatici e siti web : si può ottenere un miglioramento dell’inter-
faccia per agevolare l’utilizzo dell’applicativo sia da parte di utenti normodotati
che da disabili. Grazie a questi studi è stato possibile determinare delle linee
guida da rispettare per permettere l’accessibilità di siti web per persone ipove-
denti, come tipologia e dimensione dei caratteri da utilizzare e abbinamenti cro-
matici adatti. Un esempio di questo campo di applicazione è rappresentato in fi-
gura 1.3, in cui le zone più fissate di una pagina web sono evidenziate da una
maggiore altezza in modalità tridimensionale.
Figura 1.3: esempio delle zone osservate con maggior frequenza in una pagina web
• mezzi di trasporto: la posizioni dei controlli e dei comandi vengono progettate
per minimizzare errori di lettura e migliorare la funzionalità. Questa tipologia di
analisi è diffusa soprattutto in ambito aeronautico.
• Pubblicità: i marchi dei prodotti vengono posizionati per essere maggiormente
visibili nei punti che dagli studi sono risultati più frequentemente fissati. In
questo ambito si ha il più diffuso utilizzo dell’eye-tracking.
1.4.2 Studio sulla percezione visiva
I sistemi di tracciamento del movimento oculare vengono utilizzati, in ambito di ricerca in
psicologia, per creare modelli che relazionano la posizione fissata da un soggetto alle facol-
tà di lettura, apprendimento e comprensione.
Studi recenti dello psicologo inglese Richard Wiseman hanno dimostrato che una persona
17
CAPITOLO 1 Gaze tracking
non vede in realtà l’immagine fissata dagli occhi, ma una rielaborazione che il cervello fa
di essa.
In questa rielaborazione si ha una modifica dell’immagine reale con l’omissione di partico-
lari “superflui” ed in attesi.
Un esempio di tale rielaborazione selettiva del cervello si è risultato da un esperimento
svolto su 10 piloti di aviazione civile. Il test consisteva nel far provare ai piloti con un si-
mulatore di volo un atterraggio e di registrare i tramite tecniche di eye tracking la zona os-
servata in ogni momento. Durante il test il simulatore visualizzava improvvisamente sulla
pista di atterraggio un aereo. Quattro dei dieci piloti, partecipanti al test, non si sono accorti
di nulla e hanno proseguito la manovra di atterraggio. Le registrazioni effettuate dall'eye
tracker hanno evidenziato che i piloti hanno fissato la zona in cui è apparso l'aereo, ma il
cervello ha omesso tale informazione perché inattesa e non ritenuta possibile.
1.4.3 Utilizzo del computer in ambienti di lavoro
Data l’elevato costo dei dispositivi di eye-tracking il loro utilizzo è limitato al momento al-
l’ambiente militare. Un sistema di tracciamento oculare è utilizzato all’interno dei caschi
dei piloti di aviazione per interagire col computer di bordo e visualizzare informazioni.
Esistono anche visori speciali utilizzati dall’esercito collegati a computer indossabili, in
questo caso l’eye tracking è utilizzato come strumento di puntamento per selezionare le
funzionalità del computer.
In linea di massima un’interfaccia di eye tracking è utilizzabile in tutti gli ambienti lavora-
tivi in cui l’operatore non ha la possibilità di utilizzare le mani per gestire e controllare un
computer.
1.4.4 Disabili motori gravi
Una delle applicazioni più utili dell’eye tracking è dare la possibilità a persone affette da
inabilità motorie gravi di utilizzare un personal computer . Il personal computer può ese-
guire programmi ad hoc che consentono all’utente di comunicare e di interagire con l’am-
biente circostante.
Esempi di patologie e disturbi in cui i sistemi di eye tracking possono essere strumenti effi-
caci sono:
18
CAPITOLO 1 Gaze tracking
• Sclerosi laterale amiotrofica (SLA): una malattia degenerativa che interessa un
gruppo specifico di cellule del midollo spinale (il primo e il secondo motoneurone).
Queste cellule nervose svolgono la funzione fondamentale di trasmettere ai muscoli
i comandi per il movimento. La scomparsa dei motoneuroni causa una progressiva
atrofia muscolare: i muscoli volontari non ricevono più i comandi provenienti del
cervello e, nel tempo, si atrofizzano, portando a una paralisi progressiva dei quattro
arti e dei muscoli deputati alla deglutizione e alla parola. Purtroppo non è stata an-
cora individuata una terapia in grado di sconfiggere questa patologia. Solo in una
piccola percentuale di casi sono state riscontrate possibili cause di origine genetica,
mentre perlopiù la causa scatenante della SLA è ignota. Il decorso medio è di circa
tre anni; la morte è provocata quasi sempre per insufficienza respiratoria.. E’ cono-
sciuta come morbo di Lou Gehrig, dal nome di un famoso giocatore di baseball a
cui per primo fu diagnosticata.
• Lesioni del midollo spinale.
• Paralisi cerebrale.
• Sclerosi multipla: è una malattia autoimmunitaria provocata da una risposta anoma-
la del sistema immunitario contro il sistema nervoso centrale. I sintomi della malat-
tia dipendono dalla zona del sistema nervoso colpita, i più frequenti sono annebbia-
mento della vista, difficoltà di coordinazione dei movimenti, tremore , paralisi e
spasticità muscolari. In alcuni pazienti la malattia alterna periodi di miglioramento
con assenza dei sintomi e fasi acute di remissione. In altri pazienti la malattia pro-
gredisce portando a disabilità permanenti.
• Lesioni cerebrali.
• Distrofia muscolare: la malattia è dovuta alla mancanza di distrofina, una proteina
che protegge i muscoli dai traumi durante la contrazione. E’ una malattia di origine
genetica , dovuta ad un difetto del cromosoma X per questo colpisce praticamente
solo maschi (infatti le donne hanno due cromosomi X ed è improbabile che entram-
bi siano danneggiati).
Le forme più comuni sono quelle di Duchenne e quella di Becker, la prima evolve
in una paralisi totale dei muscoli, mentre la seconda ha un andamento meno debili-
tante.
19
CAPITOLO 1 Gaze tracking
Sono numerose le applicazioni progettate appositamente per facilitare la comunicazione
delle persone disabili: si va dalla semplice rappresentazione di una tastiera su schermo col-
legata ad un sistema di sintesi vocali, all’utilizzo di un complesso linguaggio simbolico per
esprimere le necessità .
Un’altra interessante applicazione è l’interazione tra sistemi di eye-tracking e casa domoti-
ca.
Per casa domotica si intende un’abitazione progettata o “riadattata” per essere controllabile
tramite computer. Un’utente disabile può quindi avere una notevole autonomia ed effettua-
re semplici azioni come accendere una luce,accendere il forno o aprire una porta senza l’as-
sistenza di altre persone.
Nel computer che controlla l’abitazione può essere implementato un sistema di gaze-trac-
king.
1.5 Head tracking
Per head-tracking si intende un processo di analisi e di riconoscimento della testa dell’uten-
te al fine di effettuare un’interazione con un sistema informatico.
Esistono diversi sistemi di head-tracking ,presenti in letteratura e in commercio, che posso-
no essere raggruppati in base alla funzione svolta. Possiamo distinguere essenzialmente tre
funzioni:
ΧΧΧΧ Il riconoscimento della posizione della testa: può avvenire come per l’eye tracking sia
attraverso dispositivi indossati dall’utente (caschi e occhiali) sia tramite analisi dell’im-
magine acquisite da dispositivi di cattura video.
La determinazione della posizione della testa può essere utilizzata per la stima della
zona o del punto dello schermo osservato dall’utente.
I campi di utilizzo di questi sistemi sono:
���� Ludico: esistono in commercio molti dispositivi hardware(caschi e occhiali) che
permettono di sostituire ai joystick il movimento della testa.
���� Professionale: vi sono applicazioni e dispositivi che attraverso i movimenti del-
la testa permettono il movimento in ambienti di realtà virtuale. Questi sistemi
sono pochi e utilizzati soprattutto nelle progettazione o vendita di edifici.
���� Ausilio per disabili: tipicamente le tecniche di head-tracking sono utilizzate dai
20
CAPITOLO 1 Gaze tracking
sistemi di eye-tracking per il controllo degli errori o per migliorare l’accuratezza
della stima del punto osservato.
ΧΧΧΧ Il riconoscimento del volto: avviene tramite riconoscimento dell’immagine acquisite da
dispositivi di cattura. Questi strumenti sono utilizzati per l’identificazione e l’autentica-
zione degli utenti per l’accesso a sistemi ad elevata sicurezza o per la ricerca di indivi-
dui all’interno di un database da parte delle forze dell’ordine .
ΧΧΧΧ Il riconoscimento dell’espressione del volto: questi sistemi sono utilizzati al momento
sono in ambito di ricerca , hanno l’intento di riconoscere lo stato d’animo dell’utente
(allegria,tristezza,attenzione,noia,…) a partire dall’analisi dell’immagine del volto degli
utenti.
1.6 Obbiettivo e struttura della tesi
Lo scopo di questa tesi è l’analisi e lo sviluppo di un sistema di gaze tracking per l’ausilio
alle persone con problemi motori gravi .
Per realizzare questo progetto si è partiti da un sistema già esistente sviluppato nel corso di
tesi precedenti.
Un ostacolo alla diffusione dei dispositivi di gaze tracking commerciali descritti nei para-
grafi precedenti è l’elevato costo che non permette alla maggior parte delle persone di po-
terli utilizzare; solitamente i sistemi più accurati e all’avanguardia sono acquistati da asso-
ciazione e da ospedali e l’utente per poterne usufruire deve essere portato in questi luoghi.
Per dare la possibilità alla maggior parte degli utenti di accedere ad un ausilio
informatico,indipendentemente dalle condizioni economiche, si è scelto di sviluppare un
sistema che utilizzi dispositivi di cattura immagini a basso costo come semplici webcam.
Mantenendo come principale vincolo progettuale il basso costo si sono dovute accettare
delle limitazioni per quanto riguarda le prestazioni e l’accuratezza del sistema.
Si è progettata e ottimizzata l'integrazione nel sistema di gaze tracking di un particolare al-
goritmo di ricerca forme denominato active shape model.
Il sistema sviluppato permette tramite head tracking di utilizzare i movimenti della testa
per muovere il puntatore del mouse. Dopo un breve periodo di apprendimento l'utente è in
grado di controllare con elevata precisione il puntatore, tanto da consentire di utilizzare
senza alcuna modifica le normali applicazioni del sistema operativo.
21
CAPITOLO 1 Gaze tracking
Per quanto riguarda l'eye tracking ,a seconda delle condizioni di luce e del posizionamento
dell'utente, il sistema riesce a determinare la zona fissata tra un minimo di quattro ad una
massimo di sedici zone in cui può essere diviso lo schermo.
Sono state sviluppate applicazioni specifiche per essere in grado di interagire con il siste-
ma di eye tracking. Una particolarità di tali applicazione è la possibilità di modificare l'in-
terfaccia in base alla precisione del sistema.
La struttura della tesi rispecchia i diversi passi effettuati per realizzare il progetto; di segui-
to sono brevemente descritti i capitoli in cui è suddiviso il presente elaborato.
• Nel CAPITOLO DUE “Sistemi di gaze tracking” vengono descritte i diversi com-
ponenti che costituiscono un generico sistema di gaze tracking. Sono illustrati alcu-
ni algoritmi e tecniche presenti in letteratura adatti a realizzare le funzioni di cattura
immagine,riconoscimento forme e determinazione del punto fissato.
• Nel CAPITOLO TRE “Active shape model” viene descritto dettagliatamente l’al-
goritmo di riconoscimento forme scelto per essere implementato all’interno del si-
stema.
• Nel CAPITOLO QUATTRO “Analisi di fattibilità” viene proposta un’analisi delle
problematiche incontrate per la realizzazione del sistemo sia a livello teorico che a
livello implementativo.
• Nel CAPITOLO CINQUE “Progettazione del sistema” vengono spiegate le solu-
zioni adottate per ovviare ai problemi riscontrati durante la fase di analisi.
• Nel CAPITOLO SEI “Verifiche sperimentali” vengono riportati i risultati delle ve-
rifiche sperimentali effettuate per la misurazione delle prestazioni e il controllo del-
l’accuratezza del sistema.
• Nel CAPITOLO SETTE “Conclusione e sviluppi futuri” vengono elencati alcuni
possibili sviluppi futuri che il progetto descritto in questa tesi potrà avere.
22
CAPITOLO 2
Sistemi di Gaze tracking
2.1 Introduzione
Un ausilio informatico che utilizzi le tecniche di gaze tracking è caratterizzato da tre com-
ponenti:
Χ Un sistema di elaborazione delle informazioni di input che fornisce le coordinate del
punto o della zona fissati.
Χ Uno strato applicativo che utilizza i dati sul punto fissato per svolgere una determinata
funzione (sintesi vocale, azionare un dispositivo,...)
Χ Uno stadio di uscita che è il risultato dell'esecuzione delle applicazioni.
Uno schema della strutturazione di un ausilio informatico che utilizzi il gaze tracking è il-
lustrato in figura 2.1.
In questo capitolo sarà analizzato il principio di funzionamento del primo componente di
dell'ausilio informatico descritto sopra, ossia un sistema di gaze tracking.
23
CAPITOLO 2 Sistemi di Gaze tracking
Gaze tracking
Applicazioni Output
Applicazioni
di sistema
Figura 2.1: ausilio informatico
Sarà descritto un generico sistema di riconoscimento del punto fissato basato su algoritmi
di riconoscimento forme.
Per ogni componente del sistema saranno descritte le diverse implementazioni presenti in
letteratura.
Ogni sistema complesso per poter essere efficientemente sviluppato, modificato e aggior-
nato deve avere un elevata modularità, ossia deve essere strutturato in modo tale da com-
prendere componenti il più possibile indipendenti.
Ogni modulo può essere modificato e migliorato indipendentemente dagli altri, con l'accor-
tezza però di mantenere invariate le interfacce di input e output con gli altri moduli.
Una struttura esemplificativa di un sistema di tracciamento oculare è rappresentato dallo
schema in figura 2.2.
Figura 2.2: schema sistema gaze-tracking
2.2 Cattura delle immagini
Lo scopo del primo blocco del sistema (fig. 2.3) è quello di acquisire immagini da un di-
spositivo di cattura video, come ad esempio una webcam, e fornirle in un formato specifico
al blocco successivo.
24
CAPITOLO 2 Sistemi di Gaze tracking
Figura 2.3: Cattura delle immagini
Per permettere la comunicazione fra un sistema informatico e un dispositivo di cattura im-
magini sono possibili diverse alternative:
• L'implementazione di un driver a partire dalle specifiche tecniche che svolge solo
le funzioni necessarie agli altri moduli del sistema. Il termine driver indica un'inter-
faccia di comunicazione fra periferico di acquisizione e sistema. Questa alternativa
è la più complessa da attuare sia per la difficoltà nella programmazione a basso li-
vello sia perché poche case produttrici forniscono le specifiche dettagliate dei pro-
pri dispositivi. Inoltre il funzionamento è indissolubilmente legato all'hardware
quindi se si cambia il dispositivo si deve modificare quasi integralmente il codice
del modulo. Per contro si ha un notevole aumento dell'efficienza del sistema, poi-
ché si possono sviluppare solo le funzioni necessarie.
• Utilizzo dei driver forniti dalla casa produttrice del dispositivo di acquisizione: in
questo caso si utilizzano le funzioni elementari fornite per costruire il modulo di ac-
quisizione. Utilizzando questo metodo si ha una media complessità di progettazione
ed implementazione poiché i driver forniti tipicamente svolgono funzioni elementa-
ri che non garantisco un livello di astrazione del dispositivo elevato, quindi si è an-
cora molto legati alla struttura dell'hardware utilizzato.
• Utilizzo di librerie per l'acquisizione di immagini: si utilizzano API (application
programming interface) già sviluppate che astraggono totalmente il dispositivo di
cattura e si occupano di interfacciarsi con l'hardware rendendo semplice lo sviluppo
di applicazioni. Il vantaggio dell'utilizzo di librerie già sviluppate è senza dubbio la
semplicità di sviluppo che consentono, d'altro canto però non forniscono un totale
controllo del dispositivo e garantiscono prestazioni inferiori ai metodi precedente-
mente descritti.
25
CAPITOLO 2 Sistemi di Gaze tracking
2.2.1 API per l'acquisizione di immagini
Sono innumerevoli le librerie presenti in commercio per l'elaborazione e acquisizione di
immagini, di seguito saranno brevemente descritte le librerie più utilizzate.
� Microsoft Video for Windows: è un API per la cattura ed elaborazione di video già in-
trodotto nei sistemi Windows a 16 bit. Il numero di funzioni esportate è limitato e no-
nostante i parecchi anni passati dalla progettazione risulta di facile utilizzo. Questa API
è già presente nei più diffusi ambienti di sviluppo, quindi non è necessario il pagamen-
to di royalties aggiuntive per integrarlo nelle proprie applicazioni.
� Victor Image Processing: è un API prodotta dalla Catenary System che svolge funzioni
di cattura,memorizzazione ed elaborazione di immagini. Ha il pregio di essere efficien-
te e veloce, ma ha il grave difetto di non permettere il passaggio dell'immagine acquisi-
ta direttamente in memoria. I precedenti lavori di tesi che utilizzano tale libreria per ov-
viare a questo hanno dovuto utilizzare una ram disk. Il costo per l'utilizzo della libreri-
ra è di circa 500 dollari.
� Intel Image Processing Library: è una API opensource che offre numerosissime funzio-
ni di elaborazione e analisi dell'immagine. Esempi di alcune funzioni esportate sono:
� Conversione di formato.
� Applicazione di filtri.
� Trasformazioni: rotazioni,ridimensionamenti.
� Ricerca dei contorni.
2.3 Riconoscimento della forma
Questo modulo ha come dati di ingresso l'immagine catturata e fornisce come output la for-
ma trovata dopo l'analisi effettuata (figura 2.4).
Figura 2.4: Riconoscimento della forma
La maggior parte degli algoritmi di riconoscimento forme effettua come prima operazione
sull'immagine l'applicazione di un filtro con lo scopo di enfatizzare i contorni delle imma-
26
CAPITOLO 2 Sistemi di Gaze tracking
gini e ridurre i dati da analizzare.
I contorni di un’immagine sono determinati da zone ad elevata differenza d’intensità, per
rilevarli si analizzano i punti di discontinuità del gradiente.
I principali algoritmi di rilevazione dei contorni presenti in letteratura sono i seguenti:
• Gradienti discreti e trasformata di Laplace (Roberts 1965, Prewitt 1970, Sobel
1970, Kirsh 1971): sono basati sulla ricerca degli zeri della trasformata di Laplace
del gradiente dell’immagine. Il gradiente è calcolato in due direzioni effettuando il
prodotto di convoluzione fra l’immagine e matrici diverse per ogni implementazio-
ne.
• Trasformata di Laplace della Gaussiana: sviluppato da Marr e Hildreth nel 1980
consiste nella ricerca degli zeri della trasformata di Laplace dell’immagine a cui è
applicata precedentemente una maschera Gaussiana. Il filtro gaussiano ha lo scopo
di sfumare i contorni meno marcati dall’immagine ,così da evitare molti zeri della
funzione trasformata dovuti ha piccole discontinuità di intensità.
• Canny Edge Detector: sviluppato da John Canny nel 1983, questo algoritmo dappri-
ma massimizza il rapporto segnale rumore dell’immagine poi minimizza le risposte
dei singoli contorni evitando così falsi riconoscimenti. Dopo i suoi studi Canny ha
trovato una funzione costituita dalla somma di quattro esponenziali che se applicata
all’immagine effettua le operazioni sopra descritte.
Un esempio è rappresentato in figura 2.5 in cui è applicato il filtro di Sobel .
Figura 2.5: filtro di Sobel
Il passo successivo all'applicazione (o meno) di filtri è la ricerca vera e propria della forma
che può essere basata su modelli statistici o funzioni matematiche predeterminati, oppure
calcolati durante una fase di addestramento del sistema.
Di seguito sono sinteticamente descritti alcuni algoritmi per la costruzioni di modelli per il
27
CAPITOLO 2 Sistemi di Gaze tracking
riconoscimento forme .
1. Modelli “artigianali”: sono modelli flessibili costruiti dall’unione di semplici sotto-
componenti, come circonferenze, linee o archi che hanno determinati gradi di libertà
nel posizionamento relativo e possibile di variazioni di scala e di orientamento. Quando
si ricerca una forma nell’immagine, si attiene prima una forma approssimata del model-
lo che viene rifinita cambiando i diversi sottocomponenti uno alla volta. Questi modelli
sono tipicamente utilizzate nella ricerca di forme in ambito medico come valvole car-
diache e vertebre.
2. Modelli di serie di Fourier di forme: questi modelli utilizzano espansioni di funzioni
trigonometriche. Le forme prodotte sono funzioni parametriche, alla variazione dei pa-
rametri si originano forme differenti. I modelli così generati sono quasi infinitamente
deformabili , e non contengono informazioni a priori sulla forma.
3. Active shape model (ASM): utilizza un modello statistico deformabile dell’oggetto da
ricercare. Il modello è generato da un insieme di immagini campione in cui vengono
identificati i punti significativi della forma dell’oggetto, denominati picchetti.
Nel modello viene anche memorizzato il valore del livello di grigio nell’intorno di
ogni picchetto.
La ricerca della forma avviene iterando il processo di deformazione del modello fino ad
ottenere una differenza minima fra i livelli di grigio memorizzati e quelli dell’immagi-
ne analizzata.
Maggiori dettagli su questo algoritmo verranno esposti nei capitoli successivi.
4. Active appearence model (AAM): anch’esso utilizza un modello statistico deforma-
bile dell’oggetto da ricercare, ma si differenzia dall’ASM nella memorizzazione dei li-
velli di grigio. In questo algoritmo viene generato sia un modello per la forma dell’og-
getto sia un modello per il livello di grigi (texture dell’immagine).
La ricerca della forma avviene tramite confronto tra l’immagine analizzata e le imma-
gini sintetizzate dalla deformazione del modello.
Verifiche sperimentali hanno dimostrato che l’active shape model è più veloce nella ri-
cerca della forma, mentre l’active appearence model ha una precisione maggiore e ri-
chiede un numero minore di punti per la costruzione del modello.
5. Snakes o contorni attivi: i contorni attivi sono curve definite all’interno del dominio
di un’immagine, che possono essere modificate in base a vincoli interni alla curva stes-
28
CAPITOLO 2 Sistemi di Gaze tracking
sa e vincoli esterni dovuti all’immagine su cui sono applicate. I vincoli interni ed ester-
ni sono definiti in modo tale da conformare la curva al contorno della forma da ricerca-
re.
Vi sono due tipi di algoritmo per “contorni attivi” presenti in letteratura:
5.1. Contorni attivi parametrici: l’immagine è utilizzata per definire funzioni potenzia-
li i cui minimi sono utilizzati come vincoli su cui far spostare le curve che defini-
scono i contorni.
5.2. Contorni attivi geometrici: basati sulla teoria dell’evoluzione delle curve sui flussi
geometrici, questi modelli definiscono un contorno attivo come un insieme di li-
vello di una funzione scalare in un dominio spaziale.
E’ stato dimostrato che i metodi sopra riportati ottengo risultati equivalenti, con la
differenza sostanziale che i contorni attivi geometrici nell’analisi delle immagini
con più oggetti riescono ad adattarsi automaticamente, mentre quelli parametrici ne-
cessitano ulteriori modifiche per poter distinguere diverse forme.
2.4 Determinazione del punto fissato (gaze detection)
Lo scopo di questo modulo è stabilire il punto o la zona dello schermo fissato basandosi
sulle forme di occhio o testa riconosciute(figura 2.6).
Figura 2.6 : determinazione punto fissato
Per effettuare questa funzione si deve stabilire una distinzione in classi delle forme in in-
gresso, in modo da porre in relazione ogni forma in ingresso con l’indicazione della zona
fissata in uscita.
Il processo di classificazione può essere distinto in tre fasi:
29
CAPITOLO 2 Sistemi di Gaze tracking
1 Addestramento: si produce un modello da un insieme di addestramento.
L’addestramento è definito supervisionato quando viene indicata per ogni oggetto
dell’insieme di addestramento la classe a cui appartiene, mentre esistono anche tecni-
che di addestramento non supervisionato in cui vengono distinte e generate automati-
camente le classi.
Il risultato può essere presentato in varie forme: alberi di decisione,regole,formule
matematica,ecc..
2 Stima dell’accuratezza: si stima la precisione del modello un insieme di test. Si mi-
sura la percentuale di errori commessi sull’insieme di test, che non deve coincidere
con l’insieme di addestramento per non avere stime troppo ottimistiche dell’accura-
tezza.
3 Utilizzo del modello: si classificano oggetti di classe non conosciuta a priori.
Per costruire un modello efficiente si deve effettuare una preparazione dei dati:
• Data Cleaning: molti algoritmi di classificazione effettuano come primo passo una
rielaborazione in modo da:
1. eliminare rumore: solitamente tramite smoothing.
2. eliminare eventuali outlier : per outlier si intendono dati con caratteristiche comple-
tamente diverse dagli altri.
3. trattare gli attributi mancanti: solitamente si sostituisce la media dei valori per l’attri-
buto.
•••• Analisi di rilevanza degli attributi: denominata anche feature selection, ha lo scopo
di ottimizzare le prestazioni e migliorare il modello. Si base sul presupposto che il
tempo impiegato a scegliere gli attributi rilevanti di un oggetto sia minore del tem-
po per eseguire un addestramento su tutti gli attributi dell’oggetto.
•••• Trasformazione dei dati: solitamente si effettua una normalizzazione dei dati, op-
pure si assegna una gerarchia di priorità ai diversi attributi dell’oggetto da classifi-
care.
Criteri di valutazione e confronto per metodologie di classificazione sono:
• Accuratezza nella predizione.
• Velocità: tempo per costruire il modello e tempo per utilizzarlo.
30
CAPITOLO 2 Sistemi di Gaze tracking
• Robustezza: misura l’abilità del modello nel fare previsioni in condizione di dati er-
rati o mancanti.
• Scalabilità: indica se l’efficienza è mantenuta anche aumentando la quantità di dati
del modello.
• Interpretabilità: possibilità di assegnare un significato intuitivo al modello generato.
Di seguito sono riportati alcuni sistemi e algoritmi che possono essere utilizzati per svol-
gere le funzione sopra descritte.
• Classificazione con Alberi di Decisione: il modello è rappresentato da un albero in
cui:
Χ I nodi interni rappresentano test sugli attributi.
Χ I rami rappresentano i risultati del test al nodo padre.
Χ Le foglie rappresentano una classe o una distribuzione di probabilità di una
classe
Χ L’apprendimento consiste nella costruzione dell’albero di decisione e
nello sfoltimento (o pruning) per eliminate rumori nei dati o outlier.
Il modello viene utilizzato controllando i valori degli attributi del dato in
ingresso e confrontandolo a partire dal nodo radice fino ad arrivare ad un
nodo foglia.
• Regole di Classificazione: una regola di classificazione è una formula logica del
tipo:
IF <antecedente> THEN <conseguente>
L’antecedente è rappresentato da una serie di test, come i nodi dell’albero di deci-
sione, oppure da una formula logica.
Il conseguente dà la classe da assegnare agli oggetti che soddisfano l’antecedente.
Per generare un insieme di regole si può utilizzare un albero di decisione, oppure
utilizzare algoritmi di copertura, che vengono così definiti perché ad ogni passo co-
prono un sottoinsieme degli oggetti della classe. Un esempio di algoritmo di coper-
tura è PRISM che opera nel seguente modo:
o Si parte da una regola di base senza condizioni.
o Si migliora la regola aggiungendo dei test che migliorano l’accuratezza, os-
sia il rapporto tra gli oggetti che soddisfano sia la premessa che la conclu-
31
CAPITOLO 2 Sistemi di Gaze tracking
sione e il numero di oggetti che soddisfano la premessa.
o Ogni nuovo test riduce la copertura della regola.
o Ci si ferma quando l’accuratezza è 1 o la regola non si può dividere.
• Classificatore Bayessiano: è un metodo statistico di classificazione, predice la
probabilità che un dato oggetto appartenga ad una determinata classe.
Ogni istanza dell’insieme di addestramento modifica in maniera incrementale la
probabilità che un’ipotesi sia giusta.
Sia X un oggetto da classificare, e C1,….Cn le possibili classi. I classificatori
Bayessiani calcolano la probabilità che un oggetto X appartenga ad una classe Ci
come:
Si scegli la classe Ci che massimizza tale probabilità.
Χ P �C i � è la probabilità di rilevare la classe Ci, si calcola dall’insieme di adde-
stramento facendo un rapporto fra la frequenza in cui appare la classe Ci e il nu-
mero totale di elementi.
Χ P(X) è la probabilità di avere come dato l’oggetto X, solitamente si considera
uguale per ogni elemento.
Χ P �X �Ci � è la probabilità di avere l’oggetto X nella classe Ci. Se si considerano
oggetti con molti attributi per poter rendere possibili i calcoli, essi vengono as-
sunti come indipendenti.
• Reti Bayessiane: sono costituite da un grafo diretto aciclico e da una tabella di
probabilità condizionata. Nel grafo ogni nodo è una variabile casuale ed ogni
arco rappresenta una dipendenza probabilistica. Queste reti superano il limite
del semplice classificatore Bayessiano permettendo di esplicitare le relazioni
che esistano fra i vari attributi di uno stesso oggetto.
• Metodi basati sulle istanze: memorizzano gli oggetti che fanno parte dell’in-
sieme di addestramento e rimandano ogni calcolo al momento in cui un nuovo
oggetto deve essere classificato. Questo tipo di valutazione viene anche definita
lazy evaluation (valutazione pigra) e si contrappone agli altri metodi definiti di
eager evaluation.
32
P �C i�X ��P �X �C i �P �C i�
P � X �
CAPITOLO 2 Sistemi di Gaze tracking
Fanno parte di questa categoria gli algoritmi k-nearest neighbor e case-based
reasoning.
Questi algoritmi hanno il vantaggio di essere più accurati, avendo uno spazio
delle ipostesi maggiore, ma sono computazionalmente molto pesanti.
• Reti neurali: sono un modello matematico di processamento delle informazio-
ni, che cercano di simulare il funzionamento dei neuroni all'interno di un siste-
ma informatico. Possono essere composte sia da programmi che da hardware
dedicato. Le reti neurali si basano principalmente sulla simulazioni di neuroni
artificiali opportunamente collegati.
I suddetti neuroni ricevono in ingresso degli stimoli e li elaborano. L'elaborazio-
ne può essere anche molto sofisticata ma in un caso semplice si può pensare che
i singoli ingressi vengano moltiplicati per un opportuno valore detto peso, il ri-
sultato delle moltiplicazioni viene sommato e se la somma supera una certa so-
glia il neurone si attiva attivando la sua uscita. Il peso serve a quantificare l'im-
portanza dell'ingresso, un ingresso molto importante avrà un peso elevato, men-
tre un ingresso poco utile all'elaborazione avrà un peso inferiore. I singoli neu-
roni vengono collegati alla schiera di neuroni successivi, in modo da formare
una rete di neuroni. Normalmente una rete è formata da tre strati. Nel primo ab-
biamo gli ingressi(I), questo strato si preoccupa di trattare gli ingressi in modo
da adeguarli alle richieste dei neuroni. Se i segnali in ingresso sono già trattati
può anche non esserci. Il secondo strato è quello nascosto (H, hidden), si preoc-
cupa dell'elaborazione vera e propria e può essere composto anche da più colon-
ne di neuroni. Il terzo strato è quello di uscita (O) e si preoccupa di raccogliere i
risultati ed adattarli alle richieste del blocco successivo della rete neurale. Que-
ste reti possono essere anche molto complesse e coinvolgere migliaia di neuroni
e decine di migliaia di connessioni. La fase più importante dell’implementazio-
ne di una rete neurale è l’apprendimento che consiste nella determinazione dei
pesi dei singoli neuroni che compongono la rete. L’apprendimento può essere
effettuato secondo tre modalità:
Χ Supervisionato ( supervised learning) : è basato su un insieme di dati per
l’addestramento (training set) che comprende esempi di ingressi con rela-
tive uscite loro corrispondenti. La rete tramite un opportuno algoritmo
33
CAPITOLO 2 Sistemi di Gaze tracking
cerca di riconoscere la relazione incognita che lega le variabili di ingresso
a quella di uscita, con lo scopo di poter fare previsioni anche laddove l’u-
scita non è nota a priori.
Χ non supervisionato ( unsupervised learning ), basato su algoritmi d’adde-
stramento che modificano i pesi della rete facendo esclusivamente riferi-
mento ad un insieme di dati che include le sole variabili d’ingresso. Tali
algoritmi tentano di raggruppare i dati d’ingresso e di individuare pertan-
to degli opportuni cluster rappresentativi dei dati stessi, facendo uso tipi-
camente di metodi topologici o probabilistici. L’apprendimento non su-
pervisionato è anche impiegato per sviluppare tecniche di compressione
dei dati.
Χ con rafforzamento ( reinforcement learning ) , nel quale un opportuno al-
goritmo si prefigge lo scopo di individuare un certo modus operandi, a
partire da un processo d’osservazione dell’ambiente esterno; ogni azione
ha un impatto sull’ambiente, e l’ambiente produce una retroazione che
guida l’algoritmo stesso nel processo d’apprendimento. Tale classe di
problemi postula un agente, dotato di capacità di percezione, che esplora
un ambiente nel quale intraprende una serie di azioni. L’ambiente stesso
fornisce in risposta un incentivo o un disincentivo, secondo i casi. Gli al-
goritmi per il reinforcement learning tentano in definitiva di determinare
una politica tesa a massimizzare gli incentivi cumulati ricevuti dall’agen-
te nel corso della sua esplorazione del problema. L’apprendimento con
rafforzamento differisce da quello supervisionato poiché non sono mai
presentate delle coppie input-output di esempi noti, né si procede alla
correzione esplicita di azioni subottimali. Inoltre, l’algoritmo è focalizza-
to sulla prestazione in linea, la quale implica un bilanciamento tra esplo-
razione di situazioni ignote e sfruttamento della conoscenza corrente.
Le reti neurali hanno il vantaggio di effettuare predizione molto precise e robuste,
ma hanno lo svantaggio di richiedere un lungo periodo di apprendimento.
34
CAPITOLO 2 Sistemi di Gaze tracking
2.5 Alcuni sistemi di eye-tracking esistenti
Esistono sul mercato diversi sistemi di tracciamento oculare, si distinguono essenzialmente
in due categorie:
• Sistemi a postazione fissa : i dispositivi vengono posizioni su un supporto distante
dall’utente (scrivania,carrozzina,letto).
• Sistemi indossabili : i dispositivi devono essere posizioni a diretto contatto con l’u-
tente, di solito sono costituiti da visori da indossare come occhiali.
Di seguito è riportata la descrizione di alcuni sistemi commerciali con una breve descrizio-
ne del principio di funzionamento e delle caratteristiche tecniche.
2.5.1 Mytobii
Prodotto dalla società svedese Mytobii technology,questo dispositivo è costituito da un mo-
nitor che integra due emettitori di raggi infrarossi e una telecamera ad alta definizione sen-
sibile agli infrarossi. Il sistema cattura ed analizza i raggi riflessi dalla cornea e stabilisce il
punto dello schermo osservato.
Figura 2.7: immagine di Tobii
Tab. 2.1 CARATTERISTICHE TECNICHE Mytobii
Display 17’’ TFT (1280x1024 px.)
Requisiti di sistema Windows XP, porta firewire
Peso 9 Kg
Distanza di lavoro 50-70 cm
Libertà dei movimenti della testa 30x15x20 cm
Massima velocità movimento della
testa10 cm/s
35
CAPITOLO 2 Sistemi di Gaze tracking
Tab. 2.1 CARATTERISTICHE TECNICHE Mytobii
Riconoscimento punti osservati 40 punti/s
Precisione di stima del punto os-
servatoCirca 0,5 cm
Tolleranza alla luce ambientale/so-
lare
Funziona bene in diverse condizioni di illumi-
nazione
Tolleranza agli occhiali e lenti a
contattoFunziona nella maggioranza dei casi
PosizionamentoUtilizzando un supporto per monitor può essere
posizionato su una scrivania o su un letto.
Compensazione dell’errore nel mo-
vimento della testaCirca 1 grado.
Applicazioni incluse
• Sostituto della tastiera
• Sostituto del mouse
• Internet browser
• Client e-mail
• Controllo ambientale
Tempo di posizionamento del-
l’hardwareMeno di 30 minuti
Tempo di calibrazione Pochi secondi
Prezzo 17900 …
2.5.2 Eyegaze System
Prodotto dalla LC Technologies inc. questo sistema ha lo stesso principio di funzionamento
descritto prima con la differenza che la telecamera e l’emettitore di raggi infrarossi sono
posizionati al disotto del monitor.
Una limitazione di Eyegaze è la scarsa tolleranza ai movimenti della testa e la necessità che
nella prossimità della telecamera non ci siano fonti di interferenza infrarosse come luci di
elevata intensità.
Eyegaze esiste in due versioni:
•••• eyegaze analysis: dedicata agli sviluppatori in cui sono incluse le librerie per poter
36
CAPITOLO 2 Sistemi di Gaze tracking
sviluppare programmi che utilizzino questo dispositivo.
•••• eyegaze comunication: integra programmi di comunicazione dedicati ad utenti con
difficoltà motorie. Una possibile configurazione è rappresentata in figura 2.
Figura 2.8: immagine di eyegaze
Tab. 2.2: Caratteristiche tencniche Eyegaze System
Peso 2,7 Kg
Precisione di stima del punto osservato 0,45÷0,70 gradi (0,38÷0,63 cm)
Tolleranza alla luce ambientale/solare Poco tollerante a forti fonti di luce infrarossa
Libertà dei movimenti della testa 3,8 x 3,0 x 3,8 cm
Frequenza di campionamento 60 Hz
Utilizzo CPU 50-60 %
Utilizzo Memoria 6 MB
Tempo di Calibrazione 15 s
Applicazioni incluse
• Sostituto della tastiera
• Sostituto del mouse
• Internet browser
• Client e-mail
• Supporto per la lettura libri elettroni-
ci
• Controllo ambientale
2.5.3 Quick Gaze II
Prodotto dall’Eyetech Digital System, come i precedenti dispositivi è costituito da una vi-
deocamera sensibile agli infrarossi e da due emettitori. La caratteristica che lo differenzia e
lo rende degno di nota è la possibilità data le ridotte dimensione dei dispositivi di essere
applicato con facilità ad un computer portatile (come mostrato in figura 2.9).
37
CAPITOLO 2 Sistemi di Gaze tracking
Figura 2.9: Quick Glace in configurazione portatile
Tab. 2.3: Caratteristiche tecniche Quick Glace II
Requisiti di sistema Microsoft Windows 98/XP (800 MHz o superiore)
Precisione di stima del punto
osservato
1 grado
Libertà dei movimenti della te-
sta
Dipende dal modello, da 4 x 4 cm a 10 x 10 cm
Tolleranza alla luce
ambientale/solare
Dipende dal modello, la tolleranza varia da discreta a
buona
Tolleranza agli occhiali e lenti a
contattoFunziona nella maggioranza dei casi
Riconoscimento punti osservati 15÷30 punti/s
Tempo di calibrazione Decine di secondi.
Applicazioni incluse
• Sostituto della tastiera
• Sostituto del mouse
• Internet browser
• Client e-mail
• Sintesi Vocale
• Giochi
Numero di sistemi in uso 500÷1000
2.5.4 EagleEyes
Sviluppato da Opportunity foundation of America, per il tracciamento della posizione ocu-
lare utilizza la tecnica dell’elettro-oculografia che consiste nella misurazione del potenziale
elettrico prodotto dal movimento oculare tramite cinque elettrodi posti sulla testa dell’uten-
te. Questo sistema è disponibile gratuitamente per utenti selezionati dalla fondazione.
38
CAPITOLO 2 Sistemi di Gaze tracking
In tabella 6.4 sono riportate alcune caratteristiche tecniche di EagleEyes, tra cui emergono
l’ampia libertà dei movimenti della testa e l’indipendenza dalle condizioni ambientali di il-
luminazione.
Tab 2.4: Caratteristiche tecniche Eagle Eyes
Requisiti di sistema Microsoft Windows 98/XP , porta USB
Peso meno di 500 g
Tolleranza alla luce ambien-
tale/solareFunziona in tutte le condizioni di luce.
Tolleranza agli occhiali e
lenti a contatto
Funziona bene nella maggioranza dei
casi
Libertà dei movimenti della
testa
Consente ampia libertà (superiore a 20
cm)
Frequenza di campionamento 15 Hz
Tempo di posizionamento
dell’hardware10 minuti
Tempo di Calibrazione variabile
Applicazioni incluse
• Sostituto della tastiera
• Sostituto del mouse
• Internet browser
• Client e-mail
• Supporto per la lettura libri
elettronici
• Controllo ambientale
Numero di sistemi in uso 10÷50
39
CAPITOLO 3
Active shape model
3.1 Introduzione
Per sviluppare il sistema di gaze tracking oggetto di questa tesi, si è partiti da un sistema
esistente che utilizza l'active shape model (ASM) come algoritmo di ricerca forme.
Nel corso del progetto si è analizzata e ottimizzata l'integrazione di questa tecnica all'inter-
no del sistema.
In questo capitolo è illustrato il principio di funzionamento dell'active shape model e del
modello matematico su cui è basato.
L’algoritmo di active shape model fu descritto per la prima volta in un articolo del 1992
intitolato “active shape models their training and aplication”, scritto da un gruppo di ricer-
catori formato da T.F. Cootes, C.J. Taylor ,D.H Cooper,e J.Graham.
L’obbiettivo di questo algoritmo è la ricerca di forme di oggetti conosciuti all’interno di
immagini. Questo metodo si differenzia dai predecessori per l’utilizzo di modelli flessibili
e deformabili per rappresentare le forme degli oggetti , ciò lo rende adatto all’utilizzo in
40
CAPITOLO 3 Active shape model
tutti i casi in cui si debbano ricercare oggetti il cui aspetto può variare (es. organi, compo-
nenti elettronici,ecc.).
Il modello della forma di un oggetto è costruito a partire da un insieme di immagini deno-
minato training set.
In questa tecnica ogni oggetto è rappresentato da un’insieme di punti.
I punti possono caratterizzare il contorno, caratteristiche interne e particolarità esterne del-
l’oggetto come il centro della sezione concava di un bordo.
I punti vengo posizionati nello stesso modo per ogni immagine del training set.
Il posizionamento dei punti avviene in modo manuale. Ci riferiremo al singolo punto con
il termine picchetto ,mentre a questa procedura con il termine di picchettatura.
L’insieme dei punti viene allineato automaticamente per minimizzare la varianza nella di-
stanza fra punti equivalenti nelle diverse immagini.
Dall’analisi della statistica della posizione dei punti viene ricavato un “modello della distri-
buzione dei punti” che fornisce la posizione media dei punti e comprende un numero di
parametri che controllano le principali modalità di variazione riscontrate nel training set.
Dato il modello appena descritto e un'immagine contenente un esemplare dell'oggetto mo-
dellato, l'interpretazione dell'immagine consiste nella scelta del valore di ogni parametro in
modo tale da avere la migliore corrispondenza tra la forma del modello e l'oggetto nell'im-
magine.
L'active shape model è una tecnica che funziona a partire da un modello non molto preciso
per quanto riguarda forma,posizione,scala e orientamento, che viene raffinato iterativa-
mente confrontandolo con l'immagine in cui si ricerca l'oggetto; si utilizzano le differenze
fra modello e immagine per modificare i parametri del modello deformando la forma.
Nell'articolo sopracitato venivano illustrati esempi di ricerca di forme di resistori su un cir-
cuito stampato, per contestualizzare tali esempi all'oggetto di questa tesi si sono modificati
con campioni di forme d'occhio.
41
CAPITOLO 3 Active shape model
3.2 Modello di distribuzione dei punti
Il nostro scopo è creare un modello per rappresentare le forme di occhio come appaiono in
immagini catturate da webcam come mostrato in figura 3.1 .
Figura 3.1: immagini di occhio catturate da webcam
Le immagini di occhi che fissano differenti punti dello schermo sono rappresentate da for-
me molto differenti tra loro, quindi rendono inadatto l'utilizzo di un modello rigido di rap-
presentazione.
L'obbiettivo che si prefigge il modello di distribuzione dei punti è la descrizione sia della
forma tipica dell'oggetto sia della tipica variazione tra una forma e l'altra a partire da un in-
sieme di immagini che costituisce il training set.
Si ottiene ciò rappresentando ogni campione come un insieme di punti etichettati, denomi-
nati “picchetti”.
3.2.1 Picchettatura del training set
Ogni forma per essere modellata è rappresentata da un'insieme di punti. Per la forma del-
l'occhio abbiamo scelto di posizionare 37 picchetti seguendo sia il contorno dell'occhio sia
il contorno della pupilla come mostrato in figura 3.2.
Figura 3.2: Picchetti occhi
42
CAPITOLO 3 Active shape model
Ogni picchetto rappresenta un particolare punto dell'oggetto o del suo contorno: per esem-
pio il picchetto 1 e il picchetto 3 rappresentano gli estremi sinistro e destro dell'occhio,
mentre i picchetti 2 e 4 indicano gli estremi superiore e inferiore.
Il metodo funziona modellando come i diversi picchetti tendono a muoversi insieme al va-
riare delle forme. Se la picchettatura non è corretta, con un particolare picchetto posiziona-
to malamente, questo metodo non riesce a catturare la variabilità della forma con precisio-
ne.
Possiamo ricondurre i picchetti a tre tipologie:
1. posizionati in punti con particolare significato per l'applicazione che usa il model-
lo: come ad esempio il centro della pupilla.
2. posizionati in punti senza particolare significato per le applicazioni: come il punto
più elevato della forma, una curvatura estrema o un caratteristico orientamento
3. punti di interpolazione fra picchetti di tipo 1 e picchetti di tipo 2
E' da notare che i picchetti possono essere utilizzati per descrivere singoli oggetti o diversi
oggetti che hanno correlazione spaziale, come ad esempio diverse parti di una struttura.
3.2.2 Allineamento del training set
Questo metodo di costruzione del modello funziona analizzando le statistiche delle coordi-
nate delle posizioni dei picchetti nel training set. Per confrontare punti equivalenti di im-
magini diverse, i picchetti devono essere allineati rispetto a un insieme di assi.
Si ottiene l'allineamento voluto attraverso variazioni di scala, rotazioni e traslazioni delle
forme del training set in modo che corrispondano il più possibile. Lo scopo è minimizzare
la somma pesata dei quadrati delle distanze fra punti equivalenti di forme differenti.
Consideriamo prima l'allineamento di una coppia di forme, sia x i un vettore che descri-
ve le n posizioni della forma i-esima del training set.
x i��xi0 , yi0 , xi1 , yi1 , ... , xik , yik , ... , xi n#1 , yi n#1
Sia M �s ,�� x � una rotazione di θ e uno scalamento di s. Date due forme simili x i e
x j possiamo scegliere j , s j e una traslazione t j��t x j , t y j� che mappano x i su
M �s ,�� x j � t j in modo da minimizzare la somma pesata:
E j��x i#M �s ,�� x j �#t j�T
W �x i#M �s ,�� x j �#t j�
43
CAPITOLO 3 Active shape model
dove M �s ,�� x j k
y j k����s cos� x j k#�s sin� y j k
�s sin� x j k �s cos� y j k�
W è una matrice diagonale di pesi per ogni punto.
Se poniamo
a x�s cos a y�s sin
un approccio ai minimi quadrati (differenza rispetto ognuna delle variabili a x , a y , t x , t y )
porta ad un insieme di quattro equazioni lineari.
�X 2 #Y 2 W 0
Y 2 X 2 0 W
Z 0 X 2 Y 2
0 Z #Y 2 X 2
��a x
a y
t x
t y
���X 1
Y 1
C1
C 2
�dove
X i��k�0
n#1
wk xik Y i��k�0
n#1
wk yik
Z��k�0
n#1
wk �x2 k
2 y2 k
2 � W��k�0
n#1
wk
C 1��k�0
n#1
wk �x1 k x2 k y1 k y2 k �
C 2��k�0
n#1
wk � y1 k x2 k#x1 k y2 k �
I pesi possono essere scelti in modo tale da dare più importanza ai punti che tendono ad es-
sere maggiormente “stabili” nell'insieme: ossia quei punti che si discostano poco dai corri-
spettivi altri punto delle altre forme.
La matrice dei pesi utilizzata è calcolata come segue:
sia Rk l la distanza tra i punti k e l in una forma: sia V Rk lla varianza della di questa di-
stanza nell'insieme delle forme. Si è scelto un peso wk per il punto k-esimo usando
wk���l�0
n#1
V Rk l�#1
Se un punto si muove notevolmente rispetto agli altri punti della forma la somma delle va-
rianze sarà alta e sarà assegnato un peso di basso valore, mentre se un punto tende a rima-
nere fisso rispetto agli altri avrà una somma delle varianze bassa e gli sarà assegnato un
44
CAPITOLO 3 Active shape model
peso elevato e riscontrare tali punti nelle altre forme sarà una priorità.
Si è utilizzato il seguente algoritmo per allineare un'insieme di N forme.
Χ Si ruota, si scala e si trasla ogni forma del training set per allinearla con la prima .
Χ Finché il processo non converge
Χ Si calcola la forma media dalle forme allineate.
Χ Si normalizza l'orientamento, la scala e l'origine della forma media calcolata prece-
dentemente per riportarla a caratteristiche predefinite.
Χ Si riallinea ogni forma dell'insieme con la forma media corrente.
La normalizzazione della forma media, con una scala e una posizione predefinita, è neces-
saria in ogni interazione per garantire la convergenza dell'algoritmo.
Senza normalizzazione vi sarebbero 4�N#1� vincoli su 4 N variabili ( , s , t x , t y
per ognuna delle N forme) e l'algoritmo sarebbe divergente, la forma media sarebbe, con-
tratta, ruotata e traslata all'infinito. I vincoli sulla posizione e la scala della forma media
permettono di avere un'unica soluzione all'equazione.
3.2.3 Cattura delle statistiche di un insieme di forme allineate
In figura X le coordinate di alcuni dei vertici delle forme di occhio allineate sono rappre-
sentate sovrapposte alla forma media. Si può notare che alcuni vertici mostrano una piccola
variabilità nel training set, mentre altri formano “nuvole” di punti più diffuse.
Ogni campione del training set, quando allineato, può essere rappresentato da un singolo
punto in uno spazio 2 n dimensionale. Perciò un insieme di N campioni di forme co-
stituisce una nuvola di N punti in uno spazio 2 n dimensionale.
Si assume che questi punti si trovino all'interno di una regione dello spazio che chiamiamo
“dominio delle forme possibile”, e che diano un indicazione sulla forma e sulla dimensione
di questa regione. Muovendosi all'interno del “dominio delle forma possibile” si possono
generare nuove forme in maniera sistematica. L'approccio descritto di seguito, cerca di mo-
dellare la forma della nuvola di distribuzione dei punti in un spazio ad elevata dimensione,
perciò cerca di stabilire la relazione tra le posizioni dei singoli picchetti.
Si assume che la nuvola sia approssimativamente ellissoidale e si procede a calcolarne il
centro (ottenendo una forma media) e i suo assi maggiori, che danno un modo per muover-
si all'interno di essa.
Dato un insieme di N forme allineate, la forma media, ����x (il centro del dominio ellis-
45
CAPITOLO 3 Active shape model
soidale della forma possibile), è calcolato usando
����x�1
N�i�1
N
x i
Ogni asse dell'ellissoide dà una modalità di variazione, un modo col quale i picchetti tendo
a muoversi insieme al variare della forma. Per ogni campione nel training set si calcola la
sua deviazione dalla forme media, d x i dove
d x i�x i#����x
Si può calcolare la matrice di covarianza S di dimensioni 2 n)2 n , usando
S�1
N�i�1
N
d x i d x i
T
Gli assi principali dell'ellissoide, sono descritti da pk �k�1,.... ,2 n� l'insieme di autova-
lori di S tali che
Spk��k pk
(dove �k è il k-esimo autovalore di S , con �k��k 1 )
pk
Tpk�1
Può essere dimostrato che gli autovettori della matrice di covarianza corrispondono ai mag-
giori autovalori che descrivono gli assi più lunghi dell'ellissoide, e perciò le più significanti
modalità di variazione delle variabili sono usate per ottenere la matrice di covarianza. La
varianza determinata da ogni autovettore è uguale al corrispondente autovalore. La maggior
parte della variazione può essere determinata in un piccolo numero di modi, t . Questo
significa che l'ellissoide di dimensione 2 n è approssimato da un ellissoide di dimensio-
ne t , dove t è scelto in modo tale che l'ellissoide originale abbia abbia un relativa-
mente piccola larghezza lungo gli assi t 1 e superiori.
Un metodo per calcolare t è scegliere il più piccolo numero di modi tali che la somma
delle loro varianze determini una sufficientemente larga proporzione di �T , la varianza
totale di tutte le variabili, dove
�T��k�1
2 n
�k
Ogni punto del dominio della forma possibile può essere ottenuto a partire dal punto medio
e sommando una combinazione lineare di autovettori. Il k-esimo autovettore incide nel mo-
dello sul movimento del punto l lungo un vettore parallelo a �d xk l , d yk l � , che è ot-
tenuto da l-esima coppia di elementi in pk :
46
CAPITOLO 3 Active shape model
pk
T��d xk 0 , d yk 0 , ...... , d xk l , d yk l , ...... , d xk n#1 , d xyk n#1�
Una forma nel training set può essere approssimata usando la forma media e la somma pe-
sata delle suo deviazioni ottenuta dalla prime t mode:
x�����x Pb (1),
dove
P�� p1 , p1 , . . . , pt �T
è la matrice dei primi t autovettori,
e b��b1 b2 .... bt�T
è un vettore di pesi.
Le equazioni sopra descritte permettono di generare nuovi campioni di forme variando i
parametri �bk � all'interno di appropriati limiti, in modo tale che la nuova forma sia simi-
le a quelle del training set. I parametri sono linearmente indipendenti, anche ci potrebbe es-
sere una dipendenza non lineare ancora presente.
I limiti per bk sono calcolati esaminando la distribuzione dei valori dei parametri richie-
sti per generare il training set. Dato che la varianza di bk nel training set può essere mo-
strata da �k , limiti idonei sono tipicamente dell'ordine di
#3��k�bk�3��k (2)
poiché la maggior parte dei punti è localizzata entro tre volte la deviazione standard dal
punto medio.
3.3 Ricerca delle forme nelle immagini
Dove aver generato un modello flessibile , esso verrà utilizzato per trovare nuovi campioni
di oggetti modellati nelle immagini. Questo coinvolge la ricerca della forma e la scelta dei
parametri in modo tale da far coincidere il modello con le strutture dell'immagine interessa-
ta. Un 'istanza del modello è data da
X�M �s ,�� x � X c , dove
X c��X c ,Y c , X c ,Y c , ..... , X c ,Y c�T
M �s ,�� � è una rotazione di e uno scalamento di s, e
�X c ,Y c� è la posizione del centro del modello nell'immagine.
In questo paragrafo sarà descritto un metodo iterativo per trovare un X appropriato data
un'approssimazione iniziale molto poco accurata.
L'idea dello schema iterativo è posizionare la stima corrente di X nell'immagine ed esa-
47
CAPITOLO 3 Active shape model
minare la regione dell'immagine attorno ad ogni punto del modello per determinare sposta-
mento in una posizione migliore. Queste deformazioni locali sono trasformate in cambia-
menti di posa,scala e parametri della forma dei modello di distribuzione dei punti.
I vincoli sui parametri del modello possono essere applicati per fare in modo che la forma
generata sia simile a quelle presenti nel training set.
La procedura di deformazione viene ripetuta Finché non si ottengono significanti cambia-
menti.
3.3.1 Calcolo dello spostamento indicato per ogni punto del modello
Data una stima iniziale delle posizioni dell'insieme dei punti del modello che si sta cercan-
do di adattare ad un oggetto nell'immagine, si ha necessità di trovare un insieme di aggiu-
stamenti che spostino ogni punto in una posizione migliore. Quando i punti del modello
rappresentano i contorni dell'oggetto questa procedura comporta lo spostamento lungo i
bordi dell'immagine. Denotiamo l'insieme degli aggiustamenti come un vettore d X ,
dove
d X��d X 0 , d Y 0 , ........ , d X n#1 , d Y n#1�
3.3.2 Calcolo dei cambiamenti nella posizione e nei parametri della for-
ma
L'obbiettivo e modificare la posizione e i parametri della forma del modello per muovere i
punti dalla loro attuale posizione nell'immagine, X , per essere il più vicini possibile
alle nuove posizioni indicate �X d X � , rispettando i vincoli del modello.
Se la stima corrente del modello è centrata in �X c ,Y c� con orientamento e scala
s , dapprima si deve calcolare come modificare questi parametri per avere un migliore
adattamento all'immagine. Ciò è ottenuto trovando la traslazione �d X c , d Y c� la rotazio-
ne d e il fattore di scala �1 d s� che meglio mappa l'insieme corrente di punti,
X , nell'insieme di punti dato da �X d X � .
Dopo aver modificato le variabili che controllano la posizione del modello, rimangono da
cambiare i parametri che permettono di deformare la forma del modello.
Si calcolano gli aggiustamenti, d x , nelle coordinate locali dell'immagine, richiesti per
lo spostamento dei punti X di d X quando si combinano con gli effetti dei parametri
della nuova scala, rotazione e traslazione.
48
CAPITOLO 3 Active shape model
La posizione iniziali dei punti nell'immagine è data da
X�M �s ,�� x � X c
Si calcolano un insieme di aggiustamenti residui d x nelle coordinate locali del modello
in modo che:
M �s �1 d s� ,� d ��� x d x � �X c d X c���X d X �
perciò
M �s �1 d s� , d �� x d x ���M �s ,�� x � d X �#�X c d X c�
e poiché
M#1�s ,�� ��M �s#1
,#�� �
si ottiene
d x�M ��s �1 d s��#1,#� d ��� y �#x (3)
, dove y�M �s ,�� x � d X#d X c
L'equazione (3) fornisce un metodo di calcolare i movimenti indicati nei punti x nelle
coordinate locali del modello. Questi movimenti in genere non sono consistenti con il mo-
dello della forme.
Con lo scopo di applicare i vincoli della forma, si trasforma n d x nello spazio dei para-
metri del modello. Sia d b , i cambiamenti ai parametri del modello richiesti per adattare
i punti del modello a d x secondo i vincoli.
Si vuole calcolare d b in modo che
x d x��x P �b d b� (4)
Dato che ci sono solo t � �2 n� modi di variazioni sono possibili e d x
può muovere i punti in 2 n differenti gradi di libertà, si può ottenere un'approssimazione
della deformazione richiesta.
Sottraendo la (1) dalla (20) si ottiene
d x�P �b�
e
d b�PT
d x (5)
dato che PT�P
####1 , poiché le colonne di P sono mutuamente ortogonali.
Può essere dimostrato che l'equazione (5) è equivalente ad utilizzare l'approssimazione del
minimo quadrato per calcolare i parametri modificati della forma , d b .
49
CAPITOLO 3 Active shape model
3.3.3 Aggiornamento della posizione e dei parametri della forma
Le equazioni precedenti permettono di calcolare i cambiamenti alla variabili di posiziona-
mento e gli aggiustamenti d X C , d Y C , d , d s ai parametri della forma d b
richiesti per migliorare la corrispondenza tra modello e immagine.
L'aggiornamento dei parametri si applica in uno schema iterativo
X c� X c wt d X c
Y c�Y c w t d Y c
� wd
s� s �1 w s d s�
b����b W b d b
dove wt , w s , w sono pesi scalari e W b è una matrice diagonale di pesi, uno per ogni
moda. Questa può essere la matrice identità, o ogni peso può essere proporzionale alla de-
viazione del corrispondente parametro della forma nel training set. Si assicura che il mo-
dello venga deformato solamente in forme consistenti col training set ponendo dei limiti al
valore di bk . Una forma può essere considerata accettabile se la distanza di Mahalano-
bis Dm è minore di una costante opportuna , Dmax . Questo limite è calcolato in modo
tale che pressoché tutti i campioni presenti nel training set soddisfino l'equazione 16.
3.4 Implementazione dell'algoritmo
E' stato appena descritto nei paragrafi precedenti un metodo generico per ricercare una for-
ma di un oggetto a partire da un modello di distribuzione dei punti.
Non è stato sinora spiegato come implementare lo spostamento e la deformazione della for-
ma del modello sull'oggetto dell'immagine. Questo passo dell'algoritmo non è descritto
specificatamente nell'articolo citato in precedenza, ma viene lasciata libertà di scelta.
Verrà ora descritta l'implementazione adottata nel sistema di gaze tracking esistente.
Per ogni punto di ogni forma presente nel training set viene memorizzata una matrice di
gradienti di colori W)H riempita considerando un rettangolo centrato nel picchetto e
con orientamento normale all'andamento del contorno dell'oggetto come mostrato in figura
3.3.
50
CAPITOLO 3 Active shape model
Figura 3.3: Memorizzazione matrice colori
Viene in seguito elaborata una “matrice associativa” che contiene tutti le matrici dei gra-
dienti dei colori di ogni picchetto di ogni forma relazionata al valore dei pesi dei parametri
che deformano il modello. L'aggiornamento delle variabili che determinano la posizione e
dei parametri che deformano il modello avviene minimizzando la differenza fra l'intorno
dei punti in cui è applicato il modello sull'immagine e le matrici dei gradienti di colori me-
morizzate all'interno della matrice associativa . L'aggiornamento avviene iterativamente
finché non si raggiunge una soglia di precisione voluta.
51
CAPITOLO 4
Analisi di fattibilità
4.1 Introduzione
Prima di procedere all'implementazione del sistema è necessaria una fase di analisi di fatti-
bilità sui diversi componenti di cui è costituito.
In questo capitolo vengono riportati i risultati della fase di analisi effettuata prima e durante
la fase iniziale della progettazione del sistema di gaze tracking.
Le scelte progettuali illustrate nel capitolo successivo sono in gran parte giustificate dalle
problematiche e dalle difficoltà incontrante durante la fase di studio della possibilità tecni-
ca di realizzazione del sistema.
Per verificare le ipotesi teoriche emerse durante la fase di analisi sono stati realizzati appli-
cativi specifici per effettuare test sull'efficienza e la potenzialità di algoritmi e tecniche uti-
lizzate.
Questa sperimentazione ha permesso di selezionare in fase di realizzazione solo le alterna-
52
CAPITOLO 4 Analisi di fattibilità
tive più efficienti e funzionali.
La struttura di questo capitolo ricalca la divisione in moduli di un generico sistema di gaze-
tracking descritta nel capitolo 2.
4.2 Cattura delle immagini
La fase di cattura delle immagini è la base su cui si appoggia il resto del sistema, quindi
deve essere robusta, veloce e utilizzare poche risorse.
Un vincolo progettuale è l'utilizzo di dispositivi di cattura a basso costo per rendere acces-
sibile al maggior numero di persone possibile il sistema di gaze-tracking.
Una webcam comune,attualmente in commercio, è in grado di catturare circa venti imma-
gini al secondo con una risoluzione di 640x480 pixel.
Con un frame rate così basso è impossibile tracciare i movimenti degli occhi perché troppo
rapidi, quindi per determinare la posizione fissata ci si dovrà basare solo sulla forma del-
l'occhio durante la fase di fissazione e non durante i movimenti saccadici1.
Data la ridotta risoluzione di acquisizione diventa rilevante il posizionamento della web-
cam: maggiore è la vicinanza della webcam all'occhio maggiore sarà la porzione dell'im-
magine occupata dall'occhio.
Per poter identificare le forme di occhio quando la fissazione avviene nella parte inferiore
dello schermo è necessario che la webcam sia localizzata al di sotto del monitor (figura
4.1), poiché se fosse posizionata al di sopra la forma dell'occhio sarebbe mascherata dalle
palpebre.
Per quanto riguarda il tracciamento dei movimenti della testa risulta più utile posizionare la
webcam al disopra del monitor, poiché sono utilizzate la forma delle sopracciglia e la dire-
zione del naso per effettuare il riconoscimento del punto fissato (figura 4.2).
Il diverso posizionamento delle webcam in caso di eye-tracking ed head-tracking lascia
aperta la possibilità di utilizzare il sistema con due webcam in contemporanea.
1 Vedere capitolo 1.2
53
CAPITOLO 4 Analisi di fattibilità
Figura 4.1: disposizione webcam Eye tracking Figura 4.2: disposizione webcam Head tracking
In fase di progettazione sono emerse due possibili architetture d'implementazione del mo-
dulo di acquisizione delle immagini.
• Cattura continua delle immagini della webcam.
• Cattura delle nuove immagini quando sono necessarie al sistema per eseguire il ri-
conoscimento.
La cattura continua delle immagini della webcam ha il vantaggio di evitare l'implementa-
zione di un protocollo di comunicazione tra modulo di cattura immagini e modulo di rico-
noscimento forme con il risparmio delle relative tempistiche di funzionamento, ma ha lo
svantaggio di utilizzare risorse del sistema anche quando non strettamente necessarie all'e-
laborazione e riconoscimento del punto fissato. Il modulo di riconoscimento forme recupe-
ra l'immagine da una zona di memoria condivisa con il modulo di acquisizione video.
L'utilizzo della seconda tecnica permette una maggiore indipendenza del modulo di acqui-
sizione video dal resto del sistema.
Quando richiesta l’immagine viene inviata direttamente dal modulo di acquisizione video
al modulo di riconoscimento forme.
4.3 Problematiche nell’utilizzo di ASM
In questo paragrafo sono trattate tutte le difficoltà riscontrante nello studio della possibilità
di implementazione dell'algoritmo di active shape model all'interno del sistema di gaze-
tracking.
54
CAPITOLO 4 Analisi di fattibilità
4.3.1 Difficoltà nel produrre un modello
Come è stato illustrato nel capitolo precedente ASM necessita della costruzione di un mo-
dello dell'oggetto da ricercare all'interno delle immagini.
Sono svariate le possibilità di scelta per la costruzione di un modello, di seguito sono ripor-
tati i principali quesiti che ci siamo posti prima della sua strutturazione .
• Cosa modellare esattamente?
• Quanti picchetti posizionare?
• Come determinare i punti caratteristici della forma?
• Quanto deve essere la matrice di colori da memorizzare nell’intorno del picchetto?
• Quante immagini sono necessarie per produrre il modello?
Un requisito del sistema è la possibilità di funzionare sia in modalità di eye tracker che di
head-tracker quindi si dovranno gestire due modelli diversi.
Per quanto riguarda il tracciamento oculare vi è la possibilità di modellare la forma di un
singolo occhio oppure di entrambi.
Noi abbiamo scelto di concentrarci sulla modellazione di un singolo occhio , essenzialmen-
te per due motivi:
• Analizzando la variazione della forme degli occhi in relazione al punto osservato si
è notato che le informazioni ottenute da entrambi gli occhi sono ridondanti. Si è
evidenziata inoltre la presenza di un occhio “dominante”: la cui forma ha una diffe-
renziazione maggiore rispetto all’altro occhio in relazione ai punti osservati.
• A parità di numero di picchetti utilizzati per delimitare la forma, concentrare l’at-
tenzione su un unico occhio permette di migliorare la definizione del modello.
Utilizzando la forma di un solo occhio abbiamo però lo svantaggio di avere un ridotto con-
trollo sull’errore durante la fase di riconoscimento, infatti la ridondanza, vista come aspetto
negativo durante la modellazione, permette l’individuazione e il parziale recupero delle
imprecisioni.
Un’importante scelta progettuale è stata la definizione del posizionamento dei picchetti per
la determinazione dei punti caratteristici dei modelli dell’occhio e della testa.
Data l’immagine di occhio in figura 4.3 si possono evidenziare come punti caratteristici
per determinarne la forma: il contorno esterno, la pupilla e il centro della pupilla.
55
CAPITOLO 4 Analisi di fattibilità
Basandoci sugli esempi di modellazione incontrati in letteratura abbiamo ritenuto che per
avere una buona definizione del modello il numero di picchetti ideali da posizionare fosse
37 (figura 4.4).
Figura 4.3: immagine dell'occhio Figura 4.4: posizione picchetti sull'occhio
Per quanto riguarda la modellazione della posizione della testa (figura 4.5) si possono evi-
denziare come punti caratteristici: le sopracciglia,il naso, e la zona di intersezione tra le so-
pracciglia e la sommità del naso.
Per semplificare il progetto del sistema che utilizza il modello, si è deciso di mantenere lo
stesso numero di picchetti sia per la forma dell’occhio sia per quella della testa.
Figura 4.5: immagine del voltoFigura 4.6: posizione dei picchetti sulla testa
In figura 4.6 è rappresentato un esempio di posizionamento dei picchetti sulla testa.
L’unico punto non ancora analizzato per la costruzione del modello è la scelta della dimen-
sione della matrice di colori da memorizzare nell’intorno di ogni picchetto.
Le dimensioni delle matrici di colori incidono notevolmente sulla precisione e sui tempi
della ricerca delle forme: maggiori sono le dimensioni, migliore sarà la precisione e più
lunghi saranno i tempi per trovare la forma all’interno dell’immagine.
E’ difficile stabilire in fase di studio quali siano le dimensioni ideali per cui la scelta è stato
56
CAPITOLO 4 Analisi di fattibilità
posticipata nella fase successiva del progetto.
Per costruire il modello sono necessarie immagini dell’ occhio (o testa) che osserva punti
diversi dello schermo.
Maggiore è il numero di immagini che costituiscono il training set maggiore sarà la preci-
sione del modello.
Il numero di immagini del training set determina anche la complessità computazionale del-
la ricerca per cui è impossibile ipotizzare la costruzione di un unico modello per tutte le ti-
pologie di forme d’occhio.
Il sistema di gaze-tracking quindi gestirà modelli specifici di testa e di occhio per ogni sin-
gola persona che l’utilizzi.
4.3.2 Calcolo della complessità computazionale
L’analisi della complessità dell’algoritmo è utile per determinare scelte ottimali dei para-
metri in fase di costruzione del modello.
Nel capitolo precedente è stata descritta a grandi linee l’implementazione dell’active shape
model utilizzata nel sistema di gaze-tracking.
Per poter effettuare un’analisi di complessità si deve dettagliare maggiormente il funziona-
mento dell’implementazione adottata.
• si determina un punto iniziale dell’immagine in cui posizionare la forma “media”
dell’oggetto.
• Per M volte si trasla,ruota e scala il modello della forma media per minimizzare la
differenza tra i gradienti di colore nell’intorno dei punti dell’immagine corrente e
quelli memorizzati nella matrice associativa.
• Si seleziona la posizione che la cui distanza della matrici di colori risulta minima
• Finché la differenza tra i gradienti di colore dell’immagine corrente e i gradienti
contenuti nella matrice associativa non è inferiore ad una determinata soglia, oppu-
re al massimo per K volte si procede nel seguente modo :
1. si ricerca all’interno del training set la forma con minore differenza di colore ri-
spetto all’immagine in cui si sta ricercando la forma
2. si utilizzano i pesi della forma trovata nel training set per calcolare i nuovi pesi
per deformare il modello della forma media
57
CAPITOLO 4 Analisi di fattibilità
3. si allinea la forma ottenuta con la posizione calcolata nel passo 2 dell’algoritmo
I calcoli esposti di seguito sono il risultato di un'estrema semplificazione del problema del
calcolo della complessità, ma riescono comunque a dare l'idea di come i parametri di pro-
getto influiscano sul funzionamento dell'algoritmo.
Per rendere agevoli e più chiara l'analisi sono state considerate tutte le operazioni sia arit-
metiche che di confronto con costo computazionale uguale.
Siano H e W rispettivamente le colonne e le righe della matrice dei gradienti di colore.
Ogni colore è rappresenta a sua volta da tre componenti memorizzati in un byte ciascuno.
Per verificare la differenze tra due forme si devono calcolare ndis�37)H)W distanze tra
punti delle matrice. In questa implementazione è considerata la distanza euclidea; siano
Σ � e Σ � due punti delle matrici di colore e �5 � �∗ � �% � , �5 � �∗ � �% � le ri-
spettive componenti di colore, definiamo la distanza tra questi punti come
Γ �Σ � � Σ �����5 �#5 ��� �∗ �#∗ ��
� �% �#% ���
Per calcolare una distanza quindi occorrono 9 operazioni matematiche.
Il numero totali di operazioni per confrontare due forme è ΘΡΣ ΓΛς� )ΘΓΛς .
Ipotizzando il caso peggiore, in cui l'algoritmo non trovi una differenza tra le forme al di-
sotto della soglia predeterminata, il punto 4 dell'algoritmo si ripete per K volte. Per ricerca-
re una forma in un'immagine il numero di operazioni è dato da
ΘΡΣ ΥΛΦΗΥΦ∆�ΘΡΣ ΓΛς)�0 . )�1 �� . )�
dove
N è il numero di immagini del training set.
� rappresenta il numero di operazioni necessarie alla deformazione del modello, è fun-
zione del numero di picchetti della forma.
In conclusione, i parametri che influenzano la complessità dell'algoritmo di riconoscimento
sono:
Χ W e H : numero di righe e colonne della matrice dei colori.
Χ N: numero di immagini che costituiscono il training set.
Χ M: numero di interazioni per il posizionamento della forma media del modello.
Χ K: numero massimo di deformazioni del modello per la ricerca della forma.
58
CAPITOLO 4 Analisi di fattibilità
4.4 Determinazione punto fissato (Gaze detection)
La determinazione del punto fissato è riconducibile ad un generico problema di classifica-
zione in cui i dati di ingresso,rappresentati dalle forme riconosciute, devono essere distinti
in classi che sono rappresentate dalle zone dello schermo fissate.
In questo contesto utilizzeremo il termine classificazione come sinonimo di Gaze detec-
tion.
Come è stato illustrato nel capitolo 3 esistono svariate tecniche di classificazione degli og-
getti. Per verificare quale tecnica si adatti meglio alla Gaze detection si è sviluppata un'ap-
plicazione esterna al sistema per la ricerca delle forme tramite active shape model.
Le considerazioni riportate in questo paragrafo sono inerenti all'eye tracking, in quando per
l'head tracking non si è ricorsi all'utilizzo di un classificatore come verrà spiegato nel ca-
pitolo 5.
L'applicazione sviluppata fornisce i seguenti dati in ingresso al classificatore:
Χ le coordinate dei punti della forma trovata
Χ il vettore degli autovalori utilizzati per modificare il modello
Χ il numero di interazioni effettuate
Χ l'indice dell'immagine del training set che ha la forma più simile a quella trovata
Χ la minima differenza tra forma trovata e le forme del training set
Sono state analizzate tre possibili implementazioni di classificatore:
Χ un classificatore con fase di addestramento che utilizza i pesi del modello
Χ un classificatore con fase di addestramento che utilizza l'indice delle immagini
Χ un classificatore senza fase di addestramento
4.4.1 Fase di addestramento
La fase di addestramento è il processo in cui si raccolgono informazioni per poter stabilire
all'interno del classificatore una relazione tra ingressi e uscite desiderate. Nel sistema svi-
luppato questa fase consiste nell'osservazione da parte dell'utente di una forma circolare
che si muove all'interno dello schermo mentre è in esecuzione l'algoritmo di riconoscimen-
to forme.
La posizione del cerchio è considerata l'uscita desiderata, poiché indica il punto fissato,
mentre i parametri della forma riconosciuta rappresentano i dati in ingresso.
In figura 4.7 è schematizzata la fase di addestramento descritta.
59
CAPITOLO 4 Analisi di fattibilità
Figura 4.7: fase di addestramento
Ogni fase di addestramento sperimentata è contraddistinta dai seguenti parametri:
Χ numero di forme in ingresso
Χ percorso effettuato dalla forma circolare
Χ tempo impiegato
Per ogni sistema di classificazione analizzato sono state provate diverse tipologie di fasi
d'addestramento per stabilire le più appropriate.
4.4.2 Utilizzo dei pesi del modello
Il modello della forma dell'occhio ricavato dal posizionamento di 37 picchetti sulle imma-
gini del training set risulta modificabile da 7 pesi.
Le modifiche più evidenti nella forma del modello sono prodotte dalla variazione dei primi
tre pesi. In figura 4.8 è evidenziata la variazione della forma in relazione al cambiamento
del valore dei pesi �P0 , P1 , P2� . Il campo di variazione di ogni peso è calcolato utiliz-
zando la formula (2).
Nel modello da cui sono ricavate le illustrazioni i pesi hanno il seguente dominio:
P0ζ�#24, 24 � P1ζ�#14,14� P2ζ�#9,9�
60
CAPITOLO 4 Analisi di fattibilità
Figura 4.8: variazione della forma del modello in relazione ai pesi
L'algoritmo per porre in relazione i pesi del modello con la posizione fissata opera nel se-
guente modo:
Χ si divide lo schermo in una griglia di m righe n colonne determinando
m)n zone.
Χ durante la fase di addestramento per ogni zona in cui è diviso lo schermo si me-
morizzano i valori assunti dai pesi P0 e P1
Χ finito l'addestramento si calcolano per ogni zona valore massimo e minimo di
ogni peso. Per escludere possibili valori errati non si considerano i valori che dif-
feriscono dalla media di più di due volte della varianza.
Χ Per ogni zona il massimo e il minimo di P0 e P1 determinano un' interval-
lo specifico del dominio di variabilità dei pesi.
Χ La classificazione di una nuova forma avviene controllando a che intervallo di
pesi essa appartiene.
Χ Per migliorare l'accuratezza della classificazione si è deciso di considerare i va-
lori dei pesi su F forme riconosciute.
Le verifiche sperimentali effettuate su questa tipologia di classificatore non sono risultate
soddisfacenti. Nelle tabelle dalla 4.1 alla 4.6 sono riportati alcuni risultati della sperimenta-
61
CAPITOLO 4 Analisi di fattibilità
zioni svolte. I risultati riportati nelle tabelle seguenti sono una media delle prove svolte uti-
lizzando uno stesso modello e variando le condizioni di luce e la posizione dell'utente. Per
ogni verifica sono state effettuata da un minimo di 5 ad un massimo di 10 misurazioni.
Il tasso di errore globale è stato calcolato per mezzo di un apposito software che illumina in
modo casuale delle zone dello schermo che l'utente deve osservare e verifica la correttezza
della classificazione.
Tab. 4.1: Verifica sperimentale 1
Numero forme del modello 60
Dimensioni griglia 3x4
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 60 s
Tasso di errore globale 58%
Tab. 4.2: Verifica sperimentale 2
Numero forme del modello 30
Dimensioni griglia 3x4
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 50 s
Tasso di errore globale 55%
Tab. 4.3: Verifica sperimentale 3
Numero forme del modello 60
Dimensioni griglia 3x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 45 s
Tasso di errore globale 52%
Tab. 4.4: Verifica sperimentale 4
Numero forme del modello 30
Dimensioni griglia 3x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 40 s
Tasso di errore globale 48%
62
CAPITOLO 4 Analisi di fattibilità
Tab. 4.5: Verifica sperimentale 5
Numero forme del modello 60
Dimensioni griglia 2x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 40 s
Tasso di errore globale 50,00%
Tab. 4.6: Verifica sperimentale 6
Numero forme del modello 30
Dimensioni griglia 2x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 38 s
Tasso di errore globale 47%
Di seguito sono riportati i grafici che illustrano l'andamento del tasso di errore in funzione
del numero di forme utilizzate durante l'addestramento.
Figura 4.9: Verifica 1 e 2, griglia 3)4
63
CAPITOLO 4 Analisi di fattibilità
Figura 4.10: Verifica 3 e 4, griglia 3x3
Figura 4.11: Verifica 5 e 6, griglia 2x3
Come si nota dai grafici (figure 4.9, 4.10 e 4.11)e dalle tabelle le verifiche sperimentali
hanno dimostrato che nessuna fra le configurazioni provate ha fornito risultati accettabili.
Emerge dai grafici un abbassamento del tasso di errore in funzione della diminuzione del
numero di zone in cui è suddiviso lo schermo. Tale andamento è da pesare con l'aumento
della probabilità di effettuare un riconoscimento esatto in maniera casuale, infatti si passa
da 8% per una griglia 3)4 al 17 % per una griglia 2)3 .
Per avere una spiegazione di questi risultati si possono osservare i grafici nelle figure 4.12
e 4.13 in cui sono rappresentate le relazioni tra pesi e zone osservate.
Ogni forma è rappresentata da un punto del piano determinato considerando il peso P0
come ascissa e P1 come ordinata. Le zone in cui è suddiviso lo schermo sono rappre-
sentate da aree del piano di forma rettangolare. Le aree tratteggiate indicano la sovrapposi-
64
CAPITOLO 4 Analisi di fattibilità
zione tra due o più zone.
Figura 4.12: Relazione tra pesi delle forme e zone osservate. Griglia 2x3
Figura 4.13: Relazione tra pesi delle forme e zone osservate. Griglia 3x3
Il tasso di errore così elevato è dovuto all'assenza di una netta divisione tra le varie zone,
esistono valori dei pesi per cui il classificatore indica più zone possibili.
Si sono sperimentate diverse tecniche per migliorare i risultati:
Χ quando la forma appartiene a più zone osservate la si attribuisce alla zona che ha
il baricentro più vicino al punto del piano che la rappresenta.
65
CAPITOLO 4 Analisi di fattibilità
Χ Si attendono F forme e si sceglie come zona osservata quella che risulta indi-
cata dalla maggioranza delle forme. L'utilizzo di questa tecniche riduce la possi-
bilità di conflitto tra le diverse zone, ma aumenta notevolmente le tempistiche di
funzionamento del classificatore.
Nel grafico in figura 4.14 è mostrato l'andamento del tasso di errore per le verifiche 5 e 6 al
variare del parametro F.
Figura 4.14: andamento tasso di errore verifiche 5 e 6
Nel grafico in figura 4.15 è illustrato l'andamento del tempo di classificazione in funzione
parametro F. Tale tempo indica i secondi necessari al classificatore per indicare la zona
dello schermo selezionata dall'utente.
66
CAPITOLO 4 Analisi di fattibilità
Figura 4.15: andamento del tempo di classificazione nelle verifiche 5 e 6
Dalle verifiche effettuate è emerso che l'utilizzo di questo algoritmo di classificazione pro-
duce risultati inaccettabili sia per quanto riguarda il tasso di errore nel riconoscimento sia
per le tempistiche della fase di adattamento.
Il funzionamento teorico dell'algoritmo è stato confutato dalla fase sperimentale.
Questi pessimi risultati sono dovuti agli errori introdotti dall'active shape model nella ricer-
ca della forma.
4.4.3 Utilizzo dell'indice delle immagini
L'algoritmo di ricerca forme implementato fornisce come dato in uscita l'indice dell'imma-
gine del training set con forma più simile a quella trovata.
Si è sviluppata e testata una tecnica di classificazione che utilizza tale indice per stabilire la
zona dello schermo fissata.
L'algoritmo opera nel seguente modo:
Χ si divide lo schermo in una griglia di m righe n colonne determinando
m)n zone.
Χ durante la fase di addestramento per ogni zona in cui è diviso lo schermo si me-
morizzano gli indici delle immagini del training set rilevati.
Χ finito l'addestramento si calcolano per ogni indice memorizzato due probabilità:
Χ Probabilità relativa alla zona:
67
CAPITOLO 4 Analisi di fattibilità
P R , Z �i ��numero forme di indice i nella zona Z
numero forme nella zona Z
Χ Probabilità totale:
PT �i��numero forme di indice i
numero forme TOTALI
Χ La classificazione di una nuova forma avviene determinando quale zona dello
schermo ha maggiore probabilità di essere indicata dall'indice della forma del
training set.
Χ Per migliorare l'accuratezza della classificazione si è deciso di calcolare la pro-
babilità della zona osservata considerando F indici.
Χ Dato un indice i per ogni zona Z si calcola:
PZ , f �PR , Z �i�∝PT con f ζ�0, F#1�
Χ Dopo f indici si calcola per ogni zona la probabilità di essere fissata:
P Z�1
F∝�
f �0
F#1
PZ , f
Χ La zona prescelta sarà quella con probabilità maggiore:
max�Zζ�1 , M )N ��
�P Z
Nelle tabelle dalla 4.7 alla 4.12 sono riportati alcuni risultati della sperimentazioni svolte. I
risultati riportati nelle tabelle seguenti sono una media delle prove svolte utilizzando uno
stesso modello e variando le condizioni di luce e la posizione dell'utente.
Per avere la possibilità di effettuare un confronto con le verifiche elaborate per l'algoritmo
descritto in precedenza sono stati mantenuti gli stessi parametri di sperimentazione.
Tab 4.7: Verifica sperimentale 7
Numero forme del modello 60
Dimensioni griglia 3x4
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 60 s
Tasso di errore globale 44%
68
CAPITOLO 4 Analisi di fattibilità
Tab 4.8: Verifica sperimentale 8
Numero forme del modello 30
Dimensioni griglia 3x4
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 50 s
Tasso di errore globale 41%
Tab 4.9: Verifica sperimentale 9
Numero forme del modello 60
Dimensioni griglia 3x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 45 s
Tasso di errore globale 40%
Tab 4.10: Verifica sperimentale 10
Numero forme del modello 30
Dimensioni griglia 3x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 40 s
Tasso di errore globale 36%
Tab 4.11: Verifica sperimentale 11
Numero forme del modello 60
Dimensioni griglia 2x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 40 s
Tasso di errore globale 37%
Tab 4.12: Verifica sperimentale 12
Numero forme del modello 30
Dimensioni griglia 2x3
Numero forme catturate per ogni zonadello schermo
10
Durata fase di addestramento 38 s
69
CAPITOLO 4 Analisi di fattibilità
Tab 4.12: Verifica sperimentale 12
Tasso di errore globale 33%
Nelle figure 4.16, 4.17 e 4.18 è illustrato l'andamento del tasso di errore in funzione del
numero delle forme utilizzate durante la fase di addestramento.
Figura 4.16 : andamento tasso di errore Griglia 3x4
Figura 4.17 : andamento tasso di errore Griglia 3x3
70
CAPITOLO 4 Analisi di fattibilità
Figura 4.18 : andamento tasso di errore Griglia 2x3
Dai grafici sopra riportati emerge che all'aumentare del numero di forme utilizzate durante
la fase di addestramento si ha un aumento dell'accuratezza della classificazione.
Perchè il sistema sia facilmente utilizzabile la fase di addestramento deve durare il minor
tempo possibile. Si deve cercare quindi il miglior compromesso tra durata dell'addestra-
mento e precisione voluta. Nel grafico in figura 4.19 è riportato, in riferimento alle verifi-
che 11 e 12, l'andamento della durata della fase di addestramento in funzione del numero di
immagini catturate per ogni zona.
Figura 4.19: andamento del tempo di addestramento in funzione del numero di forme catturate per ogni
zona
71
CAPITOLO 4 Analisi di fattibilità
Tutti i grafici finora riportati sono stati elaborati considerando il parametro F�1 .
Interessante è verificare , come per l'algoritmo precedente, l'andamento del tasso d'errore e
dei tempi di classificazione all'aumento del parametro F . Tali andamenti sono illustrati
rispettivamente nei grafici in figura 4.20 e 4.21.
Figura 4.20: tasso di errori in funzione del parametro F
Figura 4.21: tempo di classificazione in funzione del parametro F
Dalla combinazione della scelta del valore di F e del numero di forme catturate si è rilevato
che per una griglia 2)3 si hanno risultati ottimali conderando i seguenti intervalli:
Χ Fζ�5,10�
Χ Numero forme catturate ζ�15, 25�
72
CAPITOLO 4 Analisi di fattibilità
Il tasso di errore, considerando i parametri all'interno tali intervalli, varia dal 14% al 22%.
Con questa tecnica si ha un evidente miglioramento della precisione della classificazione;
la percentuale d'errore resta però elevata. Nonostante l'elevata probabilità d'errore il sistema
di eye tracking con l'utilizzo di questa tecnica ha prestazioni sufficienti.
Questo comportamento è dovuto al fatto che l'errore globale non è distribuito uniforme-
mente su tutte le zone in cui è suddiviso lo schermo; esso è concentrato quasi totalmente su
una o due fra le M )N zone.
Le zone la cui classificazione è soggetta ad elevato tasso di errore sono difficilmente rico-
noscibili, ma la determinazione delle altre zone presenta buoni risultati.
I test svolti hanno rilevato che la diversa distribuzione del tasso di errore è dovuta alla pre-
senza di un numero non omogeneo di forme relative ad ogni zona.
Per migliorare l'accuratezza della classificazione è possibile utilizzare i risultati sul tasso
di errore per bilanciare il modello, così facendo si arriva ad un tasso d'errore che va dal
12% al 21%.
Nonostante le correzioni che si possono apportare la probabilità di errore mantiene una di-
stribuzione non uniforme.
Dall'analisi dei risultati delle sperimentazioni svolte è emerso che le zone più soggette a er-
rore sono l'area inferiore destra dello schermo per i modelli costruiti sulla forma dell'occhio
sinistro e l'area inferiore sinistra per i modelli costruiti sulla forma dell'occhio destro.
Da i risultati sopra riportati si rileva che questa tecnica produce risultati accettabili, consi-
derando una suddivisione dello schermo in una griglia 2)3 , purchè le applicazioni sia-
no in grado di recuperare gli errori e funzionare senza il riconoscimento di una zona.
4.4.4 Classificatore senza addestramento
Un classificatore per funzionare necessita di riconoscere la relazione tra dati di ingresso e
uscite desiderati per far questo è necessaria solitamente una fase di addestramento per
istruire il sistema.
Per poter evitare la fase di addestramento il classificatore deve poter conoscere la relazione
tra ingresso e uscita in un altro modo.
L'algoritmo sviluppato opera nel seguente modo:
Χ durante la costruzione del modello per ogni immagine appartenente al training
73
CAPITOLO 4 Analisi di fattibilità
set si stabilisce la zona dello schermo osservata.
Χ Durante il processo di eye tracking il classificatore utilizza un buffer FIFO di di-
mensione F per memorizzare l'indicazione della zona osservata stabilita tramite
le informazioni contenute all'interno del modello.
Χ Dopo le prime F immagini il classificatore funziona a regime e dopo la ricezione
di ogni immagine determina la zona fissata scegliendo quella maggiormente pre-
sente all'interno del buffer.
Per correttezza nelle tabelle dalla 4.13 alla 4.18 sono stati riportati i risultati delle verifiche
svolte mantenendo gli stessi parametri di sperimentazione degli algoritmi precedenti.
Tab. 4.13: Verifica sperimentale 13
Numero forme del modello 60
Dimensioni griglia 3x4
Tasso di errore globale 65%
Tab. 4.14: Verifica sperimentale 14
Numero forme del modello 60
Dimensioni griglia 3x4
Tasso di errore globale 61%
Tab. 4.15: Verifica sperimentale 15
Numero forme del modello 60
Dimensioni griglia 3x3
Tasso di errore globale 60%
Tab. 4.16: Verifica sperimentale 16
Numero forme del modello 60
Dimensioni griglia 3x3
Tasso di errore globale 56%
Tab. 4.17: Verifica sperimentale 17
Numero forme del modello 60
Dimensioni griglia 2x3
74
CAPITOLO 4 Analisi di fattibilità
Tab. 4.17: Verifica sperimentale 17
Tasso di errore globale 55%
Tab. 4.18: Verifica sperimentale 18
Numero forme del modello 60
Dimensioni griglia 2x3
Tasso di errore globale 50%
Risulta evidente che i risultati ottenuti sono pessimi, essi rappresentano una media dei va-
lori ottenuti variando la posizione dell'utente e le condizioni di luce.
Nel corso dei test si è notato che il tasso di errore è fortemente dipendente dal posiziona-
mento dell'utente rispetto alla posizione assunta durante la costruzione del modello.
Per misurare la dipendenza del tasso di errore dalla posizione è stato sviluppato un applica-
tivo in grado di evidenziare la differenza tra la posizione dell'utente durante la costruzione
del modello e la posizione durante la sperimentazione. La differenza è calcolata attraverso
un semplice confronto di immagini. Per semplificazione si sono considerati come sposta-
menti solo le traslazioni orizzontali e verticali della testa e non eventuali rotazioni.
Nei grafici nelle figure 4.22, 4.23 e 4.24 è evidenziato l'andamento del tasso di errore in
funzione della differenza di posizione. Con la linea tratteggiata è rappresentata il valore
medio dell'errore.
0 1 2 3 4 5 6
0,00%
10,00%
20,00%
30,00%
40,00%
50,00%
60,00%
70,00%
80,00%
90,00%
Verifica 13
Verifica 14
Differenza di posizione (cm)
Ta
sso
d'e
rro
re
Figura 4.22: andamento del tasso d'errore in funzione della differenza di posizione. Griglia 3x4
75
CAPITOLO 4 Analisi di fattibilità
0 1 2 3 4 5 6
0,00%
5,00%
10,00%
15,00%
20,00%
25,00%
30,00%
35,00%
40,00%
45,00%
50,00%
55,00%
60,00%
65,00%
70,00%
75,00%
80,00%
85,00%
Verifica 15
Verifica 16
Differenza di posizione (cm)
Ta
sso
d'e
rro
re
Figura 4.23 andamento del tasso d'errore in funzione della differenza di posizione. Griglia 3x3
0 1 2 3 4 5 6
0,00%
5,00%
10,00%
15,00%
20,00%
25,00%
30,00%
35,00%
40,00%
45,00%
50,00%
55,00%
60,00%
65,00%
70,00%
75,00%
80,00%
85,00%
Verifica 18
Verifica 17
Differenza di posizione (cm)
Ta
sso
d'e
rrore
Figura 4.24 andamento del tasso d'errore in funzione della differenza di posizione. Griglia 4x4
Analogamente alle tecniche di classificazione precedenti, sono state calcolate le variazioni
dei tassi d'errore e delle tempistiche di riconoscimento in funzione del parametro F, che in
questo caso rappresenta la dimensione del buffer utilizzato per memorizzare le indicazioni
delle zone fissate. Contrariamente alla comune pratica ingegneristica non è stata effettuata
un'analisi di caso peggiore, bensì sono state considerate le condizione ottimali di funziona-
76
CAPITOLO 4 Analisi di fattibilità
mento. Questa scelta è stata effettuata perché nell'utilizzo reale del sistema di eye tracking
si cercherò sempre di lavorare con differenze di posizioni minime rispetto alla costruzione
del modello.
Nei grafici in figura 4.25, 4.26 e 4.27 è riportato l'andamento del tasso di errore in funzione
di F, considerando una differenza di posizionamento di 0,5 cm.
1 2 5 10 20
10,00%
12,50%
15,00%
17,50%
20,00%
22,50%
25,00%
27,50%
30,00%
32,50%
35,00%
37,50%
40,00%
42,50%
45,00%
47,50%
50,00%
Verifica 13
Verifica 14
F
Ta
sso
di e
rrore
Figura 4.25:andamento del tasso d'errore in funzione di F , Griglia 3x4, Differenza di posizione 0,5 cm
1 2 5 10 20
0,00%
2,50%
5,00%
7,50%
10,00%
12,50%
15,00%
17,50%
20,00%
22,50%
25,00%
27,50%
30,00%
32,50%
35,00%
37,50%
40,00%
Verifica 15
Verifica 16
F
Ta
sso
di e
rro
re
Figura 4.26:andamento del tasso d'errore in funzione di F , Griglia 3x3, Differenza di posizione 0,5 cm
77
CAPITOLO 4 Analisi di fattibilità
1 2 5 10 20
0,00%
2,50%
5,00%
7,50%
10,00%
12,50%
15,00%
17,50%
20,00%
22,50%
25,00%
27,50%
30,00%
32,50%
35,00%
37,50%
40,00%
Verifica 17
Verifica 18
F
Ta
sso d
i e
rro
re
Figura 4.27:andamento del tasso d'errore in funzione di F , Griglia 2x3, Differenza di posizione 0,5 cm
Nei grafici che riportano l'andamento del tasso di errore in funzione del parametro F, si
nota che si ha un minimo nell'intorno del valore F = 10 .
Dall'analisi sperimentale si rilevato che questa tecnica ha i seguenti pregi:
Χ basso tasso di errore se la differenza di posizionamento dell'utente è minima
Χ dopo un transitorio iniziale, si ha un tempo costante per la determinazione del
punto fissato
Χ non richiede una fase di addestramento per funzionare
Esistono però anche i seguenti svantaggi nell'utilizzo di questo algoritmo:
Χ Elevata sensibilità ai movimenti della testa: risulta difficilmente utilizzabile da
un utente normodotato che abitualmente tende a seguire il punto fissato con leg-
geri movimenti del capo.
Χ Forte dipendenza tra il modello e la griglia in cui è suddiviso lo schermo; infatti
rispetto agli algoritmi precedenti le informazioni su punti osservati e forme del
training set sono inserite al momento della costruzione del modello. Questo fatto
parta alla necessità di avere modelli specifici per utente, condizione ambiente e
per numero di zone in cui suddividere lo schermo.
78
CAPITOLO 5
Progettazione del sistema
5.1 Struttura generale del sistema
Dopo aver analizzato la possibilità d’implementazione del sistema, in questo capitolo ne
verrà descritta la progettazione e l’implementazione.
Nello stadio di analisi dei requisiti del sistema è emersa la netta distinzione tra la fase di
costruzione del modello della testa o dell’occhio e la fase di gaze-tracking; per questo mo-
tivo il sistema di gaze-tracking è stato diviso in due applicativi distinti:
∩ Un programma di Training: progettato per la costruzione di modelli dell'occhio e della
testa
∩ Un programma di Gaze tracking: utilizza i modelli creati dal programma di training per
determinare la zona dello schermo fissata.
Entrambi gli applicativi condividono un database in cui sono memorizzati i modelli co-
struiti e le informazioni necessarie al funzionamento del sistema.
79
CAPITOLO 5 Progettazione del sistema
Come è evidenziato negli schemi in figura 5.1 e in figura 5.2 i programmi hanno una strut-
tura modulare.
Vi è una struttura di controllo denominata “supervisore” che ha il compito di coordinare e
gestire lo scambio di informazioni tra le diverse componenti del sistema.
Ogni modulo può interagire solo con il supervisore e non conosce il resto del sistema.
La gestione degli utenti e la cattura delle immagini è presente sia nell’applicazione per la
costruzione del modello sia nel programma di gaze-tracking quindi è stata possibile un im-
plementazione unica di tali funzioni.
Figura 5.1: applicazione di training
Il programma di training è composto dai seguenti componenti:
• Gestione modelli: è un componente che si interfaccia con database e permette di
scegliere un modello specifico fra tutti quelli creati col programma di training.
• Gestione immagini: permette di archiviare le immagini che costituiscono il trai-
ning set.
• Cattura delle immagini: è un modulo di comunicazione con il dispositivo di cat-
tura video.
• Inserimento delle forme: permette il picchettamento delle immagini archiviate.
80
CAPITOLO 5 Progettazione del sistema
• Costruzione del modello: crea un modello in base alle forme e ai parametri im-
postati.
Figura 5.2: Applicazione di Gaze tracking
Il programma di gaze-tracking è composto dai seguenti componenti:
• Gestione utenti: permette di memorizzare le impostazione scelte da ogni utente,
permette di velocizzare l’utilizzo del sistema.
• Gestione modelli: è un componente che si interfaccia con database e permette di
scegliere un modello specifico fra tutti quelli creati col programma di training.
• Cattura delle immagini: è un modulo di comunicazione con il dispositivo di cat-
tura video.
• Ricerca della forma: è il componente che implementa l’active shape model.
• Gaze Detection: stabilisce il punto osservato.
• Gestione delle applicazioni: è il componente che si occupa della coordinazione
e del controllo della comunicazione tra sistema e applicativi che lo utilizzano.
81
CAPITOLO 5 Progettazione del sistema
Nei paragrafi seguenti verrà descritto il funzionamento di ogni modulo che compone il si-
stema, mentre i dettagli sul codice sono allegati in appendice D.
5.2 Programma di Training
Lo scopo del programma di training è la creazione , la gestione e la modifica dei modelli delle for-
me di occhio e di testa. Le fasi per la costruzione di un modello sono descritte dallo schema in fi-
gura 5.3.
Figura 5.3: schema del funzionamento del programma di training
5.2.1 Cattura di una collezione di immagini
Per costruire un modello occorre un insieme di immagini che rappresentino le diverse forme di oc-
chio e della testa durante la fissazione di diversi punti dello schermo.
E’ stata distinta una fase di cattura delle immagini dalla fase di definizione delle forme tramite pic-
chetti per evitare all’utente inutile attesi e per migliorare le tempistiche di costruzione del modello.
Come illustrato nel capitolo 4, durante la fase di analisi non è stato possibile stabilire il numero di
immagine necessarie per costruire un modello efficiente. Per questo motivo è stata lasciata la pos-
82
CAPITOLO 5 Progettazione del sistema
sibilità di decidere sia il numero di immagini da includere nel training set, sia la posizione dei pun-
ti osservati durante la cattura.
La successione dei punti da fissare durante la raccolta delle immagini del training set è denominata
PATH.
L’analisi dell’influsso della definizione di tali punti sulle prestazioni dell’algoritmo di ricerca è
trattata nel capitolo 6.
Prima di eseguire la cattura delle immagini è necessario stabilire la precisione del training set in-
dicata dal numero zone in cui sarà suddiviso lo schermo.
La raccolta delle immagini avviane tramite una procedura guidata, in cui l’utente deve fissare una
forma circolare che si muove nello schermo.
Il movimento della forma circolare è coordinato con l’acquisizione delle immagini dalla webcam
in modo tale che quando essa raggiunge le posizione definite nel PATH avviene un cambiamento
di colore e l’effettiva memorizzazione all’interno del database.
In figura 5.4 è rappresentato un esempio del posizionamento di 12 punti che costituiscono un
PATH, con una risoluzione di 6 zone.
Figura 5.4: esempio di punti che costituiscono un PATH
5.2.2 Picchettatura delle forme
Il posizionamento dei picchetti sulle immagini del training set è un procedimento fonda-
mentale per la costruzione del modello.
Le immagini catturate nella fase precedente ritraggono l’intero volto dell’utente, quindi pri-
ma di procedere alla collocazione dei picchetti si deve selezionare solo la zona dell’imma-
gine interessata dal procedimento.
Nelle figure 5.5 e 5.6 sono rappresentate come rettangoli le zone selezionate, per eseguire
83
CAPITOLO 5 Progettazione del sistema
la disposizione dei picchetti, rispettivamente nel caso dell’eye-tracking e dell’head-tracking
.
Figura 5.5: zona intorno intorno all'occhio da sele-
zionareFigura 5.6: zona della testa da selezionare
Le zone delle immagini selezionate vengono memorizzate nel database all’interno della ta-
bella ImagesTS (tab. x +) per essere utilizzate per il calcolo della matrici di colori nell’in-
torno dei picchetti.
Come spiegato nei capitoli precedenti sia per la modellazione della forma dell’occhio che
per quella della testa si è deciso di posizionare 37 picchetti.
Per rendere più agevole i posizionamento dei picchetti si è scelto di differenziare l’ordine
di inserimento dall’ordine dei punti all’interno della forma. Nelle figure 5.7 per l’occhio e
5.8 per la testa è illustrato l’ordine di inserimento dei picchetti. Come si nota da tali figure
l’ordine di inserimento è studiato in modo tale da delineare dapprima gli estremi delle for-
me e successivamente i punti di unione tra tali punti. Le differenze di colorazione dei pic-
chetti hanno lo scopo di aiutarne il posizionamento, non c’è alcuna differenza nel momento
della costruzione del modello nella trattazione dei picchetti di colore più scuro rispetto a
quelli più chiari.
Alcune implementazioni dell’active shape model presenti in letteratura diversificano la ge-
stione dei picchetti in base alla funzione che rivestono nell’applicazione.
Per dare la possibilità futura di implementare tale opzioni, all’interno del database viene
memorizzata anche l’informazione del tipo di picchetto posizionato.
84
CAPITOLO 5 Progettazione del sistema
Figura 5.7: ordine di posizionamento dei picchetti sull'occhio
Figura 5.8: ordine di posizionamento dei picchetti sulla testa
La struttura dati utilizzata per la memorizzazione di una forma è un vettore allocato dina-
micamente che contiene strutture di tipo PUNTO.
Un PUNTO è rappresentato da due numeri interi che indicano le coordinate della posizio-
ne del picchetto considerando come riferimento gli assi in figura 5.9.
Per agevolare la disposizione dei picchetti viene visualizzato all’interno della finestra di
posizionamento la descrizione della localizzazione del prossimo punto da inserire.
85
CAPITOLO 5 Progettazione del sistema
Una volta terminato il picchettamento la forma viene memorizzata nel database all’interno
della tabella ShapeTS (tab. X+4).
Figura 5.9: rappresentazione coordinate PUNTO
5.2.3 Generazione del modello e delle matrici associative
La fase successiva al posizionamento dei picchetti sulle immagini del training set è la gene-
razione del modello dell’occhio o della testa.
Il modello è costruito applicando l’algoritmo esposto nel capitolo 3.? . Maggiori dettagli
sul codice dell’implementazione sono rimandati all’appendice D?.
La struttura dati,denominata MATRIX_MODEL, per la memorizzazione del modello con-
tiene le seguenti informazioni:
• Numero di forme del modello.
• Forma media dell’oggetto modellato.
• Una matrice contenente gli autovettori del modello.
• Un vettore contenente il valore del peso per ogni picchetto.
• Un vettore contenente la massima variazione possibile di ogni autovalore in modo
tale da rispettare i vincoli del modello.
Questa struttura viene memorizzata all’interno del database nel campo “statistics” della ta-
bella TrainingSet (tab.x+).
Il programma di training permette di visualizzare il modello ottenuto e di verificare la ri-
sposta del modello alla variazione del valore dei pesi applicati.
Questa possibilità è utile per appurare che la fase di posizionamento dei picchetti sia avve-
nuta correttamente.
Nelle figure 5.10 e 5.11 sono rappresentate le deformazioni al modello provocate dalla
modifica dei pesi.
86
CAPITOLO 5 Progettazione del sistema
Figura 5.10 : esempio di variazione delle forme del modello della testa
Figura 5.11 : esempio di variazione delle forme del modello dell'occhio
87
CAPITOLO 5 Progettazione del sistema
Dopo la costruzione del modello vengono elaborate anche delle matrici associative che
hanno la funzione di memorizzare la derivata della matrice di colore nell’intorno dei pic-
chetti e di porla in relazione con i valori dei pesi del modello.
Per ogni immagine presente nel training set si genera una struttura denominata MAT_ASSO-
CIATIVA_GREYLEVEL_2D.
La matrice associativa è un vettore che contiene tutte queste strutture calcolate all’interno
di un training set.
MAT_ASSOCIATIVA_GREYLEVEL_2D è costituita da un vettore con i pesi della forma pic-
chettata sull’immagine a cui si riferisce e un vettore che contiene una struttura di tipo CEL-
LA_GREYLEVEL_2D per ogni picchetto.
La struttura CELLA_GREYLEVEL_2D contiene le seguente informazioni:
• Indice del picchetto
• Coordinate del punto in cui è posizionato il picchetto
• Una matrice con le coordinate dei punti considerati nell’intorno del picchetto.
• Una matrice in cui sono memorizzati i colori nell’intorno del picchetto
• Una matrice contenente la derivata della matrice descritta sopra.
• La pendenza della retta passante per il picchetto e normale al contorno della forma.
Per ogni modello si è deciso di elaborare tre matrici associative con differente dimensione
delle zone utilizzate nell’intorno dei picchetti. Si è deciso di elaborare più matrici per non
determinare a priori la precisione e la complessità della ricerca della forma, e per dare al-
l’utente la possibilità di scegliere il miglior compromesso tra velocità e accuratezza del si-
stema.
In figura 5.12 sono rappresentate in scala le differenti zone considerate nell’intorno del pic-
chetto. Per semplicità chiameremo le differenti aree nell’intorno dei picchetti con le lettere
indicate nella figura.
88
CAPITOLO 5 Progettazione del sistema
Figura 5.12: intorno dei picchetti nelle differenti matrici associative
In tabella 5.1 sono riportate le dimensioni delle differenti zone .
Tab. 5.1: Caratteristiche nell'intorno dei picchetti nelle differenti matrici associative
Zona Larghezza(W) Altezza (H)
A 5 pixel 30 pixel
B 3 pixel 20 pixel
C 1 pixel 10 pixel
5.2.4 Funzionalità aggiuntive
Il programma di training oltre alla costruzione dei modelli deve provvedere alla loro gestio-
ne e memorizzazione. Sono state implementate diverse funzioni che permettono di svol-
gere questi compiti:
• Cattura di immagini personalizzabile: è possibile definire PATH di cattura diffe-
renti da quelli standard e specifici per l’applicazione che utilizzerà il modello.
• Visualizzazione dei modelli: permette di verificare la corretta picchettatura delle
forme e fornisce indicazioni sulla variabilità di posizione di ogni picchetto all’inter-
no del training set.
•Modifica del training set: è possibili aggiungere o rimuovere forme per riscontrare
i cambiamenti apportati al modello.
•Esportazione e Importazione dei modelli: questa funzione dà la possibilità di tra-
sportare training set tra sistemi differenti. Il processo d’esportazione genera un file
compresso contenente tutte le informazioni necessarie a ricostruire il modello.
89
CAPITOLO 5 Progettazione del sistema
5.3 Programma di gaze tracking
Il programma di gaze tracking utilizza i modelli prodotti dall'applicativo di training per ef-
fettuare una ricerca in tempo reale delle forme della testa o dell'occhio e determinare la
zona dello schermo fissata. Nello schema in figura 5.13 è rappresentato l'insieme delle
funzionalità che caratterizzano l'applicativo.
Figura 5.13: funzionalità applicativo di gaze tracking
5.3.1 Scelta dell'utente
Per evitare la ripetuta scelta del modello , delle matrici associative e delle impostazioni al-
l'utente abituale si è scelto di memorizzare tali informazioni all'interno del database.
Il programma è di tipo multiutente: si avvia caricando il profilo relativo all'ultimo utente
che l'ha utilizzato. C'è la possibilità di caricare le informazioni relative ai profili esistenti o
di crearne di nuovi.
Per ogni utente vengono memorizzate le seguenti informazioni:
Χ nome identificativo.
Χ Ultimo modello utilizzato.
Χ Ultima matrice associativa utilizzata.
Χ Tipo di utilizzo: eye tracking o head tracking.
90
CAPITOLO 5 Progettazione del sistema
Χ Impostazioni di funzionamento: verranno descritte in seguito.
5.3.2 Scelta del modello e della matrice associativa
La scelta del modello e della relativa matrice associativa è molto importante in quanto in-
fluisce notevolmente sull'accuratezza e selle prestazioni del sistema di gaze tracking.
Un utente può utilizzare l'applicazione anche senza la costruzione di un modello personale,
ma può scegliere all'interno del database il modello della forma dell'occhio (o della testa)
che più si avvicina alla sua.
Un utente su cui sono stati costruiti dei modelli personali, invece , può scegliere quello che
più si adatta alle condizioni di luce e di posizionamento al momento dell'utilizzo.
La scelta del modello e delle matrici associative è effettuata tramite la finestra in figura
5.14. Nella parte destra della finestra è rappresenta un'immagine identificativa del training
set e un'elaborazione grafica della forma risultante dalla costruzione del modello. Da que-
sta finestra è possibile visionare, selezionare e provare tutti i modelli costruiti in preceden-
za con il programma di training.
Oltre alla scelta del modello è stata concessa la possibilità di decidere il tipo di matrice as-
sociativa da utilizzare per permettere di determinare il compromesso tra accuratezza e velo-
cità di riconoscimento voluto.
Figura 5.14 : finestra di Scelta del modello
91
CAPITOLO 5 Progettazione del sistema
Le caratteristiche delle diverse matrici associative sono riportate in tabella 5.1, di seguito
sono descritti i tipici ambiti di utilizzo.
Χ Matrici di tipo A: l’utilizzo di questo tipo di matrici è opportuno quando le condizioni
ambientali del sistema sono molto differenti dalla condizioni in cui si è generato il mo-
dello; sono impiegate tipicamente per l'eye tracking data l'elevata sensibilità ai movi-
menti e alla posizione della testa di tale algoritmo.
Χ Matrici di tipo B: l’utilizzo di questo tipo di matrici permette un buon compromesso tra
accuratezza e velocità di riconoscimento delle forme. Solitamente sono impiegate nel-
l'ambito dell'head tracking quando si utilizza un modello non specifico per l'utente.
Χ Matrici di tipo C: questa tipologia di matrici permette la migliore velocità di funziona-
mento del sistema a scapito dell'accuratezza. Esse sono utilizzate nell'ambito dell'head
tracking quando si utilizza un modello specifico per l'utente.
Maggiori dettagli sulla relazione tra matrici associative e velocità e accuratezza del sistema
sono riportate nel capitolo successivo.
5.3.3 Gaze tracking
Nel secondo capitolo si sono descritti generici sistemi di gaze tracking, elencando per ogni
componente del sistema le implementazioni possibili presenti in letteratura.
Nel quarto capitolo, invece, sono stati riportati i risultati delle verifiche sperimentali effet-
tuate per determinare la possibilità d'implementazione del sistema.
In questo paragrafo sono illustrate le scelte progettuali adottate ,in base alle sperimentazio-
ni svolte, tra quelle descritte in precedenza.
In figura 5.15 è rappresentato lo schema di funzionamento dei componenti in condivisi dal-
l'eye tracking e dall'head tracking.
92
CAPITOLO 5 Progettazione del sistema
Figura 5.15 : schema componenti comuni tra head tracking e eya tracking
5.3.3.AGestione dispositivo di input
Per la gestione del dispositivo di acquisizione video sono state utilizzate le librerie micro-
soft video for windows (VFW). Per consentire un livello di astrazione maggiore di quello
concesso da VFW è stata implementa una classe per la gestione delle comunicazioni con
la webcam denominata MYCAVICAP.
L'implementazione della classe sopraccitata si è resa necessaria per una notevole lacuna
delle VFW: non è possibile copiare l'immagine catturata in una zona di memoria senza
passare prima da un file su disco.
La libreria MYCAVICAP consente, invece ,di scegliere di copiare le immagini catturate in
una zona di memoria indicata, oppure su un file su disco.
I vantaggi dati dalla possibilità di copiare i dati direttamente in memoria senza passare dal
disco fisso sono :
Χ maggiore velocità di cattura
93
CAPITOLO 5 Progettazione del sistema
Χ maggiore velocità di accesso all'immagine
Χ minore utilizzo del processore
La maggiore velocità di cattura e di accesso all'immagine non costituiscono nella realtà un
fattore critico di scelta poiché in ogni caso il processo di acquisizione delle immagini è più
veloce del processo di ricnoscimento forme e si ritrova quidi, ad attendere che quest'ultimo
finisca l'elaborazione.
La possibilità della cattura delle immagini su disco è stata implementa in MYCAVICAP per
motivi di compatibilità con webcam vecchie che non supportano la cattura direttamente in
memoria.
Tra le tecniche di cattura delle immagini trattate nel capitolo 4 si è scelto di utilizzare la
cattura a richiesta come si può notare dallo schema in figura X.
All'avvio dell'applicazione il SUPERVISORE richiede l'attivazione delle webcam al modulo
di “Gestione del dispositivo”. Se non la webcam non è presente o è occupata da un'altra
applicazione, dopo un messaggio di errore, si avvia una versione limitata del programma
che permette solo la gestione degli utenti e la visione dei modelli presenti nel database.
Dopo che l'utente avvia la ricerca della forma il SUPERVISORE inoltra le richieste prove-
nienti dal modulo “Ricerca Forme” e il modulo di “Gestione del dispositivo” esegue la cat-
tura. Alla chiusura del programma il modulo “Gestione dispositivo” invia il segnale di di-
sconnessione alla webcam.
5.3.3.BRicerca della forma
La ricerca della forma all'interno delle immagini è effettuata tramite l'implementazione del-
l'algoritmo descritto nel capitolo 3.
All'avvio dell'applicazione di gaze tracking il SUPERVISORE si occupa di inviare al modulo
di “Ricerca della forma” il modello e la matrice associativa selezionata dall'utente corrente.
Il processo di ricerca delle forma una volta avviato tramite un segnale del SUPERVISORE
esegue ciclicamente i seguenti passaggi:
Χ Richiesta nuova immagine
Χ Riceve nuova immagine
Χ ricerca della forma all'interno dell'immagine
Χ invia parametri della forma trovata al SUPERVISORE
Χ attende un tempo wt
94
CAPITOLO 5 Progettazione del sistema
Tramite il parametro wt il SUPERVISORE può controllare la velocità di ricerca delle forme.
Un indicazione importante per il modulo di ricerca forme è il posizionamento iniziale del
modello. Questo parametro viene acquisito dal SUPERVISORE, tramite l'indicazione da parte
dell'utente (o chi per esso) della posizione sull'immagine, e successivamente viene inviato
al modulo di ricerca delle forme. In figura 5.16 e 5.17 è rappresentata la finestra utilizzata
dal SUPERVISORE per raccogliere l'indicazione rispettivamente per l'eye tracking e head
tracking .
Figura 5.16: indicazione posizione occhio
Figura 5.17 indicazione posizione modello della te-
sta
5.3.4 Determinazione del punto fissato
Il supervisore posiziona inizialmente i modelli in zone predeterminate:
Χ il centro del modello dell'occhio è posizonato nella zona centrale destra dell'im-
magine.
Χ Il centro del modello della testa è posizionato al centro dell'immagine.
Per la maggior parte dei casi tali disposizione consento un corretto avvio dell'algoritmo di
riconoscimento forme. La possibilità di indicare la posizione iniziale ha la funzione di con-
trollo della correttezza della collocazione predefinita.
5.3.4.ADeterminazione del punto fissato (eye tracking)
La tecnica utilizzata dall'eye tracker per la determinazione del punto fissato è stata presen-
tata nel capitolo 4 col nome di classificazione senza addestramento.
95
CAPITOLO 5 Progettazione del sistema
In figura 5.18 è riportato lo schema dei messaggi scambiati tra classificatore e sistema.
Figura 5.18: scambio messaggi eye tracking
Dalle analisi condotte, i cui risultati sono stati riportati precedentemente, è emerso che la
tecnica utilizzata per determinare la zona dello schermo fissata è fortemente influenzata
dalla differenza tra la posizione assunta dall'utente durante la costruzione del modello e la
posizione durante l'utilizzo del sistema. Per cercare di minimizzare tale differenza il SU-
PERVISORE mostra una finestra (figura 5.19) in cui è possibile confrontare la posizione
corrente con quella tenuta durante la costruzione del modello.
Figura 5.19: finestra di confronto immagine (eye tracking)
Le impostazioni che il supervisore comunica al classificatore sono le seguenti:
96
CAPITOLO 5 Progettazione del sistema
Χ dimensione griglia in cui è diviso lo schermo
Χ grandezza del buffer F
Χ numero di riconoscimenti necessari per effettuare una selezione di una zona.
Il classificatore dopo un transitorio iniziale per ogni forma che riceve determina una zona
fissata indicata dal numero di riga e di colonna della griglia in cui è suddiviso lo schermo.
Il classificatore comunica al supervisore anche il valore della percentuale di selezione, cal-
colato come il numero di riconoscimenti consecutivi della stessa zona in rapporto al nume-
ro di riconoscimento necessari indicato nelle impostazioni.
Il valore della percentuale di selezione e la posizione fissata sono inviate dal supervisore al
modulo di gestione delle applicazioni che a sua volte li inoltra alle applicazioni in esecu-
zione.
5.3.4.BDeterminazione del punto fissato (head tracking)
La tecnica di head tracking implementata ha due modalità di funzionamento:
Χ Determinazione del punto fissato: dalla posizione della testa viene rilevata la
zona dello schermo osservata.
Χ Controllo del mouse: lo spostamento della testa permette di muovere il cursore
del mouse.
In figura 5.20 è riportato lo schema delle modalità di funzionamento dell'head tracker.
Figura 5.20: funzionamento head tracking
L'algoritmo di head tracking opera nel seguente modo:
97
CAPITOLO 5 Progettazione del sistema
Χ viene considerato , per ogni forma trovata, il punto risultante della media delle
posizioni dei picchetti numero 29,33,35,36 come mostrato in figura 5.21.
Χ Si effettua una fase di calibrazione, in cui viene chiesto all'utente di ruotare la te-
sta nelle quattro direzione in modo da fissare i margini destro, sinistro,superiore
e inferiore.
Χ Durante la fase di calibrazione si utilizzano le informazioni ricavate dalla posi-
zione del punto medio per determinare il dominio di variabilità della posizione
(figura 5.22).
Dopo la calibrazione è possibile selezionare la modalità di funzionamento dell'head trac-
ker.
Figura 5.21: picchetti utilizzati per il calcolo del
punto medio
Figura 5.22: dominio di variabilità della posizione
del punto medio
Il dominio di variabilità viene utilizzato per stabilire una relazione tra posizione del punto
medio e punto dello schermo fissato, come illustrato in figura 5.23.
Il classificatore, come nel caso dell'eye tracking, utilizza un buffer di dimensione F per la
memorizzazione delle indicazioni delle zone fissate. Ogni F forme riconosciute viene in-
viato al SUPERVISORE la segnalazione della zona maggiormente indicata all'interno del buf-
fer.
98
CAPITOLO 5 Progettazione del sistema
Figura 5.23: relazione tra posizione punto medio e zona osservata
Per controllare il movimento del mouse il dominio di variabilità viene diviso in zone ret-
tangolari concentriche. La direzione dello spostamento è determinata dalla posizione del
punto medio corrente rispetto al centro del dominio. La velocità di spostamento è determi-
nata dalla zona in cui si trova il punto medio: più la zona è distante dal centro del dominio
maggiore è la velocità. In figura 5.24 è rappresenta la divisione del dominio per il controllo
della velocità e della direzioni di spostamento del cursore del mouse. Se il punto medio
della forma trovata si trova all'interno della zona indicata con lo 0 il puntatore del mouse
rimane fermo.
Se il mouse non viene mosso per un determinato periodo si esegue un click.
Il messaggio di click viene inviato direttamente al sistema operativo senza prima essere
processato dal supervisore, questo permette di utilizzare le comuni applicazioni già presen-
ti sul sistema.
Figura 5.24: controllo movimento del mouse
99
CAPITOLO 5 Progettazione del sistema
Quando l'utente mantiene la testa ferma, affianco al cursore del mouse viene visualizzata
una barra di progresso per permettere di osservare il periodo mancante per effettuare un
click.
Posizionando il cursore sul margine sinistro dello schermo si apre una finestra che permette
all'utente di modificare le impostazioni del controllo del mouse, come la tipologia di click
(singolo, doppio, tasto destro) e l'attesa necessaria per effettuare un click.
5.3.5 Applicazioni
All'interno del sistema di gaze tracking è stato inserito un modulo per la gestione delle
applicazioni esterne che lo utilizzano. Il “gestore delle applicazione” funziona da interme-
diario per lo scambio di messaggi tra il supervisore e le applicazioni.
L'interfaccia di comunicazione tra applicazioni e sistema è costituita dallo scambio di 4
messaggi (figura 5.25):
Χ Messaggio di Registrazione: un'applicazione per poter servirsi del sistema di
eye tracking deve inviare una richiesta richiesta di registrazione al modulo di ge-
stione .
Χ Messaggio di Impostazione: questo messaggio viene inviato alle applicazioni
quando effettuano la registrazione o quando c'è una modifica dei parametri di
funzionamento da parte dell'utente. Nel messaggio di impostazione sono conte-
nute le informazioni relative alle dimensioni della griglia in cui è suddiviso lo
schermo.
Χ Messaggio di Posizione: viene indicata all'applicazione la zona dello schermo
fissata e la sua percentuale di fissazione. Tale percentuale indica il periodo di
tempo mancante per effettuare la selezione della zona fissata. E' compito dell'ap-
plicazione visualizzare tale informazione tramite una barra di progresso o altri
espedienti grafici.
Quando il valore della percentuale di fissazione è uguale al 100 %, l'applicazione
deve gestire la selezione della zona fissata.
Χ Messaggio di Terminazione: è un messaggio di tipo bidirezionale, mandato dal-
l'applicazione al sistema quando è terminata oppure dal sistema all'applicazione
quando si è verificate una condizione di errore irrecuperabile.
100
CAPITOLO 5 Progettazione del sistema
Figura 5.25 scambio di messaggi tra sistema e applicazioni
Sono state sviluppate tre applicazioni che utilizzano il sistema di gaze tracking, due di esse
utilizzano l'eye tracking, mentre la rimanente utilizza l'head tracking.
5.3.5.AApplicazione - Impostazione
E' stata sviluppata all'interno del sistema un'applicazione per il controllo dei parametri di
funzionamento attraverso l'utilizzo dell'eye tracking.
Questa applicazione non rispetta pienamente il protocollo di scambio messaggi illustrato
precedentemente, poiché è necessario per l'applicazione comunicare al sistema le imposta-
zioni selezionate dall'utente.
Il programma è studiato in modo da adattarsi a dimensioni variabili della griglia in cui sono
distinte le zone dello schermo. Il layout è stato ottimizzato per l'utilizzo di una griglia 2x3.
La finestra dell'applicazione risulta divisa in zone rettangolari, contraddistinte da una linea
di testo che descrive l'azione che si effettuerà selezionando quella determinata zona.
Quando un utente fissa una zona in cui è divisa l'applicazione, una barra di progresso indi-
ca l'avanzamento della selezione; quando raggiunge il 100% la zona assume una colorazio-
ne diversa. Per confermare o annullare la scelta l'utente deve fissare rispettivamente le zone
caratterizzate dal comando OK o CANCEL.
In figura 5.26 è presentato il layout dell'applicazione.
101
CAPITOLO 5 Progettazione del sistema
Figura 5.26: layout applicazione - impostazione
L'applicazione permette di impostare la dimensione del buffer F del classificatore e il nu-
mero di immagini necessarie per effettuare la selezione.
5.3.5.BApplicazione – Rettangoli
E' una semplice applicazione di test, per verificare il funzionamento del sistema di eye trac-
king. Il programma evidenzia la zona fissata con un rettangolo che aumenta di dimensioni
in proporzione alla durata dell'osservazione. Una versione più evoluta di questa applicazio-
ne è stata utilizzata per effettuare i test sul tasso di errore riportati nel capitolo 4.
5.3.5.CApplicazione – Editor di testi
Questa applicazione integrata nel sistema è un semplice esempio di tastiera virtuale su
schermo. Essa è utilizzabile tramite head tracking ed ha la particolarità di avere un layout
riconfigurabile in relazione alla precisione del sistema. In figura 5.27 è rappresentato l'edi-
tor con 24 tasti su schermo.
102
CAPITOLO 5 Progettazione del sistema
Figura 5.27: Applicazione Editor di testo
5.4 Database
5.4.1 Scelta del Database
Costruire un modello efficace per diversi individui porterebbe ad una complessità di ricerca
della forma troppo elevata, per cui si è deciso di costruire modelli specifici per ogni utente.
L’elevata quantità di dati da memorizzare per la costruzione di diversi modelli ha portato
alla decisione di utilizzare un database relazionale per la loro gestione e archiviazione.
Per effettuare una scelta sono stati esaminati alcuni Database Management System
(DBMS) non commerciali.
• PostgreSQL: è un DBMS open source sviluppato dal dipartimento di informatica
di Berkeley dell’università della California. Ha un’architettura client server e sup-
porta gli standard SQL92 e SQL99.
Comprende diverse caratteristiche tipiche dei più blasonati programmi commercia-
li:
Χ Query annidate
Χ Chiavi esterne
Χ Trigger
Χ Integrità della transazione
Χ Controllo dell’accesso concorrente
Χ Presenta interfacce native per ODBC, JDBC, C, C++, PHP, Perl, TCL,
103
CAPITOLO 5 Progettazione del sistema
ECPG, Python, e Ruby.
• MySQL : è il DMBS open source più diffuso al mondo. Ha anch’esso un’architettu-
ra client server. Presenta interfacce per Java, ODBC e .NET.
Ha come punto di forza l’affidabilità e le elevate prestazioni.
• SQLite : è una piccola libreria scritta in C che implementa un DBMS con le se-
guenti caratteristiche:
Χ Implementa in gran parte lo standard SQL92
Χ Non ha bisogno di alcuna configurazione del sistema per essere utilizzato.
Χ Un database è completamente memorizzato in un unico file su disco.
Χ Supporta database di dimensioni fino a 2 terabyte (241 byte).
Χ E’ mediamente più veloce dei sopraccitati DBMS per le operazioni più comuni.
Χ E’ completamente open source e libero da royalties.
Si è scelto di utilizzare SQLite per la facilità di configurazione e per le modeste dimensioni
delle librerie da integrare nel progetto.
Sebbene MySQL e PostgreSQL abbiano un’affidabilità e robustezza maggiore richiedono
una complessa configurazione e sono di maggiori dimensioni.
L’architettura client server, inoltre non è necessaria al nostro sistema per risulterebbe inuti-
le utilizzare i DMBS che la implementano.
In appendice D? è riportata la descrizione delle tecniche di integrazione delle librerie SQ-
Lite all’interno del codice del sistema.
5.4.2 Struttura del database
Per descrivere la struttura di un database relazionare è necessario illustrare nel dettaglio le
tabelle che lo compongono e le relazioni che intercorrono tra esse.
In figura 5.28 è riportato lo schema delle relazioni tra le tabelle del database utilizzato.
Nelle tabelle dalla n alla k sono illustrati tutti gli attributi delle tabelle del database.
104
CAPITOLO 5 Progettazione del sistema
Figura 5.28: schema delle relazioni tra le tabelle del database
Tab. 5.2 : Tabella Archive
Questa tabella è utilizzata per memorizzare informazioni utili all’avvio del sistema
Campi Descrizioni
LASTUSER
Indica l’ID2 dell’ultimo utente che ha utilizzato il sistema.
VERSION
E’ il numero di versione del database, è utilizzato dall’applicazione di
training per controllare che non vi siano inconsistenze tra la versione
implementata e la struttura del database. In caso di diversità tra le ver-
sioni la struttura del database può essere aggiornata.
2 Abbreviazione di “identifier”. Indica un valore univoco che identifica la tupla all’interno della tabella.
105
CAPITOLO 5 Progettazione del sistema
Tab. 5.3 : Tabella TrainingSet
E’ la tabella principale del database, in essa sono contenute tutte le informazioni relative
ai singoli Training Set.
Campi Descrizioni
IDTSE’ l’identificatore unico di ogni training set. E’ referenziato come
chiave esterna da diverse tabelle.
NAME Indica il nome del Training Set
DESCRIPTION
E’ una breve descrizione del training set: permette di annotare il luogo
in cui è stato realizzato, particolari condizione di luce o posizione e
ulteriori note.
COMPLETE
E’ un valore booleano che indica se è già stato creato un modello per
il training set. Nel programma di gaze-tracking, sarà possibile la scel-
ta solo dei training che hanno questo valore posto a TRUE.
NSHAPE E’ il numero di forme che compongono il training set.
IDSPOTSINFOE’ un riferimento alla tabella SPOTSINFO che indica la tipologia di
modello che si sta costruendo (eye o head).
dataCreation E’ la data di creazione del training set
dataModified E’ la data dell’ultima modifica al training set
rowGrid , col-
Grid
Indicano il numero di righe e di colonne in cui viene suddiviso lo
schermo per creare un modello di occhio. (Questa informazione non è
rilevante per il modello della testa)
NCollection
Indica il numero di collezioni di immagini associate al training set,E’
un’informazione ridondante in quanto si potrebbe ricavare con una
query apposita, è qui riportata per ottimizzare le prestazioni.
106
CAPITOLO 5 Progettazione del sistema
Tab. 5.3 : Tabella TrainingSet
STATISTIC,
dimstatistic
E’ un campo di tipo BLOB3 in cui è memorizzato il modello della for-
ma creato. Contiene un valore nullo se il modello non è ancora stato
prodotto. Per poter accedere alle informazioni contenute in questo
campo è necessario conoscerne la dimensione (dimstatistic)
binWHERE
Se è presenta un modello di occhio, questo campo contiene una strut-
tura WHERE_EYE, descritta nei paragrafi successivi, che relaziona le
singole immagini del training set con i punti fissati dello schermo.
binIma,dimIma
E’ un campo di tipo BLOB contenente un’immagine rappresentativa
del modello. Questa immagine è utilizzata dal programma di gaze-
tracking per selezionare i diversi modelli.
Tab. 5.4 : Tabella SpotsInfo
In questa tabella sono memorizzati le tipologie di modelli possibili. Attualmente sono
inseriti solo la forma della testa e dell’occhio, ma è aperta la possibilità all’inserimento
di ulteriori forme.
Campi Descrizioni
IDSPOTSINFO
Indica l’ID del tipo di modello.
Description Descrizione del tipo di modello.
Image, binImaE’ l’immagine utilizzata per rappresentare il modello all’interno dei
menù dell’applicazione
NumerSpots Indica il numero di punti che costituiscono la forma
Tab. 5.5 : Tabella Spots
3 Acronimo di Binary Large Object, indica un campo all’interno di un database in cui è possibile memoriz-
zare dei dati di tipo binario come immagini , strutture o classi serializzate.
107
CAPITOLO 5 Progettazione del sistema
In questa tabella sono memorizzati informazioni relative ai picchetti che costituiscono
una forma.
Campi Descrizioni
IDSPOTS
Indica l’ID del picchetto
IDSPOTSINFO E’ il riferimento all’identificatore della forma a cui appartiene
IndexOrder Indica la posizione del picchetto nell’ordine di inserimento
IndexShapeRappresenta l’indice con cui viene memorizzato all’interno della for-
ma. Maggiori dettagli saranno illustrati nei paragrafi seguenti
Text E’ la descrizione della posizione del picchetto.
Tab. 5.6 : Shapets
In questa tabella sono le diverse forme che appartengono ai training set.
Campi Descrizioni
IDSHAPE Indica l’ID della forma
IDTSE’ il riferimento all’identificatore del training set a cui appartiene la
forma
binShape, sizeE’ un campo BLOB che contiene in formato binario la disposizione
dei picchetti
IDIMATS
E’ il riferimento all’identificatore dell’immagine su cui è stata pic-
chettata la forma. Questo indice viene utilizzato in fase di costruzione
del modello per risalire alle matrici di colori nell’intorno dei picchetti.
108
CAPITOLO 5 Progettazione del sistema
Tab. 5.7 : Tabella Matrix
In questa tabella sono memorizzate le matrici associative relative ai training set.
Campi Descrizioni
IDMATRIX
Indica l’ID della matrice.
IDTSE’ il riferimento all’identificatore del training set a cui appartiene la
forma
GrayLIndica la larghezza della zona rettangolare nell’intorno di ogni pic-
chetto da cui sono memorizzate le matrici di colori.
GreyE,GreyI
Indicano la lunghezza della zona rettangolare nell’intorno di ogni pic-
chetto da cui sono memorizzate le matrici di colori. GrayE indica la
lunghezza in pixel della zona inferiore del picchetto mentre GrayI del-
la zona superiore. Questa distinzione dà la possibilità di considerare
un intorno asimmetrico del picchetto.
BinMatrix E’ memorizzata in formato binario la matrice associativa.
TSsize
Indica il numero di immagini che costituiscono il trainin gset. Questa
informazione è ridondante, è mantenuta in questa tabella per motivi di
efficienza.
Tab. 5.8: Tabella ImagesTs
In questa tabella sono memorizzati le immagini contenute nei training set.
Campi Descrizioni
IDIMATS Indica l’ID dell’immagine
109
CAPITOLO 5 Progettazione del sistema
IDTSE’ il riferimento all’identificatore del training set a cui appartiene
l’immagine.
binIMA, size Contiene l’immagine in formato binario.
binWHERE_EYE Campo che contiene una struttura WHERE_EYE.
Tab. 5.9: Tabella Collection
In questa tabella sono memorizzate delle liste di immagini catturate da webcam ancora
da picchettare.
Campi Descrizioni
IDCOLL
Indica l’ID della collezione di immagini
IDTSE’ il riferimento all’identificatore del training set a cui appartiene la
collezione.
Name Rappresenta il nome o la descrizione della collezione di immagini.
NumImaTot Indica il numero totale di immagini della collezione.
NumImaDo E’ l’indice della prima immagine non picchettata.
Tab. 5.10: Tabella ImaColl
In questa tabella sono memorizzati le immagini appartenenti alle collezioni presenti in
tabella X+7
Campi Descrizioni
ID_IMACOL
Indica l’ID dell’immagine
110
CAPITOLO 5 Progettazione del sistema
IDCOLLE’ il riferimento all’identificatore della collezione di immagini a cui
appartiene.
binIMA, size Contiene l’immagine in formato binario.
spotted E’ un valore booleano che indica se l’immagine è già stata picchettata.
binWHERE_EY
ECampo che contiene una struttura WHERE_EYE.
Tab. 5.11: Tabella PathList
In questa tabella sono memorizzate strutture particolari denominati PATH.
I PATH contengono la descrizione della disposizione dei punti da osservare sullo scher-
mo, durante la fase di cattura delle immagini che costituiranno il training set.
Campi Descrizioni
IDPATH
Indica l’ID del PATH.
numRow Indica il numero di righe in cui è suddiviso lo schermo.
numCol Indica il numero di colonne in cui è suddiviso lo schermo.
subMatIndica che precisione adottare per identificare un punto all’interno di
una zona dello schermo.
pointlistE’ la presentazione in formato binario dell’elenco di punto che costi-
tuiscono il PATH
111
CAPITOLO 6
Verifiche sperimentali
6.1 Introduzione
Al termine dell'implementazione del sistema di gaze tracking sono state condotte delle ve-
rifiche sperimentali con un duplice finalità:
Χ Stabilire i parametri ottimali di funzionamento.
Χ Misurare le prestazioni e l'accuratezza del sistema.
Per effettuare tali verifiche si sono appositamente sviluppate delle applicazioni come per i
test descritti nel capitolo 4.
I risultati dei test sono fortemente dipendenti dalla macchina su cui sono eseguiti, per cui è
opportuno descrivere le caratteristiche tecniche dell'hardware utilizzato.
In tabella 6.1 sono riportate le specifiche del computer utilizzato e tabella 6.2 le specifiche
delle webcam testate.
112
CAPITOLO 6 Verifiche sperimentali
Tab. 6.1: Specifiche computer
CPU AMD Athlon XP 2600+ (2000 Mhz)
RAM 512 MB
S.O. Windows XP Home
Tab. 6.2: Specifiche webcam
Modello Creative Webcam Live! Creative Webcam Live! Pro
Risoluzione massima 640x480 (interpolata)320x240 (reale)
640x480 (reale)
Frame Rate 20 frame/s 25 frame/s
Costo Circa 30… Circa 70 …
6.2 Parametri ottimali di funzionamento
I parametri del sistema di gaze tracking che possono essere modificati sono:
9 numero immagini del training set
9 posizione dei punti osservati durante la cattura
9 scelta del modello
9 scelta della matrice associativa
Le scelte del modello e della matrice associativa sono modificabili dall'utente durante il
funzionamento del sistema. E ' difficile condurre test sulla relazione tra scelta del modello
e prestazioni del sistema, in linea di massima valgono le considerazioni esposte nel capito-
lo 5.
Risulta interessante, invece, capire l'influsso sulle prestazioni e sull'accuratezza del sistema
del numero di immagini del training set e della posizione dei punti osservati durante la fase
di cattura delle immagini del training set.
6.2.1 Numero immagini del training set
Una osservazione soggettiva consente di affermare che maggiore è il numero di immagini
113
CAPITOLO 6 Verifiche sperimentali
che costituiscono un training set, più dettagliato e preciso risulta il modello.
Paradossalmente l'eccessiva precisione del modello risulta essere un fattore critico per l'al-
goritmo di ricerca forma, infatti, come illustrato nel capitolo 4, essa avviene tramite un
confronto dell'immagine da analizzare con le forme memorizzate all'interno del training
set.
Nel grafico in figura 6.1 è illustrato il rapporto tra il numero di forme riconosciute e il nu-
mero di forme che compone il training set. Il test svolto è riferito al riconoscimento di 1000
forme ( 4 minuti circa di test).
Nel grafico in figura 6.2, invece, è riportato l'andamento della percentuale di riconoscimen-
to sui vari training set.
TS 1 TS 2 TS 3 TS 4 TS 5 TS 6
0
10
20
30
40
50
60
70
80
90
Forme TS
Forme Riconosciute
Num
ero
fo
rme
Figura 6.1: numero forme riconosciute su numero di forme del training set
TS 1
TS 2
TS 3
TS 4
TS 5
TS 6
0,00%
20,00%
40,00%
60,00%
80,00%
100,00%
Percentuale
Figura 6.2: percentuale forme riconosciute su forme del training set
Come si nota dai grafici sopra riportati, utilizzando un modello costruito con un training set
di 90 immagini, ben 50 immagini non vengono riconosciute.
114
CAPITOLO 6 Verifiche sperimentali
Tali immagini, però, contribuiscono comunque alla complessità della ricerca delle forme e
concorrono, inoltre, ad aumentare i tempi della costruzione del modello .
In figura 6.3 è mostrato un grafico con una stima approssimativa della relazione fra numero
di immagini del training set e tempi di costruzione del modello.
89 60 30 12 6
0
10
20
30
40
50
60
70
Tempo
Numero immagini Training Set
Te
mp
i d
i co
str
uzio
ne
mo
de
llo (
min
.)
Figura 6.3: tempi di costruzione dei modelli in funzione del numero di immagini del training set
Dai dati appena riportati è evidente che risulta inutile utilizzare modelli costruiti su training
set formati da numerose immagini.
L'algoritmo di ricerca forma produce buoni risultati anche con modelli poco accurati come
quelli costruiti su training set composti di solo 4 o 6 immagini.
6.1.2 Posizione dei punti osservati durante la cattura
Il programma di training permette di scegliere la posizione dei punti da osservare durante
la cattura delle immagini che costituiscono il training set. Risulta utile stabilire come tale
scelta possa incidere sulle prestazioni dell'algoritmo.
In figura 6.4 e figura 6.5 sono riportati due esempi di percorsi di cattura differenti.
115
CAPITOLO 6 Verifiche sperimentali
Figura 6.4: percorso di cattura A Figura 6.5: percorso di cattura B
Il percorso di cattura di tipo A ha il vantaggio di determinare un modello con forme molto
differenziate, ciò facilita il compito del classificatore, infatti i modelli costruiti da training
set con immagini catturate con tale percorso hanno tassi di errore inferiori rispetto al per-
corso di tipo B. D'altro canto, il percorso di tipo B, consente all'utente una maggiore facili-
tà di utilizzo, poiché risulta più naturale, durante l'impiego delle applicazioni, fissare i pun-
ti centrali di ogni zona rispetto ai punti estremi. In figura 6.6 è rappresentato il grafico del
confronto tra le due tipologie di cattura. In tabella 6.3 sono riportate le condizioni in cui
sono state eseguite le misurazioni.
Tab. 6.3: Caratteristiche dei TEST
TEST Numero forme TS Tipo matrice Condizioni particolari
1 12 C -
2 12 A Utente diverso da quello su cui è stato fatto il modello
3 30 A Utente diverso da quello su cui è stato fatto il modello
4 12 A -
5 6 A -
6 6 A Luce differente: modello costruito con la normale luceambientale e testato con illuminazione artificiale
7 12 A Luce differente: modello costruito con la normale luceambientale e testato con illuminazione artificiale
8 18 A -
9 24 A -
10 30 A -
116
CAPITOLO 6 Verifiche sperimentali
6.3 Prestazioni del sistema
Sono stati effettuati diversi test sperimentali per verificare l'utilizzo delle risorse del com-
puter da parte del sistema di gaze.
Si è osservato l'utilizzo delle seguenti risorse:
Χ memoria occupata sul disco fisso;
Χ utilizzo della memoria RAM;
Χ utilizzo del processore;
6.3.1 Memoria occupata sul disco fisso
Il sistema di gaze tracking utilizza, per il suo funzionamento, un database che può contene-
re un numero elevato di modelli. Si è ritenuto necessario verificare la relazione che inter-
corre tra il numero immagini del training set su cui è basato il modello e la dimensione fisi-
ca del modello stesso.
Nel grafico in figura 6.9 è rappresentata tale relazione.
6 12 20 40 60 90
0
2000
4000
6000
8000
10000
12000
14000
Dimensione (KB)
Numero forme del training set
Dim
ensio
ne (
KB
)
Figura 6.9: relazione tra dimensione occupata su disco e numero immagini del training set.
117
CAPITOLO 6 Verifiche sperimentali
6.3.2 Utilizzo della memoria RAM
I risultati proposti in questo paragrafo sono stati ottenuti dalla media di 10 misurazioni ef-
fettuate in momenti diversi.
In tabella 6.4 sono riportati i dati relativi alle misurazioni sul programmi di training, mentre
in tabella 6.5 quelli relativi al programma di gaze tracking.
Tab. 6.5: Utilizzo della Ram programma di training
Condizione Utilizzo (KB)
Avvio del programma 4300
Caricamento collezione di immagini 14500
Creazione modello e matrici associative 21200
Compattazione database4 Memoria occupata dadatabase su disco
Tab. 6.6: Utilizzo della Ram programma di training
Condizione Utilizzo (KB)
Avvio del programma 5100
Caricamento modello e matrici 14300
Utilizzo del sistema 14300
6.3.3 Utilizzo del processore
La percentuale di utilizzo del processore è un dato importante da rilevare per capire l'effi-
cienza del programma. Nelle tabelle 6.7 e 6.8 sono riportati i valori dei tempi e delle per-
centuali di utilizzo del processore riferite rispettivamente ai programmi di training e di
gaze tracking.
Tab. 6.7: Utilizzo CPU programma di training
Condizione Durata (ms) Utilizzo %
Avvio del programma 170 30
Caricamento collezione di immagini 400 60
Creazione modello e matriciassociative
5300 80
Compattazione database (Alcuni minuti) 95
Cattura nuova collezione 15400 21
Importazione/ Esportazione modello 3500 80
4 Questa procedura è illustrata in appendice D
118
CAPITOLO 6 Verifiche sperimentali
Tab. 6.7: Utilizzo CPU programma di training
Operazioni comuni, come :- inserimento nuova forma- picchettatura immagine
(variabile) < 6
Tab. 6.8: Utilizzo CPU programma di gaze tracking
Condizione Durata (ms) Utilizzo %
Avvio del programma e caricamentomodello e matrici associative
430 90
Cattura immagini 20 31
Calibrazione head tracking 4500 75
Ricerca Forma matrice di tipo A 370 100
Ricerca Forma matrice di tipo B 290 100
Ricerca Forma matrice di tipo C 170 96
Determinazione punto fissato 60 12
119
CAPITOLO 7
Conclusione e sviluppi futuri
Il sistema di gaze tracking progettato ha le potenzialità per diventare una buona piattaforma
di sviluppo per applicazioni dedicate all’interazione tra disabili e computer, per il momen-
to, l’algoritmo di head tracking permette di ottenere risultati paragonabili ai più costosi si-
stemi commerciali, mentre ulteriori studi e approfondimenti devono essere svolti per il mi-
glioramento della tecnica di eye tracking.
Per utilizzare efficacemente il sistema deve essere costruito per ogni utente un modello
specifico. La realizzazione del modello coinvolge l'utente per un periodo limitato di tempo
( massimo 30 secondi) per la cattura delle immagini necessarie, mentre un operatore deve
procedere ad segnalare i punti caratteristici della forma su ogni immagine. L'operatore tipi-
camente impiega un tempo variabile dai 5 ai 30 minuti per costruire il modello. La fase
appena descritta è svolta utilizzando il programma di training, essa è effettuata un'unica
volta per ogni utente.
Per avviare il sistema di gaze tracking è necessaria la presenza di un operatore che scelga
il modello opportuno e stabilisca la posizione corretta dell'utente, questa fase può durare da
120
CAPITOLO 7 Conclusione e sviluppi futuri
1 a 5 minuti in relazione al fatto che un utente abbia o meno un proprio modello specifico:
se l'utente non ha un proprio modello la scelta di quale utilizzare non è banale.
Dopo la scelta del modello nel caso dell'head tracking è necessaria una fase di calibrazione
del sistema, assistita dall'operatore , della durata tra i 5 e i 30 secondi.
Dopo l'eventuale fase di calibrazione l'utente è in grado di utilizzare il sistema di gaze trac-
king in autonomia.
La scelta del modello, il posizionamento dell'utente e la calibrazione (per l'head tracking)
sono procedure che vanno ripetute per ogni sessione di utilizzo del sistema.
In figura 7.1 sono illustrate le tempistiche delle fasi appena descritte.
Figura 7.1 Tempi per l'utilizzo del sistema di gaze tracking
Con l’utilizzo dell’head tracking è possibile per l’utente controllare con i movimenti della
testa il cursore del mouse, dopo un breve periodo di apprendimento si riesce ad ottenere
un’elevata precisione, tanto da permettere l’utilizzo delle normali applicazioni del sistema
operativo. Il click del mouse è effettuato mantenendo la stessa posizione della testa per un
determinato numero di secondi; mentre si è fermi, affianco al cursore del mouse, viene vi-
sualizzata una barra di progressione che indica quanto manca al click. Spostando il cursore
all’estremo sinistro dello schermo sarà visualizzata una finestra che dà la possibilità all’u-
tente di modificare le impostazioni di funzionamento, come il tipo di click da effettuare
(singolo, doppio, con il tasto destro) e la durata dell’attesa necessaria per il click. Il sistema
è in grado di stabilire se c’è una perdita di tracciamento della posizione e dopo circa 5 se-
condi, riposiziona il modello all’interno della zona definita durante la fase di calibrazione
permettendo di riprendere l’utilizzo del sistema.
Con l’utilizzo dell’eye tracking,invece, si riesce a dividere lo schermo da un minimo di 4
121
CAPITOLO 7 Conclusione e sviluppi futuri
ad un massimo di 16 zone. I risultati migliori per accuratezza e prestazioni si sono ottenuto
considerando una suddivisione dello schermo in 6 zone (griglia 2 x 3).
L’algoritmo implementato è fortemente sensibile al movimento della testa e alla differenza
tra il posizionamento dell’utente durante l’utilizzo del sistema e la posizione assunta duran-
te la costruzione del modello. Dai test condotti è emerso, data l’elevata sensibilità ai movi-
menti della testa, che la tecnica di eye tracking sviluppata è difficilmente utilizzabile da
utenti normodotati, che tendono a seguire con i movimenti della testa il punto osservato.
7.1 Possibili sviluppi futuri
Il sistema di gaze tracking attuale è già in grado di supportare lo sviluppo di applicazioni
esterne che lo utilizzano, una prosecuzione possibile del lavoro svolto è l'implementazione
di applicazioni specifiche per l'ausilio all'interazione tra utente disabile e computer.
In quest'ambito sono possibili diverse applicazioni, di seguito ne sono riportati alcuni
esempi:
Χ applicazione di sintesi vocale: il testo editato tramite le fissazioni dell'utente è
sintetizzato come voce;
Χ utilizzo un linguaggio simbolico: la comunicazione della necessità dell'utente av-
viene selezionando con lo sguardo determinati simboli che rappresentano azioni,
bisogni e desideri dell'utente.
Χ Integrazione con una casa domotica: il sistema di gaze tracking può essere inte-
grato con gli applicativi che gestiscono una casa completamente automatizzata.
Questa applicazione consentirebbe all'utente di controllare luci, porte e finestra
solamente attraverso lo sguardo.
Un'ulteriore prosecuzione del progetto potrebbe riguardare il miglioramento del sistema
stesso.
Nel capitolo 2 sono state illustrate diverse possibilità di implementazione di un sistema di
gaze tracking, per motivi di tempo e di opportunità non sono state sviluppate e verificate
tutte. La modularità con cui è stato progettato il sistema consente di migliorare e aggiornare
un singolo componente senza dover modificare la struttura del sistema stesso. Ciò permette
di verificare l'accuratezza e le prestazioni di algoritmi di gaze tracking diversi da quelli
implementati attualmente.
Di seguito sono elencate alcune possibili modifiche che potranno essere attuate per il mi-
122
CAPITOLO 7 Conclusione e sviluppi futuri
glioramento del sistema, esse sono rappresentate dalle idee emerse durante la progettazione
e che per motivi di tempo non sono state implementate.
7.1.1 Modifiche al programma di training
Il programma di training attualmente consente di creare modelli di forme costituiti da esat-
tamente 37 punti, un'interessante estensione dell'applicazione sarebbe implementare la pos-
sibilità di modellare forme costituiti da un punto arbitrario di punti.
Un'applicazione così strutturate permetterebbe di sviluppare sistemi di riconoscimento og-
getti che esulano dal gaze tracking: ad esempio si potrebbe progettare un sistema per il ri-
conoscimento del linguaggio dei segni dei sordi, oppure per il riconoscimento di determi-
nate presenza di eventuali patologie dall'analisi di una lastra.
7.1.2 Database centralizzato
Per dare la possibilità anche agli utenti su cui non è costruito un modello di utilizzare effi-
cacemente il sistema sarebbe opportuno avere a disposizione diversi modelli tra cui sce-
gliere quello che meglio si adatta alle caratteristiche dell'utente.
Per ampliare la possibilità di scelta risulterebbe d'aiuto progettare un database remoto che
dia la possibilità di condividere il maggior numero di modelli possibili tra tutti gli utenti
che utilizzano il sistema.
7.1.3 Utilizzo di due webcam
Per quanto riguarda il gaze tracking risulterebbe interessante implementare la possibilità di
utilizzo congiunto di due webcam per poter effettuare head tracking ed eye tracking con-
temporaneamente. Questa configurazione permette, in linea teorica, di limitare la forte
sensibilità dell'eye tracking dalla posizione e dal movimento della testa dell'utente.
123
BIBLIOGRAFIA
[1] Active Shape Models – Their training and application ; T.F. Cootes , C. J. Taylor , D.
H. Cooper, J, Graham
[2] REAL TIME EYE TRACKING FOR HUMAN COMPUTER INTERFACES ;Subrama-
nya Amarnag, Raghunandan S. Kumaran and John N. Gowdy.
[3] www.cogain.org
[4] Data mining with decision trees and decision rules. C. Apte and S. Weiss. Future
Generation Computer Systems, 13, 1997.
[5] Classification and Regression Trees. L. Breiman, J. Friedman, R. Olshen, C. Stone.
Wadsworth International Group, 1984.
124
APPENDICE A Anatomia e movimenti dell'occhio
Anatomia dell'occhio umano
L'organo della vista è costituito dal bulbo oculare di forma sferica del diametro che va dai
24 ai 24 mm. Anteriormente è ricoperto dalla congiuntiva, una membrana trasparente, men-
tre nel suo complesso è avvolto da tre membrane:la sclerotica, la più esterna, che davanti a
iride e pupilla forma la cornea, la coroide e la retina, di cui si dipartono le fibre del nervo
ottico.
Figura A: morfologia dell'occhio
La cornea, l'umore acqueo contenuto nella camera anteriore (fra cornea e iride) e in quella
posteriore (fra iride e cristallino), il cristallino e il corpo vitreo che costituisce l'interno del
bulbo oculare sono i mezzi trasparenti (mezzi diottrici) che consentono il passaggio dei
raggi luminosi. Questi ultimi entrano attraverso la pupilla, subiscono una serie di rifrazioni
opera dei mezzi diottrici, che hanno densità diversa e cadono sulla retina; affinché su que-
sta l'immagine si formi esattamente, il cristallino può cambiare la sua curvatura.
L' immagine retinica ha una persistenza di 1 / 16 di secondo per consentire la visione del
movimento. Sulla retina l'immagine si forma rovesciata, ma si vede dritta perché viene
esteriorizzata a livello celebrale.
Movimenti oculari
I movimenti oculari possono essere distinti sommariamente in due categorie: coniugati e
disconiugati, sotto il controllo rispettivamente dei sistemi di versione e di vergenza.
Il sistema di versione è diviso in quattro sottosistemi: il sottosistema per i movimenti ocu-
lari rapidi genera le saccadi; quello per i movimenti oculari lenti lo smooth pursuit o inse-
guimento lento; il sottosistema vestibolo-oculare il riflesso vestibolo-oculare e quello otti-
125
co-cinetico genera il riflesso otticocinetico.
Il movimento saccadico è un movimento oculare rapido volontario. Il suo scopo è di por-
tare sulla fovea l'immagine di oggetti di interesse che compaiono sulla periferia della reti-
na. Esso è caratterizzato da tre parametri che sono: ampiezza, durata e velocità di picco. La
durata aumenta in proporzione con l'aumentare dell'ampiezza del movimento, mentre la ve-
locità di picco raggiunge un massimo per ampiezze superiori ai 20°. Altri parametri che de-
scrivono la saccade sono la latenza, la metrica, la traiettoria e la strategia. La latenza è il
tempo che separa la comparsa dello stimolo dall'inizio del movimento, dipende sia dall'ec-
centricità del target sia dal paradigma di stimolazione. La metrica descrive l'accuratezza del
movimento, vale a dire il rapporto fra posizione finale dell'occhio e posizione del target: un
movimento accurato è definito ortometrico, un movimento che termina oltre il bersaglio si
dice ipermetrico mentre uno che si arresta prima del target si dice ipometrico. Le saccadi
dismetriche sono seguite da una seconda saccade correttiva con una latenza di circa 100
msec. La traiettoria descrive il modo nel quale la saccade viene eseguita. La strategia indica
il modo nel quale una saccade viene programmata e in condizioni fisiologiche è costituita
da un unico movimento ortometrico o da due movimenti, il secondo sempre correttivo.
Il movimento di inseguimento lento ha la funzione di mantenere sulla fovea l'immagine di
un oggetto in movimento.
Il riflesso vestibolo-oculare conserva costante la posizione dello sguardo durante i movi-
menti del capo.
Il riflesso ottico-cinetico è evocato dallo scorrere dell'immagine sulla retina causato dal
movimento della scena visiva o dalla testa. Per compensare, l'occhio esegue un movimento
lento nella direzione del movimento della scena, seguito da una saccade di ricentramento in
direzione opposta.
I movimenti di vergenza sono movimenti disconiugati. I due tipi di movimenti di vergen-
za sono quello di fusione, evocato quando l'immagine di un oggetto cade nei due occhi in
posizioni retiniche differenti, e quello di accomodazione, indotto da una riduzione di niti-
dezza dell'immagine.
126
APPENDICE B Guida al programma di training
Creare un nuovo Training set e catturare una collezione di immagini
Creare un nuovo Training Set
Premere il bottene "new ts" per aprire la finestra di dialogo con le impostazionidel trainingset
TS NameSpecificare un nome per il trainingset(obbligatorio)
Descrizione Descrizione del trainingset (faooltativo)
Type Si può scegliere fra due tipologie di trainingset
Χ Eye Ts crea un modello per eye-
tracking
Χ Head Ts crea un modello per head-
tracking
GridSe si è scelto come tipo Eye Ts si deve specificareil numero di righe e il numero di colonne in cuidelimitare lo schermo. Tipici valori utilizzabili sono 2x3,3x3,3x4
Catturare un collezione di immagini
Premere il bottone "New Cs" per aprire finestra di dialogo con le impostazione per lacattura di una collezione di immagini, chiamata Capture Set
Per path intendiamo l'insieme dei punti daosservare durante la cattura della collezione diimmagini.
Choose PathE' possibile scegliere tra i path già creati, alcentro sono visualizzate informazioni come ilnumero di righe , il numero di colonne e ilnumero di immagini che verrano catturate.Mentre a destra c'è un'anteprima della griglia dicattura in cui i cerchi blu indicano i punti in cuisi deve osservare.
New PathPer generare nuovi path personalizzati
Delete PathPer eliminare il path selezionato
STARTPer avviare la cattura delle immagini
Creare un nuovo path
127
Premere il bottone "new Path" per aprire la finestra di dialogo per la creazione di unnuovo PATH
Selezionare il numero di righe e di colonne della griglia.SG è l'abbreviazione di subgrid e indica il numero di righe e colonnein cui sarà divisa ulteriormente la griglia.(Nell'esempio le impostazioni sono R:2,C:3,SG:5)
Premere il bottone "Build" per generare la griglia.
Intendiamo con punto di cattura una zona di schermo da osservaredurante la cattura di immagini.E' rappresentato sulla griglia da un numero che indica il numero diimmagini catturate per ogni punto.
click sinistro sulla griglia aggiunge punto di cattura al pathper catturare più immagini sullo stesso punto basta cliccareulteriormente
click destro sulla griglia rimuove punto di cattura dal path
Premere OK per salvare il nuovo PATH
Eseguire la cattura
Dopo aver scelto ( o creato un path) premere il bottone START per avviare la cattura della collezionedi immagini
Premere il pulsante "Center Head" e posizionare la testa in modo che risulti al centro delloschermo.
Premere il pulsante "Stop Center" quando la posizione della testa è quella desiderataL'ultima immagine catturata dalla webcam viene memorizzata nel database
Premere il pulsante "Capture Set" per avviare la cattura delle immagini
Un cerchio si sposta per lo schermo.
Χ Nel caso si stia facendo un training set per l'eye-tracking bisogna
tenere la testa immobile e seguire il cerchio con lo sguardo.
Χ Nel caso di head-tracking si deve seguire il cerchio muovendo la
testa.
Quando il cerchio diventa verde indica che è stata catturata un'immagine.
Caricare una collezione di immagini
Dopo aver effettua la cattura di un nuovo Capture Set (2.1 B-B2), si può caricare
nell'applicazione premendo il pulsante "New Cset"
128
Selezionare il capture Set desiderato e premere il pulsante
LOAD
Sulla parte destra della finestra viene caricate la prima immagine delcapture set
utilizzare i tasti freccia per visualizzarele altre immagini delle collezione
Sulle sinistra viene visualizzata una griglia incui con una X è indicato il punto osservatodurante la cattura.Se la posizione non è corretta si puòmodificare clicclando nella posizione esatta
Catturare una singola immagine da webcam
E' possibile catturare una singola immagine da picchettare dalla webcam, per integrare osostituire immagini del capture set.Si deve agganciare la webcam premendo il bottone in figura a destra in alto, chediventerà come in figura a destra in basso.
Verrano visualizzate in basso a destra, informazioni sulla webcam, come statodi connessione e risoluzione.
Assicurarsi che la compressione RGB 24 , premendo il pulsante "Format"
Cliccare sul pulsante in figura a destra per catturare un'immagine dalla webcam.
Posizionare i picchetti
Dopo aver caricato un Capture Set (2.1 B3) occorre posizionare i picchetti per ogni immagine dellacollezione.I picchetti vengono utilizzati per costruire un modello probabilistico della forma dell'occhio o dellaposizione della testa.
129
Sull'immagine del Capure Set selezionare una zona rettangolare cheracchiuda l'occhio (o la testa) tenendo premuto il tasto sinistro del mouse.
Sulla sinistra verrà visualizzata la zona selezionataprecedentemente.
Permette di ingrandire l'immagine selezionata
Permette di rimpicciolire l'immagine selezionata
Avvia il posizionamento dei Picchetti
130
Occhio
Per posizionare i picchetti, basta cliccare col tasto sinistro del mousesull'immagine selezionata.Se si è sbagliato a posizionare un picchetto si può eliminare facendoclick col tasto destro del mouse.
Vi sono 37 picchetti che vanno posizionati su punti specificidell'occhio, nell'ordine mostrato nella figure sulla destra.
Una volta posizionati i 37 picchetti, cliccare sul pulsante
"OK" per aggiungere la forma al Training Set
Questi passi vanno ripetuti per ogni immagine che si
desidera aggiungere al trainingset
Testa
Per posizionare i picchetti, basta cliccare col tasto sinistro del mouse sull'immagine selezionata.Se si è sbagliato a posizionare un picchetto si può eliminare facendo click col tasto destro del mouse.
Vi sono 37 picchetti che vanno posizionati su punti specifici della testa, nell'ordine mostrato nella figuresulla destra.
Una volta posizionati i 37 picchetti, cliccare sul pulsante "OK" peraggiungere la forma al Training Set
Questi passi vanno ripetuti per ogni immagine che si desidera aggiungere al trainingset
131
Generare il modello matematico e matrici associative
Dopo che si sono picchettate le immagini, premento ilpulsante"Generate Model Matrix"
La durate del processo di generazione del modello e dellematrici associative dipende dal numero di immagini deltraining set.
Dopo aver generato il modello e le matrici associative è possibile utilizzarli con Sandra per eye-tracking
o head-tracking
Gestire i Training Set
Le seguenti informazioni illustrano le principali funzioni per gestire la raccolta dei training set
Caricare Training set
Nella finestra principale "Choose Training Set", cliccando sul nomedi un training set si visualizzeranno sulla destra informazioni
TypeEye TS o Head Ts
DescriptionLa descrizione del traing set immessa nella creazione, può anchemancare
Creation Date and Last modified DateLa funzione che imposta la data dell'ultima modifica non èfunzionante!!
ShapeNumero di immagini picchettate
Statistic GeneratedIndica se sono già stati generati modello e matrici associative
CollectionIndica il numero di capture set associati al training set
Premere il pulsante "LOAD" per caricare un training set precedentemente creato.
132
Inserire nuove forme
Dopo aver caricato un Training Set (2.4 A) premere il pulsante "Insert NewShape"
Ora è possibile creare un nuovo capture set (2.1 B),caricarne uno già creato (2.1 B3) oppure acquisire unasingola immagine da catturare (2.1 B4)
Visualizzare/Eliminare le forme inserite
Dopo aver caricato un training set(2.3 A), si avrà unafinestra come quella sulla destra
Per visualizzare leforme precedenti esuccessive a quelleattuali.
Aumenta / Diminuiscelo zoom.
Per elimanare una forma/immagine premere il
pulsante "Delete"
E' possibile modificare il punto osservato, indicato con una X sulla griglia, facendoclick col tasto sinistro sulla posizione corrette.
Cliccare poi sul bottone "Update point saw".
Visualizzare modello
Dopo aver caricato un training set(2.3 A), è possibile visualizzare il modello generato
cliccando sul pulsante "View Model"
Verrà visualizzato un modello dinamico che puòassumere tutte le forme di occhio/testa inserite durante ilpicchettamento.Per modificare il modello, spostare le diverse trackbar adestra o a sinistra.
133
Gestione Database
Compattare Database
Quando si eliminano CaptureSet, Shape e TrainingSet le dimensioni su disco del database che li continenenon diminuiscono, ma rimangono occupate per rendere più veloci ulteriori inserimenti.
Se si vuole liberare questo spazio dal menù Archive avviare il comando COMPACT DB.
L'operazione può richiedere diversi minuti!!!
Esportare TrainingSet
Esportare un training set è una funzione utile quando si vuole trasferire da un computer adun'altro, o quando vi è un aggiornamento del programma, per evitare di perdere i modelli giàfatti.
Nella finestra principale "Choose Training set" cliccare su "Export"
Si deve selezionare la cartella in cui salvareil trainingset, cliccare sul bottone, in figuraa destra.
Si può scegliere se salvare il training set informato Zip o in una cartella noncompressa.
Importare TrainingSet
Per importare un Training Set nella finestra principale "Choose Training set" cliccare
su "Import"
Si aprirà una finestra di dialogo simile a quella dellacreazione di un nuovo training sey, per completare icampi riferirisi a 2.1 APremere il bottone in figura a destra per selezionare ilfile da importare.Se si è decisono di non comprimero il training set, sidovrà selezionare il file "info.txt".
Una volta selezionato il file, si aprirà una finestra diinformazione, simile a quella in figura a destra.
Cliccare sul bottone "import" per importare il training set selezionato.
134
APPENDICE C Guida al programma di gaze tracking
Considerazioni sulla webcam
Se la webcam non è connessa al computer all'avvio del programma, le funzioni di eye-tracking ed head-tracking non saranno dispobili.
Dopo aver connesso la webcam , cliccare su "connect webcam now" per abilitare tutte le funzioni.
Assicurarsi che sia selezionata la modalità RGB, andando nel menù WebCam->Format.
Gestione utenti
Sandra memorizza le scelte di training set effettuate dagliutenti , per evitare ogni volta la ripetizione dei passi 3.3.Si può creare un nuovo profilo utente, selezionando la voce di
menù User->New Uset Profile...Verrà aperta una finestra come quella in figura affianco in cuiinserire un nome identificativo del profilo
Per selezionare un profilo, selezionare la voce di menù
User->Choose user profile...
DeleteServe per eliminare il profilo selezionato
SelectSeleziona il profilo e carica le impostazioni.
Non è necessario eseguire queste operazioni ogni volta, per default l'applicazione si avvierà caricandol'ultimo profilo utilizzato in precedenza.
135
Scelta del Training e Modello
Per visualizzare la finestra di scelta dei training set, selezionare
la voce di menù User->Choose Model Matrix
Scelta del tipo Eye oHead.
Scelta della matriceassociativa. Quandoviene generato ilmodello, vengonogenerate tre matriciassociativi checontengonoinformazioni per ilriconoscimento delleforme.Maggiore è il numero
della metrice minore
sarà la precisione, ma
si avrà più velocità di
elaborazione.
Scelta del modello,
utilizzare i bottoni >< per visualizzare i
modelli disponibili.
Provare il modello
Premere il bottone Try per provare il modello.
Verranno visualizzate le immagini catturati dalla webcam, per posizionare ilmodello clicclare col tasto sinistro
Χ nel caso di eye-tracking sull'occhio su cui si è fatto il trainingset
Χ nel caso di head-tracking il punto centrale della testa alla sommità
del naso
Cliccare sul bottone Stop try per interrompere la prova.
Per selezionare il modello, premere il bottone "Select"
136
Eye-tracking
Finestra "Touch Image"
Per avviare l'eye-tracking selezionare la voce del menù Eye->StartSi aprirà una finestra nella cui parte sinistra vengono visualizzate leimmagini della webcam, mentre sulla destra un'immagine catturata duranteill trainingset per fare in modo che il posizionamento della testa sia simile.
Click col tasto sinistro del mouse sull'occhio per posizionare il modello.
Ora si può chiudere o ridurre ad icona questa finestra, per visualizzarla di
nuovo, selezionare la voce di menù Eye->Touch Image
Come utilizzare le Applicazioni con l'eye-tracking
Una volta avviato l'eye-tracking si attiva la finestradi selezione tra programmi e opzioni.
Per effetture una scelta guardare nel riquadro
Options o Programs, una barra di scorrimentoindica quanto manca per la selezione.Quando una casella diviene di colore blu. E'selezionata.
Per confermare la scelta guardare su OK.
Per deselezionare una casella guardare su Cancel.
Impostazioni - Options
Queste impostazioni sono selezionabili comespiegato in 3.4 B.
Buffer SizeAumentando tale valore si ha un miglioramento dellaprecisione, ma un rallentamento del riconoscimento.
Images for clickE' il numero di step necessarri per selezionare unquadrande.
Mouse MovementIl numero di pixel di cui si sposta il mousenell'applicazione mouse move.
BackwardRitorna alla finestra precedente.
137
Applicazioni
Per illustrare il funzionamento dell'eye-tracking abbiamo realizzato due semplici applicazioni a puro scopodimostrativo.
Mouse Move
Selezionando questa applicazione, si ridurrà ad icona Sandra esarà possibile usare il mouse con lo sguardo.Si deve immaginare lo schermo diviso come se ci fosse la grigliae guardare nei riquadri come illustrato a destra
Sinistra Alto
Click BassoDest
ra
138
APPENDICE D Esempio di codice
Data la vastità del codice dell'applicazione risulta improponibile riportare integralmente il
codice. Lo scopo questa Appendice è mostrare una il codice di due classi che rappresentano
il classificatore per l'head tracking e l' eye tracking.
#ifndef _AdattamentoHead_h_
#define _AdattamentoHead_h_
#define STATO_INIZIO 001
#define STATO_UNLOOK 002
#define STATO_LOOK 003
const short MARGINE = 10;
const short FILTRO = 4;
const short SELEZIONE = 4;
const short MARGINE_CLICK = 5;
#define IMACLICK 20
#define TOLLERANZA 10
class HeadAdattamento : public Nirvana
{
public:
inline HeadAdattamento() {
puntiFUORI=0;
emiConta=0;
Attiva = DominioAttivo = false;
Stato = STATO_INIZIO;
bMouseMove=true;
imaClick=IMACLICK;
tipoClick=C_LEFTCLICK;
};
void SetThreadAdattamentoHead(CWinThread *ThreadAdattamentoHead);
void SetMouseMove(bool bM){bMouseMove=bM;};
int GetImaClick(){return imaClick;};
void SetImaClick(int iMA){imaClick=iMA;};
void SetTipoClick(short tipo){tipoClick=tipo;};
short GetTipoClick(){return tipoClick;};
139
public:
PUNTO_DOUBLE Centro,Previsione,Punto; // Punto è una specie di
accumulatore usato nei conti
UINT Stato;
bool Attiva;
bool DominioAttivo;
RECT Dominio;
short Contatore,ContatoreClick;
PUNTO_DOUBLE Sequenza[FILTRO],Click[SELEZIONE];
bool OkClick;
short emiConta;
public:
void Unlook();
void Look();
short puntiFUORI;
PUNTO_DOUBLE Shape[DIMENSIONE];
private:
PA_RICO *parRico;
bool bMouseMove;
int imaClick;
short tipoClick;
friend UINT ThreadProcAdattamentoHead(VOID *AdattamentoHead);
};
void HeadAdattamento::SetThreadAdattamentoHead(CWinThread *ThreadAdatta-
mentoHead)
{
this->ThreadAdattamentoHead = ThreadAdattamentoHead;
ThreadAdattamentoHead->m_bAutoDelete = false;
}
void HeadAdattamento::Unlook()
{
DominioAttivo = true;
Dominio.left = Dominio.right = (int)Centro.X;
Dominio.bottom = Dominio.top = (int)Centro.Y;
Stato = STATO_UNLOOK;
}
void HeadAdattamento::Look()
{
Stato = STATO_LOOK;
140
Contatore = ContatoreClick = 0;
ThreadSupervisore->PostThreadMessage(AG_MOSTRA_APPLICAZIONE,0,0);
threadMessaggi->PostThreadMessage(TM_INIT_HEAD,(long)
&Previsione,0);
}
static UINT ThreadProcAdattamentoHead(VOID *pAdattamentoHead)
{
HeadAdattamento *Merry = (HeadAdattamento *) pAdattamentoHead;
UINT Ret = 0;
int i;
MSG Msg;
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
switch(Msg.message)
{
case AG_INIT:
for (i=0;i<DIMENSIONE;i++)
{
Merry->Shape[i] = ((PUNTO_DOUBLE*) Msg.wParam)
[i];
}
Merry->Centro.X = (Merry->Shape[33].X+Merry->Shape[34].
X+
Merry->Shape[35].X+Merry-
>Shape[36].X)/4;
Merry->Centro.Y = (Merry->Shape[33].Y+Merry->Shape[34].
Y+
Merry->Shape[35].Y+Merry-
>Shape[36].Y)/4;
Merry->Attiva = true;
break;
case TM_FORMA_RICONOSCIUTA:
if(Merry->Attiva)
{
Merry->parRico = (PA_RICO*) Msg.wParam;
// trovo il punto medio fisso nella fronte
Merry->Centro.X = (Merry->parRico->Shape[33].
X+Merry->parRico->Shape[34].X+
141
Merry->parRico->Sha-
pe[35].X+Merry->parRico->Shape[36].X)/4;
Merry->Centro.Y = (Merry->parRico->Shape[33].
Y+Merry->parRico->Shape[34].Y+
Merry->parRico->Sha-
pe[35].Y+Merry->parRico->Shape[36].Y)/4;
switch(Merry->Stato)
{
case STATO_UNLOOK:
if(Merry->Centro.X < Merry->Dominio.left)
Merry->Dominio.left = (int)Merry-
>Centro.X;
if(Merry->Centro.X > Merry->Dominio.right)
Merry->Dominio.right = (int)Merry-
>Centro.X;
if(Merry->Centro.Y < Merry->Dominio.bottom)
Merry->Dominio.bottom = (int)Merry-
>Centro.Y;
if(Merry->Centro.Y > Merry->Dominio.top)
Merry->Dominio.top = (int)Merry->Cen-
tro.Y;
break;
case STATO_LOOK:
// Decisore
// Riduco il punto nel sistema di riferi-
mento Dominio
Merry->Punto = Merry->Centro;
if((Merry->Punto.X > (Merry->Dominio.left-
MARGINE)) &&
(Merry->Punto.X < Merry->Dominio.-
left))
Merry->Punto.X = Merry->Dominio.left;
if((Merry->Punto.X < (Merry-
>Dominio.right+MARGINE)) &&
(Merry->Punto.X > Merry->Dominio.-
right))
Merry->Punto.X = Merry->Dominio.-
right;
if((Merry->Punto.Y > (Merry->Dominio.bot-
tom-MARGINE)) &&
(Merry->Punto.Y < Merry->Dominio.bot-
tom))
142
Merry->Punto.X = Merry->Dominio.bot-
tom;
if((Merry->Punto.Y < (Merry-
>Dominio.top+MARGINE)) &&
(Merry->Punto.Y > Merry-
>Dominio.top))
Merry->Punto.X = Merry->Dominio.top;
if((Merry->Punto.Y > Merry->Dominio.top+MARGINE)||
(Merry->Punto.Y < Merry->Dominio.bottom-MARGINE)||
(Merry->Punto.X > Merry->Dominio.right+MARGINE)||
(Merry->Punto.X < Merry->Dominio.left-MARGINE)){
Merry->puntiFUORI++;
if ( Merry->puntiFUORI>=TOLLERANZA){
PUNTO pCentroDom;
pCentroDom.Y= ( Merry->Dominio.top-Merry->Dominio.bot-
tom)/2;
pCentroDom.X=(Merry->Dominio.right - Merry->Dominio.-
left)/2;
//Merry->Pipino->Tocco(pCentroDom.X+Merry->Dominio.-
left,pCentroDom.Y+Merry->Dominio.bottom);
Merry->puntiFUORI=0;
MessageBeep(900);
//Merry->Pipino->oldTocco();
SendMessage(Merry->GetFinestre(AG_HEAD),WM_CUR,0,0);
}
}else Merry->puntiFUORI=0;
Merry->Punto.X = Merry->Punto.X - Merry-
>Dominio.left;
Merry->Punto.Y = Merry->Punto.Y - Merry-
>Dominio.bottom;
// Filtro
if(!Merry->bMouseMove){
Merry->Sequenza[Merry->Contatore] = Merry->Punto;
Merry->Contatore++;
if(Merry->Contatore == FILTRO)
{
Merry->Punto.X = Merry->Punto.Y =
0;
143
for(i=0;i<FILTRO;i++)
{
Merry->Punto.X = Merry->Pun-
to.X + Merry->Sequenza[i].X;
Merry->Punto.Y = Merry->Pun-
to.Y + Merry->Sequenza[i].Y;
}
Merry->Punto.X = Merry->Punto.X/4;
Merry->Punto.Y = Merry->Punto.Y/4;
// Riduco il punto in percentuale a
specchio
Merry->Previsione.X = 1 - (Merry-
>Punto.X/(Merry->Dominio.right-Merry->Dominio.left));
Merry->Previsione.Y = Merry->Pun-
to.Y/(Merry->Dominio.top-Merry->Dominio.bottom);
Merry->threadMessaggi->PostThread-
Message(TM_PUNTO_HEAD,0,0);
Merry->Contatore = 0;
// Click
Merry->Click[Merry->ContatoreClick]
= Merry->Punto;
Merry->ContatoreClick++;
if(Merry->ContatoreClick == SELE-
ZIONE)
{
Merry->Punto.X = Merry->Pun-
to.Y = 0;
for(i=0;i<SELEZIONE;i++)
{
Merry->Punto.X = Merry-
>Punto.X + Merry->Click[i].X;
Merry->Punto.Y = Merry-
>Punto.Y + Merry->Click[i].Y;
}
Merry->Punto.X = Merry->Pun-
to.X/4;
Merry->Punto.Y = Merry->Pun-
to.Y/4;
Merry->OkClick = true;
for(i=0;i<SELEZIONE;i++)
{
144
if((Merry->Click[i].X <
(Merry->Punto.X - MARGINE_CLICK)) ||
(Merry->Click[i].X >
(Merry->Punto.X + MARGINE_CLICK)) ||
(Merry->Click[i].Y <
(Merry->Punto.Y - MARGINE_CLICK)) ||
(Merry->Click[i].Y >
(Merry->Punto.Y + MARGINE_CLICK)))
Merry->OkClick =
false;
}
if(Merry->OkClick)
Merry->threadMessaggi-
>PostThreadMessage(TM_CLICK_HEAD,0,0);
Merry->ContatoreClick = 0;
}
}
}
else //
{
POINT puntoMouse;
GetCursorPos(&puntoMouse);
bool bMove=false;
PUNTO pCentroDom;
int iHoffset=(Merry->Dominio.top-Merry-
>Dominio.bottom )/20;
int iWoffset=(Merry->Dominio.right - Merry->Dominio.-
left)/20;
pCentroDom.Y= ( Merry->Dominio.top-Merry->Dominio.bot-
tom)/2;
pCentroDom.X=(Merry->Dominio.right - Merry->Dominio.-
left)/2;
if(Merry->Punto.X> pCentroDom.X+3*iWoffset){
puntoMouse.x-=5;
bMove=true;
}
if(Merry->Punto.X> pCentroDom.X+6*iWoffset){
puntoMouse.x-=5;
145
}
if(Merry->Punto.X> pCentroDom.X+9*iWoffset){
puntoMouse.x-=5;
}
if(Merry->Punto.X< pCentroDom.X-3*iWoffset){
puntoMouse.x+=5;
bMove=true;
}
if(Merry->Punto.X< pCentroDom.X-6*iWoffset){
puntoMouse.x+=5;
}
if(Merry->Punto.X< pCentroDom.X-9*iWoffset){
puntoMouse.x+=5;
}
if(Merry->Punto.Y> pCentroDom.Y+3*iHoffset){
puntoMouse.y-=5;
bMove=true;
}
if(Merry->Punto.Y> pCentroDom.Y+6*iHoffset){
puntoMouse.y-=5;
}
if(Merry->Punto.Y> pCentroDom.Y+9*iHoffset){
puntoMouse.y-=5;
}
if(Merry->Punto.Y< pCentroDom.Y-3*iHoffset){
puntoMouse.y+=5;
bMove=true;
}
if(Merry->Punto.Y< pCentroDom.Y-6*iHoffset){
puntoMouse.y+=5;
}
if(Merry->Punto.Y< pCentroDom.Y-9*iHoffset){
puntoMouse.y+=5;
}
146
if (bMove) {
SetCursorPos(puntoMouse.x,puntoMouse.y);
Merry->emiConta=0;
}
else{
Merry->emiConta++;
int iTot=Merry->GetImaClick();
if (Merry->emiConta==iTot/10)
SendMessage(Merry->GetFinestre(AG_PRINCIPALE),
WM_CUR,IDC_CU1,0);
if (Merry->emiConta==iTot/6)
SendMessage(Merry->GetFinestre(AG_PRINCIPALE),
WM_CUR,IDC_CU2,0);
if(Merry->emiConta==iTot/3)
SendMessage(Merry->GetFinestre(AG_PRINCIPALE),
WM_CUR,IDC_CU3,0);
if(Merry->emiConta==iTot/2)
SendMessage(Merry->GetFinestre(AG_PRINCIPALE),
WM_CUR,IDC_CU4,0);
if(Merry->emiConta==(2*iTot/3))
SendMessage(Merry->GetFinestre(AG_PRINCIPALE),
WM_CUR,IDC_CU5,0);
if(Merry->emiConta==(iTot-iTot/10))
SendMessage(Merry->GetFinestre(AG_PRINCIPALE),
WM_CUR,IDC_CU6,0);
if(Merry->emiConta==iTot){
if(puntoMouse.x==0){
ShowWindow(Merry->GetFinestre(AG_MOUSEHEAD),SW_SHOW);
SetActiveWindow(Merry->GetFinestre(AG_MOUSEHEAD));
}
switch(Merry->GetTipoClick()){
case C_LEFTCLICK:{
INPUT mouseClick[2];
MOUSEINPUT mouseIn;
mouseIn.dx=puntoMouse.x;
mouseIn.dy=puntoMouse.y;
mouseIn.mouseData=0;
mouseIn.dwFlags=MOUSEEVENTF_LEFTDOWN;
mouseIn.time=0;
147
mouseIn.dwExtraInfo=NULL;
mouseClick[0].type=INPUT_MOUSE;
mouseClick[0].mi=mouseIn;
mouseIn.dwFlags=MOUSEEVENTF_LEFTUP;
mouseClick[1].type=INPUT_MOUSE;
mouseClick[1].mi=mouseIn;
SendInput(2,mouseClick,sizeof(INPUT));
}
break;
case C_RIGHTCLICK:
{
INPUT mouseClick[2];
MOUSEINPUT mouseIn;
mouseIn.dx=puntoMouse.x;
mouseIn.dy=puntoMouse.y;
mouseIn.mouseData=0;
mouseIn.dwFlags=MOUSEEVENTF_RIGHTDOWN;
mouseIn.time=0;
mouseIn.dwExtraInfo=NULL;
mouseClick[0].type=INPUT_MOUSE;
mouseClick[0].mi=mouseIn;
mouseIn.dwFlags=MOUSEEVENTF_RIGHTUP;
mouseClick[1].type=INPUT_MOUSE;
mouseClick[1].mi=mouseIn;
SendInput(2,mouseClick,sizeof(INPUT));
}
break;
case C_DOUBLECLICK:
{
INPUT mouseClick[2];
MOUSEINPUT mouseIn;
mouseIn.dx=puntoMouse.x;
mouseIn.dy=puntoMouse.y;
mouseIn.mouseData=0;
mouseIn.dwFlags=MOUSEEVENTF_LEFTDOWN;
mouseIn.time=0;
mouseIn.dwExtraInfo=NULL;
mouseClick[0].type=INPUT_MOUSE;
mouseClick[0].mi=mouseIn;
mouseIn.dwFlags=MOUSEEVENTF_LEFTUP;
mouseClick[1].type=INPUT_MOUSE;
148
mouseClick[1].mi=mouseIn;
SendInput(2,mouseClick,sizeof(INPUT));
Sleep(150);
SendInput(2,mouseClick,sizeof(INPUT));
}
break;
}
}
}
}
break;
}
}
break;
case AG_QUIT:
PostQuitMessage(0);
return 0;
break;
case AG_EMOUSE:
Merry->SetMouseMove((bool) Msg.wParam);
break;
}
}
Ret = Msg.wParam;
return Ret;
}
#endif
149
#ifndef Adatta_EMI_3
#define Adatta_EMI_3
#include "Dichiarazioni.h"
#define RIGHERET 2 // # righe in cui dividere lo
schermo
#define COLONNERET 3 // # colonne in cui dividere lo
schermo
#define QUADRATINI 5 //
#define IMMAGINIXPUNTO 1 // da cambiare in funzione della lunghezza del
GL;
#define DIMBUFFER 3
#define NUMIMA 5
#define WAITCLICK 300 //ms waited after click
#define MOUSEMOVE 10 //pixel
#define TUTTO_DIVERSO -1
#define NOT_INIT -2
static short puntoBuffer(PUNTO *buffer,int dim){
int i,j,max=0,indice,uguali=0;
int *occorrenze=new int[dim];
for (i=0;i<dim;i++) occorrenze[i]=0;
for (i=0;i<dim;i++){
for(j=i+1;j<dim;j++){
if((buffer[i].X==buffer[j].X)&&(buffer[i].Y==buffer[j].Y)){
occorrenze[i]++;
}
}
if(occorrenze[i]>max){
max=occorrenze[i];
indice=i;
}
150
else if (occorrenze[i]==max) uguali++;
}
delete [] occorrenze;
if (uguali==dim) return TUTTO_DIVERSO;
if(buffer[indice].X==-1)return NOT_INIT;
return indice;
}
#define szNameAdattamento TEXT("adaCLASS") //nome classe adattamen-
to
//CLASSE ADATTAMENTO//
class Adattamento
{
public:
Adattamento(); //costruttore
~Adattamento();
public: //metodi pubblici
int setAdattamento(S_PARAMETRI_GRIGLIA pG,Active *supervi-
sor); //non usato come costruttore per non modificare altri file
void setImpostazioni(int numFiltro); //imposta numero imma-
gini del filtro
void stabilisciPUNTO(PA_RICO *pa_rico);
void enableMouse(BOOL bM);
public: //accesso alla variabili private
int getBufferDim(); // restituisce dimensione del buffer
void setBufferDim(int numB); //imposta dimensione del buffer
int getNumFiltro(); //restituisce numero filtro
void setNumFiltro(int numF);
short getMouseMove();
void setMouseMove(short numM);
int getWaitClick();
void setWaitClick(int numW);
//cerca il massimo della matrice
private:
151
int numFiltro;
int numPuntiCorretti;
S_PARAMETRI_GRIGLIA parametriGriglia; //contiene le informazioni
sulla griglia di Adattamento
// IMPOSTA_MAP impostazioneAlgo;
Active *supervisor;
int contaFiltro;
long contaTotale;
PUNTO puntoGuardato;
int icontaOccorrenze;
PUNTO puPrecedente;
PUNTO puPPrecedente;
PUNTO pPallino;
BOOL bMoveMouse;
PUNTO *BufferPUNTI;
int iScorriBuffer,iDimBuffer;
short mouseMove;
int waitClick;
HANDLE Mutex;
};
//costruttore di classe
Adattamento::Adattamento(){
supervisor=NULL;
icontaOccorrenze=0;
puPrecedente.X=puPrecedente.Y=-1;
puPPrecedente.X=puPPrecedente.Y=-1;
bMoveMouse=false;
iScorriBuffer=0;
numFiltro=NUMIMA; contaFiltro=0; //impostazioni iniziali filtro
iDimBuffer=DIMBUFFER;
mouseMove=MOUSEMOVE;
waitClick=WAITCLICK;
152
BufferPUNTI=new PUNTO[iDimBuffer];
Mutex=CreateMutex(NULL,false,"MAda");
for (int i=0;i<iDimBuffer;i++) BufferPUNTI[i].X=BufferPUNTI[i].Y=0;
}
//distruttore di classe
Adattamento::~Adattamento(){
//pulizia memoria
delete[] BufferPUNTI;
supervisor=NULL;
CloseHandle(Mutex);
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::getBufferDim
Description :
Return : int - dimensione Buffer
Parameters :
Note :
\*============================================================*/
int Adattamento::getBufferDim(){
return iDimBuffer;
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::getNumFiltro
Description :
Return : int - numero immagini per click
Parameters :
Note :
\*============================================================*/
int Adattamento::getNumFiltro(){
153
return numFiltro;
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::getMouseMove
Description :
Return : short - offset di spostamento del mouse
Parameters :
Note :
\*============================================================*/
short Adattamento::getMouseMove(){
return mouseMove;
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::getWaitClick
Description :
Return : int - ms di tempo da attendere dopo un
click
Parameters :
Note :
\*============================================================*/
int Adattamento::getWaitClick(){
return waitClick;
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::setMouseMove
Description : imposta lo spostamento del mouse
Return : void -
Parameters :
154
short numM -offset mouse
Note :
\*============================================================*/
void Adattamento::setMouseMove(short numM) {
WaitForSingleObject(Mutex,INFINITE);
mouseMove=numM;
ReleaseMutex(Mutex);
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::setWaitClick
Description :
Return : void -
Parameters :
int numW - tempo ms da attendere dopo il click
Note :
\*============================================================*/
void Adattamento::setWaitClick(int numW) {
WaitForSingleObject(Mutex,INFINITE);
waitClick=numW;
ReleaseMutex(Mutex);
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::setBufferDim
Description : imposta le nuove dimensioni del buffer
Return : void -
Parameters :
int numB - dimensione buffer
Note :
\*============================================================*/
void Adattamento::setBufferDim(int numB){
int dim,i;
155
WaitForSingleObject(Mutex,INFINITE);
PUNTO *bufferTmp=new PUNTO[numB];
dim=iDimBuffer<numB?iDimBuffer:numB;
for (i=0;i<dim;i++) bufferTmp[i]=BufferPUNTI[i];
if (iScorriBuffer>dim) iScorriBuffer=dim;
iDimBuffer=numB;
delete[] BufferPUNTI;
BufferPUNTI=bufferTmp;
bufferTmp=NULL;
ReleaseMutex(Mutex);
}
/*============================================================*\
Author :E.Castellina Date : 30/03/2005
version 1.0
============================================================
Function : Adattamento::setNumFiltro
Description :
Return : void - imposta il numero immagini per
click
Parameters :
int numF - numero immagini
Note :
\*============================================================*/
void Adattamento::setNumFiltro(int numF){
WaitForSingleObject(Mutex,INFINITE);
numFiltro=numF;
if(icontaOccorrenze>=numFiltro) icontaOccorrenze=numFiltro-1;
ReleaseMutex(Mutex);
}
void Adattamento::enableMouse(BOOL bM){
bMoveMouse=bM;
}
int Adattamento::setAdattamento(
S_PARAMETRI_GRIGLIA pG, //parametri
griglia
Active *supervisor
156
)
{
parametriGriglia=pG;
this->supervisor=supervisor;
return TUTTO_OK;
}
void Adattamento::stabilisciPUNTO(PA_RICO *pa_rico)
{
int iPerc,indice;
WaitForSingleObject(Mutex,INFINITE);
BufferPUNTI[iScorriBuffer]=pa_rico->pPallino;
iScorriBuffer++;
if (iScorriBuffer>=iDimBuffer) iScorriBuffer=0;
indice=puntoBuffer(BufferPUNTI,iDimBuffer);
if (indice!=NOT_INIT && indice!=TUTTO_DIVERSO){
pPallino=BufferPUNTI[indice];
if (puPrecedente.X==-1) puPrecedente=pPallino;
else if ((puPrecedente.X==pPallino.X)&&(puPrecedente.Y==pPalli-
no.Y)){
icontaOccorrenze++;
iPerc=100*icontaOccorrenze/numFiltro;
if (iPerc==100) icontaOccorrenze=0;
}
else {
icontaOccorrenze=0;
puPrecedente=pPallino;
iPerc=0;
}
if (!bMoveMouse){
supervisor->threadMessaggi->PostThreadMessage(TM_EYE_POS,(WPARAM)
&pPallino,iPerc);
}else {
157
POINT puntoMouse;
GetCursorPos(&puntoMouse);
//GRID 2x3
if(parametriGriglia.numeroRighe==2 && parametriGriglia.numeroColon-
ne==3) {
if(pPallino.X==0 && pPallino.Y==0)
SetCursorPos(puntoMouse.x-mouseMove,puntoMouse.y);
else if(pPallino.X==0 && pPallino.Y==1)
SetCursorPos(puntoMouse.x,puntoMouse.y-mouseMove);
else if(pPallino.X==0 && pPallino.Y==2)
SetCursorPos(puntoMouse.x+mouseMove,puntoMouse.y);
else if(pPallino.X==1 && pPallino.Y==1)
SetCursorPos(puntoMouse.x,puntoMouse.y+mouseMove);
else if (pPallino.X==1 && pPallino.Y==0){
if(iPerc==100){
GetCursorPos(&puntoMouse);
INPUT mouseClick[2];
MOUSEINPUT mouseIn;
mouseIn.dx=puntoMouse.x;
mouseIn.dy=puntoMouse.y;
mouseIn.mouseData=0;
mouseIn.dwFlags=MOUSEEVENTF_LEFTDOWN;
mouseIn.time=0;
mouseIn.dwExtraInfo=NULL;
mouseClick[0].type=INPUT_MOUSE;
mouseClick[0].mi=mouseIn;
mouseIn.dwFlags=MOUSEEVENTF_LEFTUP;
mouseClick[1].type=INPUT_MOUSE;
mouseClick[1].mi=mouseIn;
SendInput(2,mouseClick,sizeof(INPUT));
}
158
}
} // endif GRID 2x3
}
}
ReleaseMutex(Mutex);
}
#endif
159