2012-05-11 9 views
5

Attualmente sto lavorando a un progetto di eye tracking. In questo progetto sto monitorando gli occhi in un video della webcam (risoluzione se 640X480).Informazioni su come trovare un alunno in un video

Posso individuare e tracciare l'occhio in ogni fotogramma, ma ho bisogno di localizzare la pupilla. Ho letto molti documenti e molti di essi si riferiscono al metodo deformabile di modello di Alan Yuille per estrarre e tracciare le caratteristiche dell'occhio. Qualcuno può aiutarmi con il codice di questo metodo in tutte le lingue (MATLAB/OpenCV)?

Ho provato con soglie diverse, ma a causa della bassa risoluzione nelle regioni degli occhi, non funziona molto bene. Apprezzerò davvero ogni tipo di aiuto per quanto riguarda la ricerca di alunni o persino iride nel video.

Sample image

+1

Penso che sarà difficile con quella risoluzione . Puoi caricare uno screenshot su imageshack.us e fornire il suo link qui? –

+0

Non so come allegare un'immagine. Puoi aiutarmi ... –

+0

Non puoi ancora farlo, perché non hai abbastanza reputazione su questo sito. – Tibor

risposta

1

seconda dell'applicazione per il tracciamento della pupilla avrei trovato un riquadro per gli occhi e poi trovare il pixel più scuro all'interno di quella scatola.

Alcuni psuedocodarlo:

box left_location = findlefteye() 
box right_location = findrighteye() 
image_matrix left = image[left_location] 
image_matrix right = image[right_location] 
image_matrix average = left + right 
pixel min = min(average) 
pixel left_pupil = left_location.corner + min 
pixel right_pupil = right_location.corner + min 
+1

Ho provato con il pi più scuro xel. Ma il problema con questo è, a volte la luce si riflette sull'iride, quindi la pupilla non è più il punto più oscuro. Non so come risolvere questo problema. –

+1

quindi a volte è il più leggero e talvolta il più scuro? Puoi trovare il punto più estremo usando il valore assoluto del gradiente o semplicemente trovando il 'max (abs (eye_image - mean (eye_image)))' – vaebnkehn

+0

Ciao vaebnkehn, ho provato questo approccio ieri, ma non funzionava . :( –

8

Quello che dovete fare è quello di convertire la webcam ad una camma vicino infrarosso. Ci sono molti tutorial online per questo. Try this.

Un Immagine tratta da una camma NIR sarà simile a questa -

enter image description here

È possibile utilizzare OpenCV poi a soglia.

enter image description here

quindi utilizzare la funzione di Erode.

enter image description here

Dopo questa riempire l'immagine con un pò di colore takeing un angolo come punto di seme.

enter image description here

eliminare i fori e invertire l'immagine.

enter image description here

Utilizzare la distanza trasformare al valore più vicino non-zero.

enter image description here

Trova il massimo valore coordinare e disegnare un cerchio.

enter image description here

+0

Ciao Anirudh, grazie per la tua risposta. Il problema è che non posso usare nessuna telecamera a infrarossi o qualsiasi altra versione modificata della web cam. Devi solo usare una semplice webcam. Comunque, grazie molte. –

+0

Una webcam normale può essere convertita in un NIR può molto facilmente. Fai riferimento al link sopra menzionato nella risposta. – Anirudh

2

Se si sta ancora lavorando su questo, controllare il mio progetto OptimEyes: https://github.com/LukeAllen/optimeyes

Esso utilizza Python con OpenCV, e funziona abbastanza bene con le immagini da una webcam 640x480. Puoi anche consultare "Theory Paper" e il video dimostrativo su quella pagina. (Era un progetto di classe a Stanford all'inizio di quest'anno, non è molto lucido ma abbiamo fatto alcuni tentativi di commentare il codice.)

0

Nella prima risposta suggerita da Anirudth ...
Basta applicare la funzione HoughCirles dopo la funzione di soglia (2 ° passo).
Quindi puoi disegnare direttamente i cerchi attorno alla pupilla e usando il raggio (r) e il centro dell'occhio (x, y) puoi facilmente scoprire il centro dell'occhio ..