Eye Tracking - Erweiterung für Presentation®
Mit der Erweiterung für Presentation® können Sie den Eye Tracker aus Presentation® heraus steuern und die Blickposition sowie Fixationen und Sakkaden in Echtzeit abfragen. Weiterhin ist es mögich Trigger an den Eye Tracker senden, welche in den Datenstrom synchronisiert einfließen. Somit können Sie Ereignisse wie die Anzeige eines Stimulus mit dem Blickdatenstrom synchronisieren. Blickpositionen, Fixationen, Sakkaden und Trigger werden ebenfalls in Dateien abgelegt und stehen so für eine spätere Auswertung zur Verfügung.
Aus Presentation® heraus können Sie:
- die Datenerfassung starten und beenden
- die Kalibrierung aufrufen
- den Speicherort für die Datendateien festlegen
- Trigger senden (diese werden synchronisiert mit dem Blickdatenstrom gespeichert)
- die aktuelle Blickposition abfragen
- auf Fixationen und Sakkaden zugreifen
Der folgende Quellcode-Ausschnitt demonstriert den Einsatz der genannten Funktionen (Kommunikation mit dem EyeTracker ist gelb hervorgehoben):
begin_pcl;# Eye Tracker Objekt erstellen - dieser Befehl nutzt die installierte Extension mit dem Namen "Eyetracker"
eye_tracker eye = new eye_tracker("Eyetracker");
# Kalibrierung starten
eye.calibrate(et_calibrate_default,0.0,0.0,0.0);
# Speicherort für die Datendateien festlegen (die genaue Syntax ist in der Schnittstellendokumentation erläutert)
eye.send_string("DataFileName=c:\\vp1");
# Datenerfassung starten
eye.start_tracking();
# Stimuli präsentieren und zwischendurch Trigger senden
eye.send_trigger(0);
eye.send_trigger(1);
trial2.present();
eye.send_trigger(2);
trial2.present();
eye.send_trigger(3);
trial2.present();
eye.send_trigger(4);# die Ermittlung von Positionsdaten starten
eye.start_data(dt_position, false);
# die Ermittlung von Fixationsdaten starteneye.start_data(dt_fixation);
# hier könnte ebenfalls die Ermittlung von Sakkadendaten gestartet werden
# eye.start_data(dt_saccade);# Puffer für die aktuelle Blickposition
eye_position_data eyePos;
# Puffer für die aktuelle Fixation
fixation_event_data eyePos2;
# Puffer für die Anzeige der letzten Fixation
int lastX2 = 0;
int lastY2 = 0;# Schleife: kontinuierliche Abfrage der Blickdaten
loop
int k = 1 # Zähler
until
response_manager.last_response() == 2
begin
# Anfragen, ob neue Positionsdaten vorhanden sind
if eye.new_position_data() == 1 then
# Positionsdaten abfragen
eyePos = eye.last_position_data();
# ... Quadrat der Blickposition entsprechend positionieren
square.set_part_x(1, int(eyePos.x()));
square.set_part_y(1, int(eyePos.y()));
square.present();
end;
# Fixationsbehandlung analog zu oben
if eye.new_fixation_events() == 1 then
eyePos2 = eye.last_fixation_event();
lastX2=int(eyePos2.x());
lastY2=int(eyePos2.y());
end;
square2.set_part_x(1, lastX2);
square2.set_part_y(1, lastY2);
square2.present();
end;
# Datenerfassung beenden
eye.stop_tracking();
Der obige Programmausschnitt bewegt zwei Quadrate über den Bildschirm. Die aktuelle Blickposition wird durch
square dargestellt, die letzte Fixationsposition durch square2.