PyGaze (seguimiento ocular)
- Acerca de
- Eye trackers compatibles
- Instalando PyGaze
- pip install (todas las plataformas)
- Complementos de PyGaze para OpenSesame
- Ejemplo
- Resumen de funciones
- clase eyetracker
- función eyetracker.calibrar()
- función eyetracker.cerrar()
- función eyetracker.conectado()
- función eyetracker.dibujar_objetivo_de_calibración(x, y)
- función eyetracker.dibujar_objetivo_de_corrección_de_deriva(x, y)
- función eyetracker.corrección_de_deriva(pos=None, fix_triggered=False)
- función eyetracker.corrección_de_deriva_activada_por_fijación(pos=None, min_samples=30, max_dev=60, reset_threshold=10)
- función eyetracker.get_eyetracker_clock_async()
- función eyetracker.log(msg)
- función eyetracker.log_var(var, val)
- función eyetracker.pupil_size()
- función eyetracker.sample()
- función eyetracker.send_command(cmd)
- función eyetracker.set_detection_type(eventdetection)
- función eyetracker.set_draw_calibration_target_func(func)
- función eyetracker.set_draw_drift_correction_target_func(func)
- función eyetracker.set_eye_used()
- función eyetracker.start_recording()
- función eyetracker.status_msg(msg)
- función eyetracker.stop_recording()
- función eyetracker.wait_for_blink_end()
- función eyetracker.wait_for_blink_start()
- función eyetracker.wait_for_event(event)
- función eyetracker.wait_for_fixation_end()
- función eyetracker.wait_for_fixation_start()
- función eyetracker.wait_for_saccade_end()
- función eyetracker.wait_for_saccade_start()
Acerca de
PyGaze es una biblioteca Python para seguimiento ocular. Un conjunto de complementos te permiten utilizar PyGaze dentro de OpenSesame. Para obtener más información sobre PyGaze, visita:
Por favor, cita PyGaze como:
Dalmaijer, E., Mathôt, S., & Van der Stigchel, S. (2014). PyGaze: An open-source, cross-platform toolbox for minimal-effort programming of eyetracking experiments. Behavior Research Methods. doi:10.3758/s13428-013-0422-2
Eye trackers compatibles
PyGaze es compatible con los siguientes eye trackers:
Para los siguientes eye trackers, hay soporte experimental:
También puedes realizar seguimiento ocular básico en experimentos en línea con WebGazer.js:
PyGaze también incluye dos eye trackers simulados para propósitos de prueba:
- Simple dummy — No hace nada.
- Advanced dummy — Simulación de movimientos oculares con el mouse.
Instalando PyGaze
Windows
Si usas el paquete oficial de Windows de OpenSesame, PyGaze ya está instalado.
Ubuntu
Si utilizas Ubuntu, puedes obtener PyGaze desde el PPA de Cogsci.nl:
sudo add-apt-repository ppa:smathot/cogscinl
sudo apt-get update
sudo apt-get install python-pygaze
O, si está utilizando Python 3, cambia el último comentario a:
sudo apt-get install python3-pygaze
pip install (todas las plataformas)
Puedes instalar PyGaze con pip
:
pip install python-pygaze
Anaconda (todas las plataformas)
conda install python-pygaze -c cogsci
Complementos de PyGaze para OpenSesame
Los siguientes complementos de PyGaze están disponibles:
- pygaze_init — Inicializa PyGaze. Este complemento se inserta generalmente al inicio del experimento.
- pygaze_drift_correct — Implementa un procedimiento de corrección de desplazamiento.
- pygaze_start_recording — Pone a PyGaze en modo de grabación.
- pygaze_stop_recording — Saca a PyGaze del modo de grabación.
- pygaze_wait — Pausa hasta que ocurra un evento, como el inicio de un sacádico.
- pygaze_log — Registra variables experimentales y texto arbitrario.
Ejemplo
Para ver un ejemplo de cómo utilizar los complementos de PyGaze, consulta la plantilla de PyGaze incluida en OpenSesame.
A continuación se muestra un ejemplo de cómo utilizar PyGaze en un inline_script de Python:
# Crea un objeto de teclado y un objeto de lienzo
my_keyboard = Keyboard(timeout=0)
my_canvas = Canvas()
my_canvas['dot'] = Circle(x=0, y=0, r=10, fill=True)
# Bucle...
while True:
# ... hasta que se presione la barra espaciadora
key, timestamp = my_keyboard.get_key()
if key == 'space':
break
# Obtiene la posición de la mirada de pygaze ...
x, y = eyetracker.sample()
# ... ¡y dibuja un punto de fijación dependiente de la mirada!
my_canvas['dot'].x = x + my_canvas.left
my_canvas['dot'].y = y + my_canvas.top
my_canvas.show()
Resumen de funciones
Para inicializar PyGaze en OpenSesame, inserta el complemento pygaze_init en tu experimento. Una vez que hayas hecho esto, un objeto eyetracker
estará disponible, que ofrece las siguientes funciones:
clase eyetracker
Una biblioteca genérica de Python para seguimiento ocular.
función eyetracker.calibrar()
Calibra el sistema de seguimiento ocular. El comportamiento real de esta función depende del tipo de seguidor ocular y se describe a continuación.
EyeLink:
Esta función activará la pantalla de configuración de la cámara, que permite ajustar la cámara y realizar un procedimiento de calibración/validación. Al presionar 'q' saldrá de la rutina de configuración. Al presionar 'escape' primero se activará un cuadro de diálogo de confirmación y luego, tras la confirmación, se generará una Excepción.
EyeTribe:
Activa una rutina de calibración simple.
Devuelve:
Devuelve Verdadero si la calibración tuvo éxito, o Falso si no; además, un registro de calibración se agrega al archivo de registro y se actualizan algunas propiedades (es decir, los umbrales para los algoritmos de detección).
- Tipo: bool
función eyetracker.cerrar()
Cierra ordenadamente la conexión con el rastreador. Guarda los datos y establece
self.connected
en Falso.
función eyetracker.conectado()
Verifica si el rastreador está conectado.
Devuelve:
Verdadero si la conexión está establecida, Falso si no; establece
self.connected
en el mismo valor.
- Tipo: bool
función eyetracker.dibujar_objetivo_de_calibración(x, y)
Dibuja un objetivo de calibración.
Argumentos:
x
-- La coordenada X- Tipo: int
y
-- La coordenada Y- Tipo: int
función eyetracker.dibujar_objetivo_de_corrección_de_deriva(x, y)
Dibuja un objetivo de corrección de deriva.
Argumentos:
x
-- La coordenada X- Tipo: int
y
-- La coordenada Y- Tipo: int
función eyetracker.corrección_de_deriva(pos=None, fix_triggered=False)
Realiza un procedimiento de corrección de deriva. El comportamiento exacto de esta función en el tipo de seguidor ocular se describe a continuación. Debido a que la corrección de deriva puede fallar, generalmente llamará a esta función en un bucle.
EyeLink:
Presionar 'q' durante la corrección de deriva activará la pantalla de configuración de la cámara. Desde allí, presionar 'q' nuevamente hará que la corrección de deriva falle inmediatamente. Presionar 'escape' dará la opción de abortar el experimento, en cuyo caso se genera una Excepción.
Palabras clave:
pos
-- posición (x, y) del punto de fijación o Ninguna para una fijación central.- Tipo: tupla, NoneType
- Predeterminado: None
fix_triggered
-- Booleano que indica si la verificación de deriva se debe realizar en función de la posición de la mirada (Verdadero) o espacio presionado (Falso).- Tipo: bool
- Predeterminado: False
Devuelve:
Un booleano que indica si la verificación de deriva está bien (Verdadero) o no (Falso).
- Tipo: bool
función eyetracker.corrección_de_deriva_activada_por_fijación(pos=None, min_samples=30, max_dev=60, reset_threshold=10)
Realiza una corrección de deriva activada por fijación al recopilar un número de muestras y calcular la distancia media desde la posición de fijación
Palabras clave:
pos
-- posición (x, y) del punto de fijación o Ninguna para una fijación central.- Tipo: tupla, NoneType
- Predeterminado: None
min_samples
-- La cantidad mínima de muestras después de las cuales se calcula una desviación media.- Tipo: int
- Predeterminado: 30
max_dev
-- La desviación máxima de la fijación en píxeles.- Tipo: int
- Predeterminado: 60
reset_threshold
-- Si la distancia horizontal o vertical en píxeles entre dos muestras consecutivas es mayor que este umbral, la colección de muestras se reinicia.- Tipo: int
- Predeterminado: 10
Devoluciones:
Un booleano que indica si la verificación de deriva está bien (True) o no (False).
- Tipo: bool
función eyetracker.get_eyetracker_clock_async()
Devuelve la diferencia entre el tiempo del rastreador y el tiempo de PyGaze, que se puede utilizar para sincronizar el tiempo
Devoluciones:
La diferencia entre el tiempo del rastreador de ojos y el tiempo de PyGaze.
- Tipo: int, float
función eyetracker.log(msg)
Escribe un mensaje en el archivo de registro.
Argumentos:
msg
-- Un mensaje.- Tipo: str, unicode
función eyetracker.log_var(var, val)
Escribe el nombre y valor de una variable en el archivo de registro
Argumentos:
var
-- Un nombre de variable.- Tipo: str, unicode
val
-- Un valor de variable
función eyetracker.pupil_size()
Devuelve la muestra de tamaño de pupila más reciente; el tamaño puede medirse como el diámetro o el área de la pupila, dependiendo de su configuración (tenga en cuenta que el tamaño de la pupila en su mayoría se proporciona en unidades arbitrarias).
Devoluciones:
Devuelve el tamaño de la pupila para el ojo que se está rastreando actualmente (según lo especificado por self.eye_used) o -1 cuando no se pueden obtener datos.
- Tipo: int, float
función eyetracker.sample()
Devuelve la posición de mirada más reciente disponible.
Devoluciones:
Una tupla (x, y) o una (-1, -1) en caso de error.
- Tipo: tupla
función eyetracker.send_command(cmd)
Envía directamente un comando al rastreador de ojos (no compatible con todas las marcas; podría producir un mensaje de advertencia si su configuración no admite comandos directos).
Argumentos:
cmd
-- El comando que se enviará al rastreador de ojos.- Tipo: str, unicode
función eyetracker.set_detection_type(eventdetection)
Establece el tipo de detección de eventos en algoritmos PyGaze u algoritmos nativos proporcionados por el fabricante (solo si disponibles: el tipo de detección predeterminará a PyGaze si no hay funciones nativas disponibles)
Argumentos:
eventdetection
-- Una cadena que indica qué tipo de detección debe emplearse: 'pygaze' para Algoritmos de detección de eventos PyGaze o 'nativo' para algoritmos de fabricantes (solo si está disponible; predeterminará a 'pygaze' si no la detección de eventos nativos está disponible)- Tipo: str, unicode
Devoluciones:
Tipo de detección para sacudidas, fijaciones y parpadeos en una tupla, por ejemplo ('pygaze','native','native') cuando se pasó 'native', pero la detección nativa no estaba disponible para la detección de sacudidas.
- Tipo: tupla
función eyetracker.set_draw_calibration_target_func(func)
Especifica una función personalizada para dibujar el objetivo de calibración. Esta función anulará el [draw_calibration_target] predeterminado.
Argumentos:
func
-- La función para dibujar un objetivo de calibración. Esta función debe aceptar dos parámetros, para las coordenadas x e y del objetivo.- Tipo: función
función eyetracker.set_draw_drift_correction_target_func(func)
Especifica una función personalizada para dibujar el objetivo de corrección de deriva. Esta función anulará el [draw_drift_correction_target] predeterminado.
Argumentos:
func
-- La función para dibujar un objetivo de corrección de deriva. Esta función debe aceptar dos parámetros, para las coordenadas x e y del objetivo.- Tipo: función
función eyetracker.set_eye_used()
Registra la variable eye_used
, según el ojo especificado (si se rastrean ambos ojos, se utiliza el ojo izquierdo). No devuelve nada.
función eyetracker.start_recording()
Comienza la grabación. Establece self.recording
en True
cuando la grabación se inicia con éxito.
función eyetracker.status_msg(msg)
Envía un mensaje de estado al rastreador ocular, que se muestra en la GUI del rastreador (solo disponible para configuraciones de EyeLink).
Argumentos:
msg
-- Una cadena que se mostrará en la PC del experimentador, por ejemplo: "ensayo actual: %d" % trialnr.- Tipo: str, unicode
función eyetracker.stop_recording()
Detiene la grabación. Establece self.recording
en False
cuando la grabación se detiene con éxito.
función eyetracker.wait_for_blink_end()
Espera el final de un parpadeo y devuelve el tiempo de finalización del parpadeo. Detección basada en Dalmaijer et al. (2013) si EVENTDETECTION está configurado para 'pygaze', o utilizando funciones de detección nativas si EVENTDETECTION está configurado para 'nativo' (NOTA: ¡no todos los sistemas tienen funcionalidad nativa; volverá a ;pygaze' si 'native' no está disponible!)
Devuelve:
Tiempo de finalización del parpadeo en milisegundos, medido desde el inicio del experimento.
- Tipo: int, float
función eyetracker.wait_for_blink_start()
Espera el inicio de un parpadeo y devuelve el tiempo de inicio del parpadeo. Detección basada en Dalmaijer et al. (2013) si EVENTDETECTION está configurado para 'pygaze', o utilizando funciones de detección nativas si EVENTDETECTION está configurado para 'nativo' (NOTA: ¡no todos los sistemas tienen funcionalidad nativa; volverá a ;pygaze' si 'native' no está disponible!)
Devuelve:
Tiempo de inicio del parpadeo en milisegundos, medido desde el inicio del experimento
- Tipo: int, float
función eyetracker.wait_for_event(event)
Espera un evento.
Argumentos:
-
event
-- Un código de evento entero, uno de los siguientes: -
3 = STARTBLINK
- 4 = ENDBLINK
- 5 = STARTSACC
- 6 = ENDSACC
- 7 = STARTFIX
- 8 = ENDFIX
- Tipo: int
Devuelve:
Se llama a un método self.wait_for_*
, según el evento especificado; se devuelve el valor de retorno del método correspondiente.
función eyetracker.wait_for_fixation_end()
Devuelve el tiempo y la posición de la mirada cuando termina una fijación; la función supone que una 'fijación' ha terminado cuando se detecta una desviación de más de self.pxfixtresh desde la posición inicial de fijación (self.pxfixtresh se crea en self.calibration, basado en self.fixtresh, una propiedad definida en self.init). Detección basada en Dalmaijer et al. (2013) si EVENTDETECTION está configurado para 'pygaze', o utilizando funciones de detección nativas si EVENTDETECTION está configurado para 'nativo' (NOTA: ¡no todos los sistemas tienen funcionalidad nativa; volverá a ;pygaze' si 'native' no está disponible!)
Devuelve:
Una tupla time, gazepos
. Time es el tiempo final en milisegundos (desde expstart), gazepos es una tupla de posición de la mirada (x,y) de la posición desde la cual se inició la fijación.
- Tipo: tupla
función eyetracker.wait_for_fixation_start()
Devuelve el tiempo de inicio y posición cuando comienza una fijación; la función asume que una 'fijación' ha comenzado cuando la posición de la mirada permanece razonablemente estable (es decir, cuando la mayoría de las muestras más desviadas se encuentran dentro de self.pxfixtresh) durante cinco muestras seguidas (self.pxfixtresh se crea en self.calibration, basado en self.fixtresh, una propiedad definida en self.init). Detección basada en Dalmaijer et al. (2013) si EVENTDETECTION está configurado en 'pygaze' o utilizando funciones de detección nativas si EVENTDETECTION está configurado en 'native' (NOTA: ¡no todos los sistemas tienen funcionalidad nativa; volverá a 'pygaze' si 'native' no está disponible!)
Devuelve:
Una tupla tiempo, gazepos
. El tiempo es el tiempo de inicio en milisegundos (desde expstart), gazepos es una tupla de posición de la mirada (x,y) desde la cual se inició la fijación.
- Tipo: tupla
función eyetracker.wait_for_saccade_end()
Devuelve el tiempo de finalización, la posición inicial y final cuando termina un sacádico; basado en el algoritmo de detección de sacádicos en línea de Dalmaijer et al. (2013) si EVENTDETECTION está configurado en 'pygaze', o utilizando funciones de detección nativas si EVENTDETECTION está configurado en 'native' (NOTA: no todos los sistemas tienen funcionalidad nativa; volverá a 'pygaze' si 'native' no está disponible!)
Devuelve:
Una tupla de endtime, startpos, endpos
. Endtime en milisegundos (desde expbegintime); startpos y endpos son tuplas de posición de la mirada (x,y).
- Tipo: tupla
función eyetracker.wait_for_saccade_start()
Devuelve el tiempo de inicio y la posición inicial cuando comienza un sacádico; basado en el algoritmo de detección de sacádicos en línea de Dalmaijer et al. (2013) si EVENTDETECTION está configurado en 'pygaze', o utilizando funciones de detección nativas si EVENTDETECTION está configurado en 'native' (NOTA: no todos los sistemas tienen funcionalidad nativa; volverá a 'pygaze' si 'native' no está disponible!)
Devuelve:
Una tupla de endtime, startpos
. Endtime en milisegundos (desde expbegintime); startpos es una tupla de posición de la mirada (x,y).
- Tipo: tupla