Skip to content
Snippets Groups Projects
gazerecording.py 2.7 KiB
Newer Older
Maxence Grand's avatar
Maxence Grand committed
#!/usr/bin/env python3.8

import tobii_research as tr
from utils import timestamp
from utils import sleep
import math
import csv

global all_data

all_data = []

class Recorder:
    def __init__(self, tracker, filename="tmp.csv"):
        self.tracker = tracker
        self.tracker.subscribe_to(tr.EYETRACKER_GAZE_DATA,\
                                        self.gaze_data_callback,\
                                        as_dictionary=True)
        self.filename = filename
        self.continueToGet = True
    def gaze_data_callback(self, gaze_data):
        gaze_data['timestamp'] = timestamp()
        """Fonction qui est appelée à l'acquisition de chaque frame"""
        if (gaze_data['left_gaze_point_validity'] == 1 and gaze_data['right_gaze_point_validity']):
            gaze_data['x'] = round(
                (gaze_data['left_gaze_point_on_display_area'][0] + gaze_data['right_gaze_point_on_display_area'][0]) / 2, 2)
            gaze_data['y'] = round(
                (gaze_data['left_gaze_point_on_display_area'][1] + gaze_data['right_gaze_point_on_display_area'][1]) / 2, 2)

        elif (gaze_data['left_gaze_point_validity'] == 1 and gaze_data['right_gaze_point_validity'] == 0):
            gaze_data['x'] = gaze_data['left_gaze_point_on_display_area'][0]
            gaze_data['y'] = gaze_data['left_gaze_point_on_display_area'][1]

        elif (gaze_data['left_gaze_point_validity'] == 0 and gaze_data['right_gaze_point_validity'] == 1):
            gaze_data['x'] = gaze_data['right_gaze_point_on_display_area'][0]
            gaze_data['y'] = gaze_data['right_gaze_point_on_display_area'][1]


        else:
            gaze_data['x'] = float("nan")
            gaze_data['y'] = float("nan")
            all_data.append([gaze_data["timestamp"], gaze_data["x"], gaze_data["y"]])
            return

        all_data.append([gaze_data["timestamp"], gaze_data["x"], gaze_data["y"]])
        print([gaze_data["timestamp"], gaze_data["x"], gaze_data["y"]])
        return

    def finish(self):
        print("Write data to file %s ...\n" % self.filename)
        self.tracker.unsubscribe_from(tr.EYETRACKER_GAZE_DATA,\
                                        self.gaze_data_callback)
        with open(self.filename, 'w') as f:
            writer = csv.writer(f)
            writer.writerow(["Timestamp", "x", "y"])
            for row in all_data:
                if len(row) > 0:
                    writer.writerow(row)
        print("Done.\n")

def record(tracker, filename="tmp.csv"):
    recorder = Recorder(tracker, filename=filename)
    while(recorder.continueToGet):
        try:
            sleep()
            continue
        except KeyboardInterrupt:
            recorder.continueToGet = False
    recorder.finish()