用于眼睛跟踪的端到端python分析工具包

PyTrack-NTU的Python项目详细描述


documentation status构建状态codecovdocumentation status

pytrack

这是一个分析和可视化眼睛跟踪数据的工具包。它提供以下功能:

特征提取

这包括提取与眨眼、注视、眼跳、微距和瞳孔直径相关的参数或元数据。提取的特征如下:

<表><广告>闪烁固定装置 扫视 微访问 瞳孔 重新访问AOI/ROI < /广告><正文>计数计数计数计数尺寸计数平均持续时间平均持续时间速度速度达到峰值的时间首次通过持续时间最长持续时间最长持续时间振幅振幅峰值大小第二遍持续时间持续时间持续时间平均尺寸坡度曲线下面积

统计分析

特征提取后,pytrack可以进行student t检验、welch t检验、方差分析、rmanova、n-way方差分析和混合方差分析。可以指定组间和组内因素。

可视化

pytrack可以生成多种图。可视化是通过一个交互式的图形用户界面。可以生成的绘图如下:

  1. 固定图
  2. 个体被试注视热图
  3. 聚合对象注视热图
  4. 动态瞳孔大小和注视图
  5. 微卫星位置和速度图
  6. 微卫星主序列图

目录

文档

pytrack方法和类的详细文档可以在这里找到

安装

pytrack是为python3建造的,因为对python2的支持将在2019年底停止。要安装pytrack,请使用以下任一选项:

python3 -m pip install PyTrack-NTU
pip install PyTrack-NTU
pip3 install PyTrack-NTU

请确保pip是针对python3而不是python2。蟒蛇3可以在这里找到,或者蟒蛇3可以在这里找到。

注意:python3可以与python2一起安装

示例数据

为了测试工具包,可以在这里找到SMI、Eyelink和TOBII格式的一些示例数据。文件夹中的.txt文件描述了找到的数据。SMI和TOBII文件取自此处

使用pytrack

设置

在运行框架之前,让我们设置文件夹,以便pytrack可以在一个中心位置读取和保存所有生成的图形,并对其进行组织。

创建如下所示的目录结构。为了使pytrack正常工作,列出的目录必须存在。

注意:样本数据有一个名为"NTU实验"的文件夹,该文件夹已按以下方式组织。它可以作为参考。

[Experiment-Name]
|
â""â"€â"€ Data/
â"‚   â"‚   subject_001.[asc/txt/tsv/...]
â"‚   â"‚   subject_002.[asc/txt/tsv/...]
|   |__ ......
â"‚
â""â"€â"€ Stimulus/
â"‚   â"‚   stim_1.[jpg/jpeg]
â"‚   â"‚   stim_2.[jpg/jpeg]
|   |__ ......
|
â""â"€â"€ [Experiment-Name].json

[实验名称]代表您的实验名称。其余步骤将使用NTU实验作为[实验名称]文件夹。

