OpenSesame
Rapunzel Code Editor
DataMatrix
Support forum
Python Tutorials
MindProbe
OpenSesame videos
Python videos
Supported by

PyGaze (seguimiento ocular)

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_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
Supported by