visual una recorrido publicidad ojo imagen grafico diseño image-processing opencv computer-vision human-computer-interface eye-tracking

image processing - recorrido - estimación de la mirada a partir de una imagen de un ojo



recorrido visual en z (1)

Pude detectar la pupila y las esquinas de los ojos con precisión hasta el momento. Puedes ver algunas fotos que subí en mi respuesta a mi pregunta aquí:

Realizando detección estable de esquina de ojo

Esto es lo que hice hasta ahora. Calibré la mirada del usuario mirando a TLCP, TRCP y BLCP donde

CP = calibration point; a screen point used for calibration B = bottom T = top L= left R = right gaze_width = TRCP.x - TLCP.x gaze_height = BLCP.y- TLCP.y

Y los puntos de mirada correspondientes que obtengo mirando esos CPs se llaman GPs

cálculo de un punto de mirada GP:

Restamos los valores de las ordenadas del TLGP de la ubicación actual del centro del alumno, porque el punto de la mirada debe caer en el rectángulo hipotético, que espero que lo entiendas, es realmente muy simple.

He mapeado linealmente los puntos de mirada calculados desde la ubicación del centro de la pupila hasta los puntos de la pantalla usando un sistema básico de escalado donde las escalas se calculan de la siguiente manera:

scaleX = screen_width/gaze_width scaleY = screen_height/gaze_height

Y para cualquier punto de mirada P (x, y) calculo el punto de pantalla correspondiente Q (m, n) como:

m = scaleX*x n = scaleY*y

Pero el problema es, incluso después de la detección casi perfecta de los alumnos (casi porque con poca luz da falsos positivos. Pero tengo la intención de poner eso bajo limitaciones porque no puedo trabajar en ello, no tengo suficiente tiempo), yo '' Todavía estoy obteniendo un ancho de mirada pobre y altura de mirada.

Aquí hay un registro de ejecución de prueba:

DO_CAL= True Gaze Parameters: TLGP = (38, 26) | TRGP = (20, 22) | BLGP = (39, 33) screen height = 768 screen width = 1366 gaze height = 7 gaze width = 18 scales: X = 75.8888888889 | Y = 109.714285714 Thing on = True Gaze point = (5, 3) Screen point: (987, 329) Gaze point = (5, 3) Screen point: (987, 329) Gaze point = (7, 5) Screen point: (835, 549) Thing on = False TLGP = (37, 24) | TRGP = (22, 22) | BLGP = (35, 29) screen height = 768 screen width = 1366 gaze height = 5 gaze width = 15 scales: X = 91.0666666667 | Y = 153.6 Thing on = True Gaze point = (12, 3) Screen point: (1093, 461) Gaze point = (12, 3) Screen point: (1093, 461) ESC pressed

Basta con mirar los puntos de mirada y sus correspondientes puntos de pantalla detectados por la mirada (debajo de ellos). Las grandes diferencias en los valores de x, y, ordenadas me están molestando. El lunes es la presentación final.

Después de este enfoque, teoricé otro en el que:

La calibración se realiza como en el primer método. Detectaría el movimiento de la mirada y su dirección. Digamos, dados dos puntos de la ubicación del centro del alumno, P y Q, donde P es el primer punto de mirada, Q es el segundo, luego calculamos la dirección y la longitud de la línea PQ.

Supongamos que la longitud de este segmento de línea es L. Luego escalamos L a proporciones de pantalla, digamos L es D en escala de pantalla, y dada la dirección de movimiento de la mirada, movemos el cursor en la pantalla desde su último punto de descanso, diga R, D distancia, a un nuevo punto S que se calculará como el punto final del segmento de línea cuya longitud es D, y el punto de inicio S. La representación figurativa se da en la figura. Por lo tanto, básicamente, no mapeo los datos de mi mirada al punto de la pantalla, básicamente sigo la mirada y la convierto en un "empujón" para aplicarla al cursor en la pantalla. Pero aún no lo he implementado. Porque en realidad no correlaciona la mirada con las coordenadas de la pantalla y, por lo tanto, puede ser errónea. Las motivaciones para esta teoría se derivaron del proyecto eViacam en sourceforge: básicamente rastrean su rostro y mueven el mouse en consecuencia. En la calibración, solo calculan cuánto mueve su cara a lo largo de los ejes.

En pocas palabras : si alguno de ustedes tiene alguna idea de cómo detectar la mirada de un usuario a partir de una imagen del ojo perfectamente procesada, una con el centro de la pupila y las esquinas de los ojos detectados , ¡dígaselo! Tengo casi un día, y sé que es tarde, pero solo necesito una idea mágica que pueda ayudarme.


Esta no es una respuesta, pero es imposible publicarla como comentario. Lo eliminaré después de tu respuesta.

¿Estás seguro de que tienes todos los parámetros necesarios?

Considere el siguiente diagrama:

Si su cámara detecta las esquinas y la pupila en {K, J, Q}, ¿cómo puede distinguir de otra triple {F, E, O}? Tenga en cuenta que las medidas son las mismas, pero las direcciones de la mirada, representadas por las flechas negras son completamente diferentes.

Nota: las dos líneas negras y rojas se extrajeron de un único punto de la cámara, colocado fuera de la región visible.