POLITECNICO DI TORINO III Facoltà di Ingegneria Tesi di - e-Lite
Commenti
Transcript
POLITECNICO DI TORINO III Facoltà di Ingegneria Tesi di - e-Lite
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 6.3 Prestazioni del sistema 113 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 7.1 Possibili sviluppi futuri 120 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 Creare un nuovo Training set e catturare una collezione di immagini 127 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 Eye-tracking 136 137 Finestra "Touch Image" 137 Come utilizzare le Applicazioni con l'eye-tracking 137 Impostazioni - Options 137 Applicazioni Mouse Move APPENDICE D Esempio di codice 138 138 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 religione, 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 popolazione invalida è in costante aumento nei paesi industrializzati essenzialmente per l'occorrenza di tre circostanze: l'aumento della vita media : incrementano le persone di età avanzata che sono maggiormente 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 comunicare e interagire con l’ambiente circostante. Sovente le periferiche di input come mouse e tastiera non sono utilizzabili da utenti disabili, 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 controllare il computer tramite la stima del punto osservato sullo schermo dall’utente. Esso può basarsi 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 coinvolgimento delle comunità di utenti nel progetto. Nell’ambito di questo consorzio il Politecnico di Torino ha progettato e sviluppato un proprio 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 permettere 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 numero di sistemi commerciali esistenti sia per il numero di articoli pubblicati su algoritmi e studi 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 obbiettivi 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 cognitive, in psicologia, nell'interazione fra uomo e computer e in numerosi altri campi per catturare 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 punto all'altro dello schermo. La registrazione dell'alternanza tra movimenti saccadici e fissazioni è 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à elettrica 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 contenente 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 centro della pupilla, è possibile dedurre i movimenti dell'occhio dalle variazioni del riflesso rinviato. Maggiori dettagli su questa tecnica saranno esposti nella descrizione di alcuni 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 dall’oftalmico francese Emile Javal nel 1878. I primi metodi per tracciare la posizione fissata dagli occhi erano piuttosto invasivi, richiedevano un contatto meccanico diretto con la cornea. Dodge e Cline nel 1901 svilupparono la prima tecnica precisa e non invasiva di tracciamento 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 partecipante 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 progressi durante la prima metà del ventesimo secolo con la combinazione della tecnica cine14 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 fotografiche allo studio del movimento degli occhi durante la lettura. Studiarono gli effetti sulla velocità di lettura e i differenti modelli di movimento oculare risultanti dalla variazione di carattere, 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 osservati 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 nell’analisi dei dati. Molti dei rilevanti lavori degli anni settanta riguardavano il miglioramento tecnico per aumentare 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 testa 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 svilupparono ognuna un sistema automatico di eye tracking in tempo reale, utilizzando un minicomputer, 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 studiare 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’utilizzo 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 miglioramento continuo della tecnologia hardware relative all’acquisizione di immagini l’utilizzo 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 oculare sono: • applicativi informatici e siti web : si può ottenere un miglioramento dell’interfaccia 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 ipovedenti, come tipologia e dimensione dei caratteri da utilizzare e abbinamenti cromatici adatti. Un esempio di questo campo di applicazione è rappresentato in figura 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 facoltà 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 particolari “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 simulatore di volo un atterraggio e di registrare i tramite tecniche di eye tracking la zona osservata 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 all’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 lavorativi 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ò eseguire programmi ad hoc che consentono all’utente di comunicare e di interagire con l’ambiente circostante. Esempi di patologie e disturbi in cui i sistemi di eye tracking possono essere strumenti efficaci 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 ancora 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’ conosciuta 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 anomala del sistema immunitario contro il sistema nervoso centrale. I sintomi della malattia dipendono dalla zona del sistema nervoso colpita, i più frequenti sono annebbiamento 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 progredisce 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 entrambi 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 debilitante. 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 collegata 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 domotica. 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 effettuare semplici azioni come accendere una luce,accendere il forno o aprire una porta senza l’assistenza di altre persone. Nel computer che controlla l’abitazione può essere implementato un sistema di gaze-tracking. 1.5 Head tracking Per head-tracking si intende un processo di analisi e di riconoscimento della testa dell’utente al fine di effettuare un’interazione con un sistema informatico. Esistono diversi sistemi di head-tracking ,presenti in letteratura e in commercio, che possono 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’immagine 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 della 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’autenticazione degli utenti per l’accesso a sistemi ad elevata sicurezza o per la ricerca di individui 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 paragrafi precedenti è l’elevato costo che non permette alla maggior parte delle persone di poterli utilizzare; solitamente i sistemi più accurati e all’avanguardia sono acquistati da associazione 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 algoritmo 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 sistema di eye tracking. Una particolarità di tali applicazione è la possibilità di modificare l'interfaccia in base alla precisione del sistema. La struttura della tesi rispecchia i diversi passi effettuati per realizzare il progetto; di seguito sono brevemente descritti i capitoli in cui è suddiviso il presente elaborato. • Nel CAPITOLO DUE “Sistemi di gaze tracking” vengono descritte i diversi componenti che costituiscono un generico sistema di gaze tracking. Sono illustrati alcuni 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’algoritmo di riconoscimento forme scelto per essere implementato all’interno del sistema. • 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 soluzioni adottate per ovviare ai problemi riscontrati durante la fase di analisi. • Nel CAPITOLO SEI “Verifiche sperimentali” vengono riportati i risultati delle verifiche sperimentali effettuate per la misurazione delle prestazioni e il controllo dell’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 componenti: Χ 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 è illustrato 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 Applicazioni Output Gaze tracking 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 aggiornato deve avere un elevata modularità, ossia deve essere strutturato in modo tale da comprendere componenti il più possibile indipendenti. Ogni modulo può essere modificato e migliorato indipendentemente dagli altri, con l'accortezza 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 dispositivo 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 immagini 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'interfaccia di comunicazione fra periferico di acquisizione e sistema. Questa alternativa è la più complessa da attuare sia per la difficoltà nella programmazione a basso livello sia perché poche case produttrici forniscono le specifiche dettagliate dei propri 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, poiché 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 acquisizione. Utilizzando questo metodo si ha una media complessità di progettazione ed implementazione poiché i driver forniti tipicamente svolgono funzioni elementari che non garantisco un livello di astrazione del dispositivo elevato, quindi si è ancora 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 precedentemente 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à introdotto nei sistemi Windows a 16 bit. Il numero di funzioni esportate è limitato e nonostante i parecchi anni passati dalla progettazione risulta di facile utilizzo. Questa API è già presente nei più diffusi ambienti di sviluppo, quindi non è necessario il pagamento 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 efficiente e veloce, ma ha il grave difetto di non permettere il passaggio dell'immagine acquisita direttamente in memoria. I precedenti lavori di tesi che utilizzano tale libreria per ovviare a questo hanno dovuto utilizzare una ram disk. Il costo per l'utilizzo della librerira è di circa 500 dollari. Intel Image Processing Library: è una API opensource che offre numerosissime funzioni 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 forma 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 implementazione. • 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 dapprima 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 sottocomponenti, 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 modello che viene rifinita cambiando i diversi sottocomponenti uno alla volta. Questi modelli sono tipicamente utilizzate nella ricerca di forme in ambito medico come valvole cardiache 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 parametri 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’immagine analizzata. Maggiori dettagli su questo algoritmo verranno esposti nei capitoli successivi. 4. Active appearence model (AAM): anch’esso utilizza un modello statistico deformabile dell’oggetto da ricercare, ma si differenzia dall’ASM nella memorizzazione dei livelli di grigio. In questo algoritmo viene generato sia un modello per la forma dell’oggetto sia un modello per il livello di grigi (texture dell’immagine). La ricerca della forma avviene tramite confronto tra l’immagine analizzata e le immagini sintetizzate dalla deformazione del modello. Verifiche sperimentali hanno dimostrato che l’active shape model è più veloce nella ricerca della forma, mentre l’active appearence model ha una precisione maggiore e richiede 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 esterni sono definiti in modo tale da conformare la curva al contorno della forma da ricercare. Vi sono due tipi di algoritmo per “contorni attivi” presenti in letteratura: 5.1. Contorni attivi parametrici: l’immagine è utilizzata per definire funzioni potenziali i cui minimi sono utilizzati come vincoli su cui far spostare le curve che definiscono 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 livello 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 necessitano 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 ingresso, 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 tecniche di addestramento non supervisionato in cui vengono distinte e generate automaticamente 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 misura 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’accuratezza. 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 completamente diverse dagli altri. 3. trattare gli attributi mancanti: solitamente si sostituisce la media dei valori per l’attributo. • 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 tempo per eseguire un addestramento su tutti gli attributi dell’oggetto. • Trasformazione dei dati: solitamente si effettua una normalizzazione dei dati, oppure si assegna una gerarchia di priorità ai diversi attributi dell’oggetto da classificare. 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 errati 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 svolgere 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 decisione, 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 coprono un sottoinsieme degli oggetti della classe. Un esempio di algoritmo di copertura è 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, ossia il rapporto tra gli oggetti che soddisfano sia la premessa che la conclu31 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: P C iX P X C i P C i PX 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 numero totale di elementi. Χ P(X) è la probabilità di avere come dato l’oggetto X, solitamente si considera uguale per ogni elemento. Χ P X C i è 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 assunti 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’insieme 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 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 informazioni, che cercano di simulare il funzionamento dei neuroni all'interno di un sistema 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'elaborazione 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 risultato delle moltiplicazioni viene sommato e se la somma supera una certa soglia il neurone si attiva attivando la sua uscita. Il peso serve a quantificare l'importanza dell'ingresso, un ingresso molto importante avrà un peso elevato, mentre un ingresso poco utile all'elaborazione avrà un peso inferiore. I singoli neuroni vengono collegati alla schiera di neuroni successivi, in modo da formare una rete di neuroni. Normalmente una rete è formata da tre strati. Nel primo abbiamo 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 preoccupa dell'elaborazione vera e propria e può essere composto anche da più colonne 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. Queste reti possono essere anche molto complesse e coinvolgere migliaia di neuroni e decine di migliaia di connessioni. La fase più importante dell’implementazione 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 relative 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’uscita non è nota a priori. Χ non supervisionato (unsupervised learning), basato su algoritmi d’addestramento che modificano i pesi della rete facendo esclusivamente riferimento ad un insieme di dati che include le sole variabili d’ingresso. Tali algoritmi tentano di raggruppare i dati d’ingresso e di individuare pertanto degli opportuni cluster rappresentativi dei dati stessi, facendo uso tipicamente di metodi topologici o probabilistici. L’apprendimento non supervisionato è anche impiegato per sviluppare tecniche di compressione dei dati. Χ con rafforzamento (reinforcement learning), nel quale un opportuno algoritmo 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 algoritmi per il reinforcement learning tentano in definitiva di determinare una politica tesa a massimizzare gli incentivi cumulati ricevuti dall’agente 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 è focalizzato sulla prestazione in linea, la quale implica un bilanciamento tra esplorazione 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’utente, di solito sono costituiti da visori da indossare come occhiali. Di seguito è riportata la descrizione di alcuni sistemi commerciali con una breve descrizione del principio di funzionamento e delle caratteristiche tecniche. 2.5.1 Mytobii Prodotto dalla società svedese Mytobii technology,questo dispositivo è costituito da un monitor che integra due emettitori di raggi infrarossi e una telecamera ad alta definizione sensibile 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 testa 10 cm/s 35 CAPITOLO 2 Sistemi di Gaze tracking Tab. 2.1 CARATTERISTICHE TECNICHE Mytobii 40 punti/s Riconoscimento punti osservati Precisione di stima del punto osservato Circa 0,5 cm Tolleranza alla luce ambientale/so- Funziona bene in diverse condizioni di illuminazione lare Tolleranza agli occhiali e lenti a contatto Utilizzando un supporto per monitor può essere Posizionamento posizionato su una scrivania o su un letto. Compensazione dell’errore nel movimento della testa Applicazioni incluse Tempo di posizionamento l’hardware Funziona nella maggioranza dei casi del- Circa 1 grado. • Sostituto della tastiera • Sostituto del mouse • Internet browser • Client e-mail • Controllo ambientale Meno 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 elettronici • Controllo ambientale 2.5.3 Quick Gaze II Prodotto dall’Eyetech Digital System, come i precedenti dispositivi è costituito da una videocamera 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 1 grado osservato Libertà dei movimenti della te- Dipende dal modello, da 4 x 4 cm a 10 x 10 cm sta Tolleranza alla luce Dipende dal modello, la tolleranza varia da discreta a ambientale/solare Tolleranza agli occhiali e lenti a contatto buona Funziona nella maggioranza dei casi Riconoscimento punti osservati 15÷30 punti/s Tempo di calibrazione Decine di secondi. • Sostituto della tastiera • Sostituto del mouse • Internet browser • Client e-mail • Sintesi Vocale • Giochi Applicazioni incluse Numero di sistemi in uso 500÷1000 2.5.4 EagleEyes Sviluppato da Opportunity foundation of America, per il tracciamento della posizione oculare utilizza la tecnica dell’elettro-oculografia che consiste nella misurazione del potenziale elettrico prodotto dal movimento oculare tramite cinque elettrodi posti sulla testa dell’utente. 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 illuminazione. Tab 2.4: Caratteristiche tecniche Eagle Eyes Requisiti di sistema Microsoft Windows 98/XP , porta USB meno di 500 g Peso Tolleranza alla luce ambientale/solare Tolleranza agli occhiali e Funziona in tutte le condizioni di luce. Funziona bene nella maggioranza dei casi lenti a contatto Libertà dei movimenti della Consente ampia libertà (superiore a 20 cm) testa 15 Hz Frequenza di campionamento Tempo di posizionamento 10 minuti dell’hardware variabile Tempo di Calibrazione Applicazioni incluse • Sostituto della tastiera • Sostituto del mouse • Internet browser • Client e-mail • Supporto per la lettura libri elettronici • Controllo ambientale 10÷50 Numero di sistemi in uso 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'interno 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 ricercatori 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, componenti elettronici,ecc.). Il modello della forma di un oggetto è costruito a partire da un insieme di immagini denominato training set. In questa tecnica ogni oggetto è rappresentato da un’insieme di punti. I punti possono caratterizzare il contorno, caratteristiche interne e particolarità esterne dell’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 distanza fra punti equivalenti nelle diverse immagini. Dall’analisi della statistica della posizione dei punti viene ricavato un “modello della distribuzione 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 modellato, 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'immagine. 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 iterativamente 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 circuito 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 forme molto differenti tra loro, quindi rendono inadatto l'utilizzo di un modello rigido di rappresentazione. 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 insieme di immagini che costituisce il training set. Si ottiene ciò rappresentando ogni campione come un insieme di punti etichettati, denominati “picchetti”. 3.2.1 Picchettatura del training set Ogni forma per essere modellata è rappresentata da un'insieme di punti. Per la forma dell'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 esempio 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 variare delle forme. Se la picchettatura non è corretta, con un particolare picchetto posizionato malamente, questo metodo non riesce a catturare la variabilità della forma con precisione. Possiamo ricondurre i picchetti a tre tipologie: 1. posizionati in punti con particolare significato per l'applicazione che usa il modello: 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 coordinate delle posizioni dei picchetti nel training set. Per confrontare punti equivalenti di immagini 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 x i0 , y i0 , x i1 , y i1 ,... , x ik , y ik ,... , x i n#1 , y i 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 M s , dove s cos x j k # s sin y j k x jk y jk 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 ax , ay ,tx ,t y ) porta ad un insieme di quattro equazioni lineari. X 2 #Y 2 W 0 0 W Y2 X2 Z 0 X2 Y2 0 Z #Y 2 X 2 ax X1 ay Y 1 tx C1 ty C2 dove n#1 n#1 X i w k x ik Y i w k y ik k 0 k 0 n#1 n#1 Z w k x 2 k y 2 k W w k 2 2 k 0 k 0 n#1 C 1 w k x 1 k x 2 k y 1 k y 2 k k 0 n#1 C 2 w k y 1 k x 2 k # x 1 k y 2 k k 0 I pesi possono essere scelti in modo tale da dare più importanza ai punti che tendono ad essere maggiormente “stabili” nell'insieme: ossia quei punti che si discostano poco dai corrispettivi altri punto delle altre forme. La matrice dei pesi utilizzata è calcolata come segue: sia R k l la distanza tra i punti k e l in una forma: sia V R stanza nell'insieme delle forme. Si è scelto un peso kl la varianza della di questa di- w k per il punto k-esimo usando #1 n#1 wk VR kl l0 Se un punto si muove notevolmente rispetto agli altri punti della forma la somma delle varianze sarà alta e sarà assegnato un peso di basso valore, mentre se un punto tende a rimanere 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 precedentemente 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, è necessaria in ogni interazione per garantire la convergenza dell'algoritmo. Senza normalizzazione vi sarebbero 4 N variabili ( , s , t x , t y 4 N #1 vincoli su per ognuna delle N forme) e l'algoritmo sarebbe divergente, la forma media sarebbe, contratta, 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 rappresentate 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 stituisce una nuvola di N punti in uno spazio N campioni di forme co- 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 modellare 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 muoversi all'interno di essa. Dato un insieme di N forme allineate, la forma media, 45 x (il centro del dominio ellis- CAPITOLO 3 Active shape model soidale della forma possibile), è calcolato usando x 1 N N xi i1 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 xi dove d x i x i # x Si può calcolare la matrice di covarianza S 1 N S di dimensioni 2 n)2 n , usando N d x i d x Ti i1 Gli assi principali dell'ellissoide, sono descritti da lori di p k k 1,.... ,2 n l'insieme di autova- S tali che Sp k k p k (dove k è il k-esimo autovalore di S , con k k 1 ) T p k p k 1 Può essere dimostrato che gli autovettori della matrice di covarianza corrispondono ai maggiori 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, significa che l'ellissoide di dimensione ne t . Questo 2 n è approssimato da un ellissoide di dimensio- t , dove t è scelto in modo tale che l'ellissoide originale abbia abbia un relativa- mente piccola larghezza lungo gli assi Un metodo per calcolare t t1 e superiori. è 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 2n T k k 1 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 modello sul movimento del punto l lungo un vettore parallelo a tenuto da l-esima coppia di elementi in pk : 46 d x k l , d y k l , che è ot- CAPITOLO 3 Active shape model T p k d x k 0 , d y k 0 , ...... , d x k l , d y k l , ...... , d x k n#1 , d xy k n#1 Una forma nel training set può essere approssimata usando la forma media e la somma pesata delle suo deviazioni ottenuta dalla prime t mode: x x Pb (1), dove T P p1 , p1 , . . . , p t è la matrice dei primi t autovettori, e bb1 b 2 .... bt T è un vettore di pesi. Le equazioni sopra descritte permettono di generare nuovi campioni di forme variando i parametri b k all'interno di appropriati limiti, in modo tale che la nuova forma sia simile a quelle del training set. I parametri sono linearmente indipendenti, anche ci potrebbe essere una dipendenza non lineare ancora presente. I limiti per b k sono calcolati esaminando la distribuzione dei valori dei parametri richie- sti per generare il training set. Dato che la varianza di b k nel training set può essere mostrata da k , limiti idonei sono tipicamente dell'ordine di #3 k b k 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 interessata. Un 'istanza del modello è data da X M s , x X c , dove T X c X c , Y c , X c , Y c , ..... , X c , Y c 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 47 X nell'immagine ed esa- CAPITOLO 3 Active shape model minare la regione dell'immagine attorno ad ogni punto del modello per determinare spostamento in una posizione migliore. Queste deformazioni locali sono trasformate in cambiamenti 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 cambiamenti. 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 cercando di adattare ad un oggetto nell'immagine, si ha necessità di trovare un insieme di aggiustamenti 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 dX , 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 forma 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 rotazione d e il fattore di scala 1d 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, lo spostamento dei punti X di d x , nelle coordinate locali dell'immagine, richiesti per dX 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 s1d s , d xd x X c d X c X d X perciò M s1d s , d xd x M s , x d X # X c d X c e poiché M #1 #1 s , M s ,# si ottiene d xM s 1d s#1 ,# d y # x (3) , dove yM 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 modello della forme. Con lo scopo di applicare i vincoli della forma, si trasforma n d x nello spazio dei parametri 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 xd x x P bd b (4) Dato che ci sono solo t 2 n modi di variazioni sono possibili e dx 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 T d b P d x (5) dato che P T 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 posizionamento e gli aggiustamenti d X C , d Y C , d , d s ai parametri della forma db richiesti per migliorare la corrispondenza tra modello e immagine. L'aggiornamento dei parametri si applica in uno schema iterativo X c X c w t d X c Y c Y c w t d Y c w d s s 1w s d s b b W b d b dove w t , 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 deviazione del corrispondente parametro della forma nel training set. Si assicura che il modello 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 D m è minore di una costante opportuna , D max . 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 forma di un oggetto a partire da un modello di distribuzione dei punti. Non è stato sinora spiegato come implementare lo spostamento e la deformazione della forma 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 gradienti 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 memorizzate 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 fattibilità 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à tecnica di realizzazione del sistema. Per verificare le ipotesi teoriche emerse durante la fase di analisi sono stati realizzati applicativi specifici per effettuare test sull'efficienza e la potenzialità di algoritmi e tecniche utilizzate. 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 gazetracking 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 accessibile al maggior numero di persone possibile il sistema di gaze-tracking. Una webcam comune,attualmente in commercio, è in grado di catturare circa venti immagini 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 dell'occhio durante la fase di fissazione e non durante i movimenti saccadici1. Data la ridotta risoluzione di acquisizione diventa rilevante il posizionamento della webcam: maggiore è la vicinanza della webcam all'occhio maggiore sarà la porzione dell'immagine 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 direzione 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.2: disposizione webcam Head tracking Figura 4.1: disposizione webcam Eye tracking In fase di progettazione sono emerse due possibili architetture d'implementazione del modulo di acquisizione delle immagini. • Cattura continua delle immagini della webcam. • Cattura delle nuove immagini quando sono necessarie al sistema per eseguire il riconoscimento. La cattura continua delle immagini della webcam ha il vantaggio di evitare l'implementazione di un protocollo di comunicazione tra modulo di cattura immagini e modulo di riconoscimento forme con il risparmio delle relative tempistiche di funzionamento, ma ha lo svantaggio di utilizzare risorse del sistema anche quando non strettamente necessarie all'elaborazione e riconoscimento del punto fissato. Il modulo di riconoscimento forme recupera 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 acquisizione 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 gazetracking. 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 modello dell'oggetto da ricercare all'interno delle immagini. Sono svariate le possibilità di scelta per la costruzione di un modello, di seguito sono riportati 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 , essenzialmente 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 differenziazione maggiore rispetto all’altro occhio in relazione ai punti osservati. • A parità di numero di picchetti utilizzati per delimitare la forma, concentrare l’attenzione 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 controllo 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.4: posizione picchetti sull'occhio Figura 4.3: immagine dell'occhio Per quanto riguarda la modellazione della posizione della testa (figura 4.5) si possono evidenziare come punti caratteristici: le sopracciglia,il naso, e la zona di intersezione tra le sopracciglia 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.6: posizione dei picchetti sulla testa Figura 4.5: immagine del volto 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 dimensione 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 precisione del modello. Il numero di immagini del training set determina anche la complessità computazionale della ricerca per cui è impossibile ipotizzare la costruzione di un unico modello per tutte le tipologie di forme d’occhio. Il sistema di gaze-tracking quindi gestirà modelli specifici di testa e di occhio per ogni singola persona che l’utilizzi. 4.3.2 Calcolo della complessità computazionale L’analisi della complessità dell’algoritmo è utile per determinare scelte ottimali dei parametri 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 funzionamento 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, oppure 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 rispetto 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 progetto influiscano sul funzionamento dell'algoritmo. Per rendere agevoli e più chiara l'analisi sono state considerate tutte le operazioni sia aritmetiche 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 n dis 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 disotto della soglia predeterminata, il punto 4 dell'algoritmo si ripete per K volte. Per ricercare 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, è funzione 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 classificazione 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 detection. Come è stato illustrato nel capitolo 3 esistono svariate tecniche di classificazione degli oggetti. Per verificare quale tecnica si adatti meglio alla Gaze detection si è sviluppata un'applicazione 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 capitolo 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 sviluppato 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 riconoscimento 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 immagini 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 P 0 , P 1 , P 2 . 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: P 0 ζ#24, 24 P 1 ζ#14, 14 P 2 ζ#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 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 memorizzano 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 differiscono dalla media di più di due volte della varianza. Χ Per ogni zona il massimo e il minimo di P0 e P 1 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 valori 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 utilizzando 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 zona dello 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 zona dello 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 zona dello 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 zona dello 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 zona dello 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 zona dello 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 63 3)4 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 come ascissa e P1 P0 come ordinata. Le zone in cui è suddiviso lo schermo sono rappre- sentate da aree del piano di forma rettangolare. Le aree tratteggiate indicano la sovrapposi64 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 possibilità 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 produce 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 ricerca della forma. 4.4.3 Utilizzo dell'indice delle immagini L'algoritmo di ricerca forme implementato fornisce come dato in uscita l'indice dell'immagine 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 memorizzano 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 Χ Probabilità totale: P T i Χ numero forme di indice i nella zona Z numero forme nella zona Z 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 probabilità della zona osservata considerando F indici. Χ Dato un indice i per ogni zona P Z , f P R , Z i∝P T con Χ Z si calcola: f ζ0, F #1 Dopo f indici si calcola per ogni zona la probabilità di essere fissata: F #1 1 P Z ∝ P Z , f F f 0 Χ 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 zona dello 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 zona dello 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 zona dello 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 zona dello 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 zona dello 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 zona dello 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'addestramento e precisione voluta. Nel grafico in figura 4.19 è riportato, in riferimento alle verifiche 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 uniformemente 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 riconoscibili, ma la determinazione delle altre zone presenta buoni risultati. I test svolti hanno rilevato che la diversa distribuzione del tasso di errore è dovuta alla presenza 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 distribuzione non uniforme. Dall'analisi dei risultati delle sperimentazioni svolte è emerso che le zone più soggette a errore 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, considerando una suddivisione dello schermo in una griglia 2)3 , purchè le applicazioni siano 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 dimensione 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 presente 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 valori 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 posizionamento dell'utente rispetto alla posizione assunta durante la costruzione del modello. Per misurare la dipendenza del tasso di errore dalla posizione è stato sviluppato un applicativo 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 spostamenti 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. 90,00% 80,00% Tasso d'errore 70,00% 60,00% 50,00% 40,00% Verifica 13 Verifica 14 30,00% 20,00% 10,00% 0,00% 0 1 2 3 4 5 6 Differenza di posizione (cm) Figura 4.22: andamento del tasso d'errore in funzione della differenza di posizione. Griglia 3x4 75 Tasso d'errore CAPITOLO 4 Analisi di fattibilità 85,00% 80,00% 75,00% 70,00% 65,00% 60,00% 55,00% 50,00% 45,00% 40,00% 35,00% 30,00% 25,00% 20,00% 15,00% 10,00% 5,00% 0,00% Verifica 15 Verifica 16 0 1 2 3 4 5 6 Differenza di posizione (cm) Tasso d'errore Figura 4.23 andamento del tasso d'errore in funzione della differenza di posizione. Griglia 3x3 85,00% 80,00% 75,00% 70,00% 65,00% 60,00% 55,00% 50,00% 45,00% 40,00% 35,00% 30,00% 25,00% 20,00% 15,00% 10,00% 5,00% 0,00% Verifica 18 Verifica 17 0 1 2 3 4 5 6 Differenza di posizione (cm) 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 funziona76 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. 50,00% 47,50% 45,00% 42,50% Tasso di errore 40,00% 37,50% 35,00% 32,50% 30,00% 27,50% Verifica 13 Verifica 14 25,00% 22,50% 20,00% 17,50% 15,00% 12,50% 10,00% 1 2 5 10 20 F Tasso di errore Figura 4.25:andamento del tasso d'errore in funzione di F , Griglia 3x4, Differenza di posizione 0,5 cm 40,00% 37,50% 35,00% 32,50% 30,00% 27,50% 25,00% 22,50% 20,00% 17,50% 15,00% 12,50% 10,00% 7,50% 5,00% 2,50% 0,00% Verifica 15 Verifica 16 1 2 5 10 20 F Figura 4.26:andamento del tasso d'errore in funzione di F , Griglia 3x3, Differenza di posizione 0,5 cm 77 Tasso di errore CAPITOLO 4 Analisi di fattibilità 40,00% 37,50% 35,00% 32,50% 30,00% 27,50% 25,00% 22,50% 20,00% 17,50% 15,00% 12,50% 10,00% 7,50% 5,00% 2,50% 0,00% Verifica 17 Verifica 18 1 2 5 10 20 F 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 leggeri 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 motivo 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 costruiti 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 struttura 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 implementazione 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 training set. • Cattura delle immagini: è un modulo di comunicazione con il dispositivo di cattura 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 impostati. 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 cattura 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 sistema, 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 forme di occhio e di testa. Le fasi per la costruzione di un modello sono descritte dallo schema in figura 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 occhio 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 picchetti 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 punti 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 indicata 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 fondamentale per la costruzione del modello. Le immagini catturate nella fase precedente ritraggono l’intero volto dell’utente, quindi prima di procedere alla collocazione dei picchetti si deve selezionare solo la zona dell’immagine 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 selezionare Figura 5.6: zona della testa da selezionare Le zone delle immagini selezionate vengono memorizzate nel database all’interno della tabella ImagesTS (tab. x +) per essere utilizzate per il calcolo della matrici di colori nell’intorno 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 forme e successivamente i punti di unione tra tali punti. Le differenze di colorazione dei picchetti 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 gestione 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 dinamicamente che contiene strutture di tipo PUNTO. Un PUNTO è rappresentato da due numeri interi che indicano le coordinate della posizione 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 generazione 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 contiene 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 tabella TrainingSet (tab.x+). Il programma di training permette di visualizzare il modello ottenuto e di verificare la risposta del modello alla variazione del valore dei pesi applicati. Questa possibilità è utile per appurare che la fase di posizionamento dei picchetti sia avvenuta 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 picchetti 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_ASSOCIATIVA_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 CELLA_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 all’utente la possibilità di scegliere il miglior compromesso tra velocità e accuratezza del sistema. In figura 5.12 sono rappresentate in scala le differenti zone considerate nell’intorno del picchetto. 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 gestione e memorizzazione. Sono state implementate diverse funzioni che permettono di svolgere questi compiti: • Cattura di immagini personalizzabile: è possibile definire PATH di cattura differenti 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’interno 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 trasportare 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 effettuare 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 all'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 influisce 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 questa finestra è possibile visionare, selezionare e provare tutti i modelli costruiti in precedenza con il programma di training. Oltre alla scelta del modello è stata concessa la possibilità di decidere il tipo di matrice associativa da utilizzare per permettere di determinare il compromesso tra accuratezza e velocità 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 modello; sono impiegate tipicamente per l'eye tracking data l'elevata sensibilità ai movimenti 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 nell'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 funzionamento 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 effettuate per determinare la possibilità d'implementazione del sistema. In questo paragrafo sono illustrate le scelte progettuali adottate ,in base alle sperimentazioni svolte, tra quelle descritte in precedenza. In figura 5.15 è rappresentato lo schema di funzionamento dei componenti in condivisi dall'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 microsoft 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 provenienti dal modulo “Ricerca Forme” e il modulo di “Gestione del dispositivo” esegue la cattura. Alla chiusura del programma il modulo “Gestione dispositivo” invia il segnale di disconnessione alla webcam. 5.3.3.BRicerca della forma La ricerca della forma all'interno delle immagini è effettuata tramite l'implementazione dell'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.17 indicazione posizione modello della testa Figura 5.16: indicazione posizione occhio 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'immagine. Χ 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 controllo 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 presentata 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 SUPERVISORE 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, calcolato come il numero di riconoscimenti consecutivi della stessa zona in rapporto al numero 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 esecuzione. 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 testa 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 posizione 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 tracker. 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 inviato al SUPERVISORE la segnalazione della zona maggiormente indicata all'interno del buffer. 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 rettangolari concentriche. La direzione dello spostamento è determinata dalla posizione del punto medio corrente rispetto al centro del dominio. La velocità di spostamento è determinata 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à presenti 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 intermediario 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 gestione . Χ 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 contenute 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'applicazione 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 dall'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 impostazioni 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 indica l'avanzamento della selezione; quando raggiunge il 100% la zona assume una colorazione 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 numero 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 tracking. 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 applicazione è 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'editor 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 supporta gli standard SQL92 e SQL99. Comprende diverse caratteristiche tipiche dei più blasonati programmi commerciali: Χ 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’architettura 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 seguenti 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 inutile utilizzare i DMBS che la implementano. In appendice D? è riportata la descrizione delle tecniche di integrazione delle librerie SQLite 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 2 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 versioni la struttura del database può essere aggiornata. 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 IDTS E’ 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 scelta solo dei training che hanno questo valore posto a TRUE. NSHAPE E’ il numero di forme che compongono il training set. IDSPOTSINFO E’ 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 Indicano il numero di righe e di colonne in cui viene suddiviso lo rowGrid , colschermo per creare un modello di occhio. (Questa informazione non è Grid 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 forma 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 struttura 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 gazetracking 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, binIma E’ 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 memorizzare 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 IndexShape Rappresenta l’indice con cui viene memorizzato all’interno della forma. 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 IDTS E’ il riferimento all’identificatore del training set a cui appartiene la forma binShape, size E’ un campo BLOB che contiene in formato binario la disposizione dei picchetti IDIMATS E’ il riferimento all’identificatore dell’immagine su cui è stata picchettata 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. IDTS E’ il riferimento all’identificatore del training set a cui appartiene la forma GrayL Indica la larghezza della zona rettangolare nell’intorno di ogni picchetto da cui sono memorizzate le matrici di colori. GreyE,GreyI Indicano la lunghezza della zona rettangolare nell’intorno di ogni picchetto da cui sono memorizzate le matrici di colori. GrayE indica la lunghezza in pixel della zona inferiore del picchetto mentre GrayI della 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 IDTS E’ 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 IDTS E’ 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 IDCOLL E’ 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 E Campo 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 schermo, 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. subMat Indica che precisione adottare per identificare un punto all’interno di una zona dello schermo. pointlist E’ la presentazione in formato binario dell’elenco di punto che costituiscono il PATH 111 CAPITOLO 6 Verifiche sperimentali 6.1 Introduzione Al termine dell'implementazione del sistema di gaze tracking sono state condotte delle verifiche 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 capitolo 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'algoritmo 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 numero 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 riconoscimento sui vari training set. 90 80 Numero forme 70 60 50 Forme TS Forme Riconosciute 40 30 20 10 0 TS 1 TS 2 TS 3 TS 4 TS 5 TS 6 Figura 6.1: numero forme riconosciute su numero di forme del training set 100,00% 80,00% 60,00% 40,00% Percentuale 20,00% 0,00% TS 1 TS 2 TS 3 TS 4 TS 5 TS 6 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 Tempi di costruzione modello (min.) di immagini del training set e tempi di costruzione del modello. 70 60 50 40 Tempo 30 20 10 0 89 60 30 12 6 Numero immagini Training Set 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.5: percorso di cattura B Figura 6.4: percorso di cattura A 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 percorso di tipo B. D'altro canto, il percorso di tipo B, consente all'utente una maggiore facilità di utilizzo, poiché risulta più naturale, durante l'impiego delle applicazioni, fissare i punti 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 luce ambientale e testato con illuminazione artificiale 7 12 A Luce differente: modello costruito con la normale luce ambientale 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 computer 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ò contenere un numero elevato di modelli. Si è ritenuto necessario verificare la relazione che intercorre tra il numero immagini del training set su cui è basato il modello e la dimensione fisica del modello stesso. Nel grafico in figura 6.9 è rappresentata tale relazione. 14000 Dimensione (KB) 12000 10000 8000 6000 Dimensione (KB) 4000 2000 0 6 12 20 40 60 90 Numero forme del training set 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 effettuate 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 4 Compattazione database Memoria occupata da database 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'efficienza del programma. Nelle tabelle 6.7 e 6.8 sono riportati i valori dei tempi e delle percentuali di utilizzo del processore riferite rispettivamente ai programmi di training e di gaze tracking. Tab. 6.7: Utilizzo CPU programma di training 4 Condizione Durata (ms) Utilizzo % Avvio del programma 170 30 Caricamento collezione di immagini 400 60 Creazione modello e matrici associative 5300 80 Compattazione database (Alcuni minuti) 95 Cattura nuova collezione 15400 21 Importazione/ Esportazione modello 3500 80 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 caricamento modello 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 momento, l’algoritmo di head tracking permette di ottenere risultati paragonabili ai più costosi sistemi commerciali, mentre ulteriori studi e approfondimenti devono essere svolti per il miglioramento 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 tipicamente 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 tracking 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 visualizzata 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’utente 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 secondi, 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 durante la costruzione del modello. Dai test condotti è emerso, data l’elevata sensibilità ai movimenti 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 avviene 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 integrato 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 mi122 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 esattamente 37 punti, un'interessante estensione dell'applicazione sarebbe implementare la possibilità di modellare forme costituiti da un punto arbitrario di punti. Un'applicazione così strutturate permetterebbe di sviluppare sistemi di riconoscimento oggetti che esulano dal gaze tracking: ad esempio si potrebbe progettare un sistema per il riconoscimento del linguaggio dei segni dei sordi, oppure per il riconoscimento di determinate 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 efficacemente il sistema sarebbe opportuno avere a disposizione diversi modelli tra cui scegliere 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 contemporaneamente. 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 ;Subramanya 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, mentre 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 questa 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 oculari rapidi genera le saccadi; quello per i movimenti oculari lenti lo smooth pursuit o inseguimento lento; il sottosistema vestibolo-oculare il riflesso vestibolo-oculare e quello otti125 co-cinetico genera il riflesso otticocinetico. Il movimento saccadico è un movimento oculare rapido volontario. Il suo scopo è di portare sulla fovea l'immagine di oggetti di interesse che compaiono sulla periferia della retina. 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 velocità di picco raggiunge un massimo per ampiezze superiori ai 20°. Altri parametri che descrivono 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'eccentricità 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 movimenti 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 vergenza 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 nitidezza 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 impostazioni del trainingset TS Name Specificare 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 eyetracking Χ Head Ts crea un modello per headtracking Grid Se si è scelto come tipo Eye Ts si deve specificare il numero di righe e il numero di colonne in cui delimitare 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 la cattura di una collezione di immagini, chiamata Capture Set Per path intendiamo l'insieme dei punti da osservare durante la cattura della collezione di immagini. Choose Path E' possibile scegliere tra i path già creati, al centro sono visualizzate informazioni come il numero di righe , il numero di colonne e il numero di immagini che verrano catturate. Mentre a destra c'è un'anteprima della griglia di cattura in cui i cerchi blu indicano i punti in cui si deve osservare. New Path Per generare nuovi path personalizzati Delete Path Per eliminare il path selezionato START Per 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 un nuovo PATH Selezionare il numero di righe e di colonne della griglia. SG è l'abbreviazione di subgrid e indica il numero di righe e colonne in 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 osservare durante la cattura di immagini. E' rappresentato sulla griglia da un numero che indica il numero di immagini catturate per ogni punto. click sinistro sulla griglia aggiunge punto di cattura al path per catturare più immagini sullo stesso punto basta cliccare ulteriormente 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 collezione di immagini Premere il pulsante "Center Head" e posizionare la testa in modo che risulti al centro dello schermo. Premere il pulsante "Stop Center" quando la posizione della testa è quella desiderata L'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 del capture set utilizzare i tasti freccia per visualizzare le altre immagini delle collezione Sulle sinistra viene visualizzata una griglia in cui con una X è indicato il punto osservato durante 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 o sostituire immagini del capture set. Si deve agganciare la webcam premendo il bottone in figura a destra in alto, che diventerà come in figura a destra in basso. Verrano visualizzate in basso a destra, informazioni sulla webcam, come stato di 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 della collezione. I picchetti vengono utilizzati per costruire un modello probabilistico della forma dell'occhio o della posizione della testa. 129 Sull'immagine del Capure Set selezionare una zona rettangolare che racchiuda l'occhio (o la testa) tenendo premuto il tasto sinistro del mouse. Sulla sinistra verrà visualizzata la zona selezionata precedentemente. 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 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 dell'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 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 131 Generare il modello matematico e matrici associative Dopo che si sono picchettate le immagini, premento il pulsante "Generate Model Matrix" La durate del processo di generazione del modello e delle matrici associative dipende dal numero di immagini del training 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 nome di un training set si visualizzeranno sulla destra informazioni Type Eye TS o Head Ts Description La descrizione del traing set immessa nella creazione, può anche mancare Creation Date and Last modified Date La funzione che imposta la data dell'ultima modifica non è funzionante!! Shape Numero di immagini picchettate Statistic Generated Indica se sono già stati generati modello e matrici associative Collection Indica 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 New Shape" Ora è possibile creare un nuovo capture set (2.1 B), caricarne uno già creato (2.1 B3) oppure acquisire una singola immagine da catturare (2.1 B4) Visualizzare/Eliminare le forme inserite Dopo aver caricato un training set(2.3 A), si avrà una finestra come quella sulla destra Per visualizzare le forme precedenti e successive a quelle attuali. Aumenta / Diminuisce lo zoom. Per elimanare una forma/immagine premere il pulsante "Delete" E' possibile modificare il punto osservato, indicato con una X sulla griglia, facendo click 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 il picchettamento. Per modificare il modello, spostare le diverse trackbar a destra o a sinistra. 133 Gestione Database Compattare Database Quando si eliminano CaptureSet, Shape e TrainingSet le dimensioni su disco del database che li continene non 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 ad un'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 salvare il trainingset, cliccare sul bottone, in figura a destra. Si può scegliere se salvare il training set in formato Zip o in una cartella non compressa. 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 della creazione di un nuovo training sey, per completare i campi riferirisi a 2.1 A Premere il bottone in figura a destra per selezionare il file da importare. Se si è decisono di non comprimero il training set, si dovrà selezionare il file "info.txt". Una volta selezionato il file, si aprirà una finestra di informazione, 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 headtracking 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 dagli utenti , 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 cui inserire un nome identificativo del profilo Per selezionare un profilo, selezionare la voce di menù User->Choose user profile... Delete Serve per eliminare il profilo selezionato Select Seleziona il profilo e carica le impostazioni. Non è necessario eseguire queste operazioni ogni volta, per default l'applicazione si avvierà caricando l'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 o Head. Scelta della matrice associativa. Quando viene generato il modello, vengono generate tre matrici associativi che contengono informazioni per il riconoscimento delle forme. 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 il modello 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->Start Si aprirà una finestra nella cui parte sinistra vengono visualizzate le immagini della webcam, mentre sulla destra un'immagine catturata durante ill 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 finestra di selezione tra programmi e opzioni. Per effetture una scelta guardare nel riquadro Options o Programs, una barra di scorrimento indica 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 come spiegato in 3.4 B. Buffer Size Aumentando tale valore si ha un miglioramento della precisione, ma un rallentamento del riconoscimento. Images for click E' il numero di step necessarri per selezionare un quadrande. Mouse Movement Il numero di pixel di cui si sposta il mouse nell'applicazione mouse move. Backward Ritorna alla finestra precedente. 137 Applicazioni Per illustrare il funzionamento dell'eye-tracking abbiamo realizzato due semplici applicazioni a puro scopo dimostrativo. Mouse Move Selezionando questa applicazione, si ridurrà ad icona Sandra e sarà possibile usare il mouse con lo sguardo. Si deve immaginare lo schermo diviso come se ci fosse la griglia e guardare nei riquadri come illustrato a destra 138 Sinistra Alto Click Basso Dest ra 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 *ThreadAdattamentoHead) { 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->Shape[35].X+Merry->parRico->Shape[36].X)/4; Merry->Centro.Y = (Merry->parRico->Shape[33]. Y+Merry->parRico->Shape[34].Y+ Merry->parRico->Shape[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->Centro.Y; break; case STATO_LOOK: // Decisore // Riduco il punto nel sistema di riferimento Dominio Merry->Punto = Merry->Centro; if((Merry->Punto.X > (Merry->Dominio.leftMARGINE)) && (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.bottom-MARGINE)) && (Merry->Punto.Y < Merry->Dominio.bottom)) 142 Merry->Punto.X = Merry->Dominio.bottom; 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.bottom)/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->Punto.X + Merry->Sequenza[i].X; Merry->Punto.Y = Merry->Punto.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->Punto.Y/(Merry->Dominio.top-Merry->Dominio.bottom); Merry->threadMessaggi->PostThreadMessage(TM_PUNTO_HEAD,0,0); Merry->Contatore = 0; // Click Merry->Click[Merry->ContatoreClick] = Merry->Punto; Merry->ContatoreClick++; if(Merry->ContatoreClick == SELEZIONE) { Merry->Punto.X = Merry->Punto.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->Punto.X/4; Merry->Punto.Y = Merry->Punto.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.bottom)/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 #define MOUSEMOVE //ms waited after click 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 *supervisor); //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 : Description : Return : Adattamento::setMouseMove imposta lo spostamento del mouse 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 - - tempo ms da attendere dopo il click Parameters : int numW 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 : Return : imposta le nuove dimensioni del buffer void - - dimensione buffer Parameters : int numB 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 - numero immagini click Parameters : int numF 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, griglia Active *supervisor 156 //parametri ) { 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==pPallino.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.numeroColonne==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