6

我正在努力将精神病学实验与 eyelink 眼动追踪系统相结合。这样做的方法似乎是通过 pylink。不幸的是,我对 pylink 真的不熟悉,我希望有一个将两者结合起来的实验样本。我一直找不到。如果有人能够分享一个示例或将我指向一个比 sr-research 提供的 pylink api 更易于访问的手册,我将非常感激。

谢谢!

4

3 回答 3

9

我很高兴您找到了解决方案。我没有使用 iohub,但我们确实使用了psychopy 和 eyelink,因此以下一些代码可能对希望调用更直接通信的其他人有用。请注意,我们的计算机使用 Archlinux。如果以下内容对您没有任何意义,请不要担心,但也许它会帮助那些在与我们相同的道路上磕磕绊绊的其他人。

实验机与眼动仪的通讯

首先,您必须与 eyelink 建立通信。如果您的实验机器已打开并插入实时的 Eyelink 计算机,那么在 Linux 上,您必须首先设置您的以太网卡,然后设置 Eyelink 使用的默认地址(这也适用于 Eyelink 1000 - 他们保持相同的地址)。请注意,您的以太网名称可能与 enp4s0 不同。简单地尝试ip link并寻找类似的东西。注意:这些命令正在输入终端。

#To set up connection with Eyelink II computer:
#ip link set enp4s0 up
#ip addr add 100.1.1.2/24 dev enp4s0

眼动仪功能

我们发现编写一些与 Eyelink 计算机对话的函数很方便。例如:

初始化眼动仪

sp指的是screenx,screeny大小的元组。

def eyeTrkInit (sp):
        el = pl.EyeLink()
        el.sendCommand("screen_pixel_coords = 0 0 %d %d" %sp)
        el.sendMessage("DISPLAY_COORDS  0 0 %d %d" %sp)
        el.sendCommand("select_parser_configuration 0")
        el.sendCommand("scene_camera_gazemap = NO")
        el.sendCommand("pupil_size_diameter = %s"%("YES"))
        return(el)

注意:pl函数来自import pylink as pl. 另外,请注意,您可以在线找到另一个名为 pylink 的 Python 库。它可能不是你想要的那个。浏览 Eyelink 论坛并从那里获取 pylink。它很旧,但它仍然有效。

校准眼动仪

el是上面初始化的眼球追踪器对象的名称。sp屏幕尺寸,cd颜色深度,例如 32。

def eyeTrkCalib (el,sp,cd):
     pl.openGraphics(sp,cd)
     pl.setCalibrationColors((255,255,255),(0,0,0))
     pl.setTargetSize(int(sp[0]/70), int(sp[1]/300)) 
     pl.setCalibrationSounds("","","")
     pl.setDriftCorrectSounds("","off","off")
     el.doTrackerSetup()
     pl.closeGraphics()
     #el.setOfflineMode()

打开数据文件

您可以与眼动仪交谈并执行诸如打开文件之类的操作

def eyeTrkOpenEDF (dfn,el):
     el.openDataFile(dfn + '.EDF')

漂移校正

或漂移正确

def driftCor(el,sp,cd):
    blockLabel=psychopy.visual.TextStim(expWin,text="Press the space bar to begin drift correction",pos=[0,0], color="white", bold=True,alignHoriz="center",height=0.5)
    notdone=True            
    while notdone:
        blockLabel.draw()
        expWin.flip()
        if keyState[key.SPACE] == True:
            eyeTrkCalib(el,sp,cd)
            expWin.winHandle.activate()
            keyState[key.SPACE] = False
            notdone=False

发送和接收消息。

您可以设置许多内置变量,也可以添加自己的变量。这是从您的 python 程序向 eyelink 发送消息的示例

eyelink.sendMessage("TRIALID "+str(trialnum))
    eyelink.startRecording(1,1,1,1)

eyelink.sendMessage("FIX1")
    tFix1On=expClock.getTime()

凝视特遣队编程

这是一些代码的一部分,它在实验程序的逻辑中使用了 eyelink 的最新示例。

while notdone:
            if recalib==True:
                dict['recalib']=True
                eyelink.sendMessage("RECALIB END")
                eyelink.startRecording(1,1,1,1)
                recalib=False
            eventType=eyelink.getNextData()
            if eventType==pl.STARTFIX or eventType==pl.FIXUPDATE or eventType==pl.ENDFIX:
                sample=eyelink.getNewestSample()
        
                if sample != None:
                    if sample.isRightSample():
                        gazePos = sample.getRightEye().getGaze()
                    if sample.isLeftSample():
                        gazePos = sample.getLeftEye().getGaze()
            
                gazePosCorFix = [gazePos[0]-scrx/2,-(gazePos[1]-scry/2)]
                
                posPix = posToPix(fixation)
                eucDistFix = sqrt((gazePosCorFix[0]-posPix[0])**2+(gazePosCorFix[1]-posPix[1])**2)
            
                if eucDistFix < tolFix:
                    core.wait(timeFix1)
                    notdone=False
                    eyelink.resetData()
                    break

快乐黑客。

于 2016-02-01T15:04:07.407 回答
8

而不是 PyLink,您可能想研究在 PsychoPy 中使用 ioHub 系统。这是一个更通用的眼动追踪系统,它还允许以通用格式保存数据(与 PsychoPy 事件集成),并提供用于数据分析和可视化的工具。

ioHUb 与您正在使用的特定眼动仪无关。您只需要创建一个特定于您的 EyeLink 系统的配置文件,然后使用 ioHiv 提供的通用功能进行校准、实时访问眼动数据等。

这里有一些教学资源:http ://www.psychopy.org/resources/ECEM_Python_materials.zip

于 2016-01-28T21:42:46.360 回答
1

对于未来的读者,我想分享我的库以结合 pylink 和psychopy。我最近更新了它以使用 python 3。它提供了简单易用的高级功能。

https://github.com/colinquirk/templateexperiments/tree/master/eyelinker

您还可以在较低级别的PsychoPyCustomDisplay课程中工作(有关更多信息,请参阅 pylink 文档EyeLinkCustomDisplay)。

有关它的使用示例,请参见:

https://github.com/colinquirk/ChangeDetectionEyeTracking

(在撰写本文时,此实验代码尚未准备好 python 3,但它应该仍然是一个有用的示例。)

该 repo 还包括用于创建实验和记录 EEG 数据的其他模块,但如果您只是对 eyelinker 代码感兴趣,则它们不是必需的。

于 2019-12-22T01:25:11.297 回答