0

我是 python 以及科学实验设置的新手。我的实验设置包括向受试者展示一些用 Python 编程的视觉刺激。当受试者看着这些视觉刺激时,他们的眼睛数据将使用眼动仪(Pupil Labs)记录下来。Pupil Labs 是一个开源平台,它还提供了使用 TCP 套接字向服务器广播数据(即注视或眼球运动)的设施。

现在我计划记录所有数据,例如显示特定刺激的时间以及记录从服务器接收到的眼球运动数据。问题是同步这两件事,比如在特定时间显示一些“xyz”刺激,我想记录在那个特定时间眼睛数据到底是什么。

我正在用 Python 编写代码,到目前为止,发生的事情是有一个使用psychopy 库显示刺激的主程序。在那个主程序中有一个从服务器接收数据的线程。

我想知道如何同步这个任务。我对这样的任务很陌生,我也不确定通过互联网寻找什么。我会很感激你的帮助。

4

1 回答 1

1

查看文档,Pupil Labs 眼动追踪事件具有 由计算机上的系统时钟设置的时间戳,相对于某个纪元时间(在 unix 系统上为 1970 年 1 月 1 日)。同样,您可以在 pychopy 中找到事件的时间戳,这些时间戳将显示在您的实验日志中。

收集数据后,读入瞳孔数据并将其转换为 numpy 数组(瞳孔时间、瞳孔 x 和瞳孔 y)。接下来加载您的 pyschopy 数据。pyschopy 中的时间戳可能相对于实验的开始存储,在这种情况下,您必须将实验开始时间添加到刺激呈现时间(开始时间应该在存储数据的某处可用)。

给定瞳孔时间、瞳孔 x、瞳孔 y 数组,您可以在实验期间绘制瞳孔运动:

import matplotlib.pyplot as plt
import numpy as np

# time since stimulus presentation, in seconds
t = np.linspace(0, 4, 400)  

# time since stimulus presentation, relative to pupil data time
abs_t = t + stimulus_presentation_timestamp

# plot interpolated eye position from pupil data
px, py = np.interp(abs_t, pupil_time, pupil_x), np.interp(abs_t, pupil_time, pupil_y)
plt.plot(px, py)
plt.show()

您可能不想对数据进行插值 如果 Pupil Labs 软件仅记录每次扫视后的位置,则使用searchsorted查找时间 t 之前最后记录的瞳孔位置可能更合适。


2016-05-23 更新:使用 t_abs 插值眼睛位置

于 2016-05-22T17:32:39.477 回答