Skip to main content

A Python-based framework for Tobii eye tracker experiments and multimodal interaction.

Project description

Toolkit for AI-enhanced Eye-tracking data collection

This toolkit allows to conduct scientific researches of human classification visual aspect by gathering human gaze data on 2 different types of data. It's modality is defined for images and text. The graphical interface uses PsychoPy library and is created dynamically from a dataset with a strict structure. Main config file allows to override values for different PsychoPy research environments which grants more control over received results. Processing pipeline can be extended with a custom model for additional prediction data to compare with human classification. The data of human eye gaze, as well as average pupil size, is collected with Tobbii eyetracker and saved to a file with the rest of results.

Alt text

Table of Contents

Requirements

Installation

  1. Clone or download this repository to your local machine.

    conda create --name pytracker-env python=3.10
    conda activate pytracker-env
    git clone https://github.com/sbobek/tobii-pytracker.git
    cd tobii-pytracker
    pip install .
    

    Install psychopy, with no-deps, to keep the installation simple and lightweight. Note that we need psychopy in a version at least 2024.1.4

    pip install psychopy>=2024.1.4 --no-deps
    

Usage

  1. To run the script, use the following command (make sure you have activated virtual environment):

    tobii-pytracker
    

*Make sure to connect eyetracker to your device before running the script with --enable_eyetracker=True, otherwise it will fail.

  1. Additionally you can specify a few arguments:
    • --config_file - Path to YAML script config file - (default = configs/config/config.yaml)
    • --eyetracker_config_file - Path to YAML eyetracker config file - (default = configs/config/eyetracker_config.yaml)
    • --enable_eyetracker - Launch script with launchHubServer (needs connected eyetracker if set to True) - (default = False)
    • --enable_model - Extend processing for custom YOLO model predictions (only for images) - (default = False)
    • --enable_voice - Additionally start recording voice for Think-Aloud-Protocol - (default = False)
    • --loop_count - Number of times that different data will be displayed before the script exits - (default = 10)
    • --log_level - Main logger level ("info", "debug", "warning", "error", "critical") - (default = info)

For more information and usage you can run python main.py --help

Datasets

Different datasets can be specified in the config file that will be processed and displayed in the PsychoPy window. They must be downloaded locally on the device where the script is run and follow these structure rules:

  1. Image datasets (.png, .jpg, .jpeg, .bmp, .gif):

    ├── dataset
    │   ├── category1
    │   │   ├──file1.jpg
    │   │   ├──file2.jpg
    │   │   └──...
    │   ├── category2
    │   │   ├──file1.jpg
    │   │   ├──file2.jpg
    │   │   └──...
    │   └── ...
    └── ...
    

    NOTE: GUI will be created accordingly to this structure and class labels will be extracted from subfolder names within the dataset. If using custom model, remember to make them match class names.

  2. Text datasets (.csv):

    ├── dataset.csv
    └── ...
    

    NOTE: The first line in .csv file MUST be a header. The GUI will take unique label values from a column with a name specified in config file.

Custom Model

The CustomModel class (located in models/custom_model.py) serves as an abstract base class. It defines the essential methods that any custom model implementation must provide. By inheriting from CustomModel and implementing these methods, your custom model can seamlessly interact with the rest of the toolkit:

  • prepare_model(self): Load and prepare model for prediction
  • predict(self, input_data): Run prediction with the loaded model
  • process(self, path): Post-process the prediction and return formatted results

Creating Your Own Model Modules

To create your own model module:

  1. Create a new Python file within the specified directory (e.g., models/my_custom_model.py).

  2. Import the CustomModel class:

from models.custom_model import CustomModel
  1. Define a new class that inherits from CustomModel:
class MyCustomModel(CustomModel):

  def prepare_model(self):
    # Load and prepare model for prediction
    self.logger.debug("Preparing MyCustomModel...")
    self.model = ...
    self.logger.debug("Model preparation done.")

  def predict(self, input_data):
    # Run prediction with the loaded model
    predictions = ...
    return predictions

  def process(self, data):
    # Post-process the prediction and return formatted results
    predictions = self.predict(data)
    processed_predictions = ...
    return processed_predictions

Keep in mind that main processing pipeline uses the process() method to save processed model predictions.

Configuration

The script requires two configuration files in YAML format: one for general settings and another for eye tracker settings. By default, the configuration files are located in `configs`` directory.

General Configuration (config.yaml)

The general configuration file should include the following fields:

dataset:
  path: path/to/dataset
display:
  monitor:
    name: monitor_name
    resolution:
      - width
      - height
    width: monitor_width
    distance: distance_from_monitor
  gui:
    button:
      size:
        - size_x
        - size_y
      color: color
      text:
        color: text_color
        size: text_size
      fixation_dot: 
        size: radius_of_a_dot
        color: dot_color
    aoe:
      - size_x
      - size_y
output:
  folder: folder
  file: file
model:
  folder: folder
  module: module
  class: class
  filename: filename


instructions:
  intro:
    - "Introductory message."
    - "Press SPACE to begin."
  outro:
    - "Message for the end of the study."
    - "You may now close the window or press ESC to exit."

NOTE: If using a dataset with text data, the path should be specified for a file in a .csv format, as well as additional text field:

dataset:
  path: path/to/file.csv
  text:
    label_column_name: label_column_name
    text_column_name: text_column_name

Eye Tracker Configuration (eyetracker_config.yaml)

The eye tracker configuration file should include the fields required by launchHubServer from the psychopy.iohub module. Refer to the PsychoPy documentation for more details on the specific settings.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tobii_pytracker-0.1.1.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tobii_pytracker-0.1.1-py3-none-any.whl (21.5 kB view details)

Uploaded Python 3

File details

Details for the file tobii_pytracker-0.1.1.tar.gz.

File metadata

  • Download URL: tobii_pytracker-0.1.1.tar.gz
  • Upload date:
  • Size: 21.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for tobii_pytracker-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d69aaa80acf86abdff6dc95dd4d5828f59e89bdf1eeb914695efb98d315f13f1
MD5 94b827b7a7d5c1cb5c12355f30643890
BLAKE2b-256 1480c7e8d465d27fe5259d116386c82d7d4fffbc7605cd658859ba517f7cffa5

See more details on using hashes here.

File details

Details for the file tobii_pytracker-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for tobii_pytracker-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5d8849c51921b36c1acf5e6c04cb7924ab2a531ba09425caedc943635396842f
MD5 0e421cf6f064db1aa178ba0f12819396
BLAKE2b-256 f3c9b0240e8722661daa645f9a9f0d1b39af65be4e55769e8f664f3ffd2a1ade

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page