现在,请执行以下步骤:

  1. 将所有受试者的数据放在数据文件夹下的NTU实验主文件夹下。确保每个数据文件的名称都是主题/参与者的名称。将所有空格()替换为下划线(。

    例如,华夫饼饼.asc受试者.asc

  2. 为了正确地显示凝视数据,最好将实验中呈现的刺激包含在stimuli文件夹中。确保图像具有jpg、jpeg或png扩展名,并且名称与记录数据中的刺激名称相匹配。

    例如,stim_1.jpgrandom_picture.png

  3. 设置实验目录的最后一步也是最后一步是包含实验描述json文件。这个文件应该包含实验的基本细节。它包含关于你的实验的规范,比如你想要分析的刺激物或者你想要包括的参与者/受试者。下面提到的是json文件结构。下面的内容可以复制并粘贴到一个名为ntu\experience.json的文件中。

    • "实验名"应与不带扩展名的json文件同名,"路径"应是到实验目录的绝对路径,结尾不带最后的"/"。
    • 应在"主题"字段下添加主题。您可以为受试者指定一个或多个分组(建议用于组间统计分析)。必须至少有一个组
    • 刺激物的名字应该加在下面"刺激"字段,然后您可以再次指定一个或多个类型(建议用于刺激类型之间/内部的统计分析)。必须至少有一种类型
    • "控制问题"字段是可选的。如果您有一些刺激物,应该用来标准化/标准化从所有刺激物中提取的特征,请在此处指定名称。这些刺激必须出现在其中一种类型下的"刺激"字段下
    • 标记为"感兴趣的列"的字段不应更改。
    • 在"分析参数"下,只需更改"采样频率"、"显示高度"和"显示宽度"的值即可与实验值匹配。

    注意:如果您只想分析刺激或主题的一个子集,请在json文件中只指定感兴趣的部分。分析和可视化将只对json文件中提到的那些进行。

注意:示例数据中的ntu_u实验文件夹中存在一个示例json文件。您可以编辑它使您的工作更简单。

{"Experiment_name":"NTU_Experiment","Path":"abcd/efgh/NTU_Experiment","Subjects":{"group1":["Subject_01","Subject_02"],"group2":["Subject_03","Subject_04"]},"Stimuli":{"Type_1":["Stim_1","Stim_2"],"Type_2":["Stim_3","Stim_4"],},"Control_Questions":["Stim_1"],"Columns_of_interest":{"EyeTracker":["GazeLeftx","GazeLefty","GazeRightx","GazeRighty","PupilLeft","PupilRight","FixationSeq","GazeAOI"],"Extra":["EventSource"]},"Analysis_Params":{"EyeTracker":{"Sampling_Freq":1000,"Display_width":1920,"Display_height":1280}}}

运行pytrack

注意:下面显示的所有样本段都是样本数据中的NTU实验文件夹。

  1. 为了使用这些功能,第一步是将原始数据转换为可读格式。为此,可以使用以下代码段:

    fromPyTrack.formatBridgeimportgenerateCompatibleFormat# For windows the path will look like #    a. exp_path="complete\\path\\to\\NTU_Experiment"# or b. exp_path=r"complete\path\to\NTU_Experiment"generateCompatibleFormat(exp_path="complete/path/to/NTU_Experiment",device="eyelink",stim_list_mode='NA',start='start_trial',stop='stop_trial',eye='B')

    要详细了解GenerateCompatibleFormats的参数并根据需要对其进行修改,请参见文档此处

  2. 第二步是创建实验类的对象

    fromPyTrack.ExperimentimportExperiment# Creating an object of the Experiment classexp=Experiment(json_file="complete/path/to/NTU_Experiment/NTU_Experiment.json")
  3. 现在您可以运行特征提取和统计测试

    # Instantiate the meta_matrix_dict of an Experiment to find and extract all features from the raw dataexp.metaMatrixInitialisation()# Calling the function for the statistical analysis of the dataexp.analyse(parameter_list={"all"},between_factor_list=["Subject_type"],within_factor_list=["Stimuli_type"],statistical_test="anova",file_creation=True)# Does not run any statistical test. Just saves all the data as csv files.exp.analyse(parameter_list={"all"},statistical_test="None",file_creation=True)

    要详细了解analyse函数的参数,请点击此处

    要详细了解metamatrixinitialization函数的参数,请点击这里

  4. 用于可视化

    # This function call will open up a GUI which you can use to navigate the entire visualization processexp.visualizeData()

高级功能

统计检验

实验类包含一个名为analyze()的函数,该函数用于执行统计分析(例如:方差分析或t检验),默认情况下,只考虑1个组内因素(subject_type)和1个组内因素(stimuli_type)。如果需要考虑其他因素,则需要将它们添加到json文件中。

  • 例如,如果要将性别视为组间因子,那么在json文件的"subjects"下,对于每个主题,必须创建一个相应的dicitionary,其中提到因子名和相应的值。还请注意,组类型后的方括号('[',']')需要更改为花括号('{','}')。

  • 类似地,对于刺激,例如,如果您显示文字和图片以引起用户的不同反应,并且您另外具有两个不同的亮度级别("高"和"低"),则将亮度作为组内因素提及。

{"Subjects":{"group1":{"Subject_01":{"Gender":"M"},"Subject_02":{"Gender":"F"}},"group2":{"Subject_03":{"Gender":"F"},"Subject_04":{"Gender":"M"}}},"Stimuli":{"Type_1":{"Stim_1":{"Brightness":"High"},"Stim_2":{"Brightness":"Low"}},"Type_2":{"Stim_3":{"Brightness":"Low"},"Stim_4":{"Brightness":"High"}},},}

使用高级统计测试的示例代码段:

fromPyTrack.ExperimentimportExperimentexp=Experiment(json_file="abcd/efgh/NTU_Experiment/NTU_Experiment.json")exp.metaMatrixInitialisation()exp.analyse(parameter_list={"all"},between_factor_list=["Subject_type","Gender"],within_factor_list=["Stimuli_type","Brightness"],statistical_test="anova",file_creation=True)

将提取的特征作为字典访问

如果您希望获取特定刺激下特定对象的提取特征:

python3 -m pip install PyTrack-NTU
pip install PyTrack-NTU
pip3 install PyTrack-NTU
0

在独立模式下使用pytrack

独立设计只需要与刺激类交互。如果要提取特征,建议使用此选项或仅对一个受试者的特定刺激的数据进行可视化。

python3 -m pip install PyTrack-NTU
pip install PyTrack-NTU
pip3 install PyTrack-NTU
1

有关函数的更多详细信息,请参见stimulators类:此处

作者

另请参见参与此项目的贡献者列表。

许可证

此项目在GPL3许可下获得许可-有关详细信息,请参见license.txt文件

致谢

  • 感谢dominique makowski博士帮助我们开发这个工具包。

  • formatsBridge模块改编自edwin dalmaijerpygazeanalyser中所做的工作。

  • 这项工作是在新南威尔士大学计算机科学与工程学院的Chng Eng Siong博士的监督下,并与新南威尔士大学计算机科学与工程学院的XuHong博士合作完成的。人文社会科学南大。

  • 感谢计算机科学与工程系和计算机系。科学和信息系统BITS PILANI,海得拉巴校区

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用户界面java,使用gui连接到另一台计算机/服务器的文件系统   运行sbt的ubuntu返回错误:“javahome需要<path>参数”   java如何在Android中处理许多ImageView而不出现内存问题?   查询中非法字符的java相同URL失败   安卓取消引用可能会产生“java”。lang.NullPointerException'   java中的indexoutofboundsexception“java.lang.ArrayIndexOutOfBoundsException”错误   xml Java将dom保存到文件>文件在程序结束后由另一个进程打开   Java的垃圾收集器是如何工作的?   Java如何筛选值(列表)   java处理字符串我怎样才能像在真实的书籍中一样在上面部分生成“小数字”呢?   java SonarQube是否有一个API来获取所有项目分析的一部分?   java startActivity(intent)什么都不做   JAVAutil。扫描器类Java   java如何从Firebase更新电子邮件?UpdateMail方法已被弃用   java Hibernate。如何正确组织带有注释的onetomany关系?   在java中获得卷标和驱动器号之间的映射(而不是FileSystemView)的解决方法是什么   java查找文件的路径