ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

动态刺激物眼动分析:AOI划分、时间对齐与指标计算全攻略

动态刺激物眼动分析:AOI划分、时间对齐与指标计算全攻略 做眼动数据分析的小伙伴应该都有过这种体验被测试者坐在屏幕前看视频眼动仪把注视点坐标一帧一帧地记录下来看似数据很完整但等你真拿到导出表随手打开一看——几千行“时间戳坐标点瞳孔直径”完全不知道该怎么对应到“这个人刚才在看什么”上。如果你的实验材料恰好是动态刺激物比如一段视频广告、一个产品操作演示、一段网页滚动录屏那麻烦还要再翻一倍。静态图片的AOI分析画几个框、导出指标就完事了动态刺激物里的AOI是一会儿向左移动、一会儿缩放、甚至还会短暂消失的目标你得让这些不断变化的区域和时间戳对齐到每一帧画面上才能知道你感兴趣的目标到底有没有被看到、被看了多久、是先看了哪个再看哪个。这篇文章就围绕“眼动数据分析基础_AOI分析动态刺激物”这个主题展开把动态AOI分析的完整链路拆开讲清楚从AOI的划分思路、工具选型、时间戳对齐机制到常用指标如何计算、可视化如何做、踩坑怎么避适合刚接触眼动研究、准备用视频材料做被试实验的研究生、用户研究员也适合手里已经有一批动态刺激物数据、但不知道该怎么规范分析的同学。内容会尽量往实操靠不给空泛的理论。1. 项目概述AOI到底是什么为什么动态刺激物难处理1.1 AOI的核心定义与作用AOI全称Area of Interest中文一般叫“兴趣区”或“感兴趣区域”。它的本质很简单在你呈现给被试的视觉刺激中人为圈定出一块或者多块区域然后统计被试的注视点有没有落到这些区域里、什么时候落的、落了多少次、停留了多久。先提醒一个很容易混淆的地方同样是AOI这个缩写在工业检测领域指Automatic Optical Inspection自动光学检测那是生产线上验PCB板的设备跟眼动研究完全不是一回事。在眼动数据分析的语境里AOI就是兴趣区。AOI的作用用一句话概括把连续的、流式的眼动坐标数据转换成离散的、可统计的“行为变量”。注视点本身只是一堆(x, y, t)的散点没有任何意义但当你用一个“按钮区域”去框定它之后就能回答“用户有没有看到这个按钮”“从开始播放到第一次看到按钮用了多久”“整个观看过程中在按钮区域累计停留了多长时间”这类问题。这也是为什么几乎所有眼动研究最终都会收敛到AOI级别的指标统计上而不是直接比较原始坐标点。静态图片实验里的AOI是很好理解的一张海报摆在那里确定好分辨率用人眼盯着画一个矩形框住LOGO这个框就固定下来了之后所有被试的注视点都拿这个框去判断命中与否。1.2 静态AOI与动态AOI的本质差异动态刺激物里的AOI就不一样了。拿一个常见的场景举例播放一段15秒的视频广告画面里产品包装从左下角滑入在中间停留几秒然后缩小移向右上角。如果你只在视频某一帧上画一个固定大小的矩形那这个矩形在其他帧上就会脱离产品包装的实际位置统计出来的命中数据就是错的——可能被试明明在看产品因为注视点不在那个固定框里被判成“未注视”。动态AOI的本质是一组带时间戳信息的空间区域集合。它不再是一个矩形而是一个随时间变化的状态序列每一帧画面上AOI都有一个对应的位置参数AOI的大小也可能在变化收缩、放大AOI甚至可以短暂地不在画面中比如目标移出屏幕多个AOI之间可能还会发生遮挡。换句话说动态AOI 静态AOI 时间维度。分析动态刺激物时你面对的不再是“一个框”而是“一长串不断变化的框”眼动数据在某个时间点命中的应该是那个时间点对应的框而不是整个时间轴上唯一的框。这是动态AOI分析最核心的思想转变。很多新手一开始没转过弯直接用静态AOI的方法处理动态视频结果做出来的首次注视时间、总注视时长全是错的还要回头从头排查。1.3 动态AOI分析的典型场景动态AOI分析适用的场景非常广几乎所有以“视频、动画、动态交互界面”为刺激材料的眼动研究都会涉及。常见的有这么几类第一类是视频广告效果评估。把画面中的品牌LOGO、产品主体、关键文案分别划分为AOI统计被试对每个元素的注意情况从而判断广告设计的信息传达效率。第二类是交互界面操作测试。录屏一段App或者网页的操作流程把操作过程中出现的按钮、弹窗、提示信息作为动态AOI研究用户在执行任务时视线如何分配。第三类是教学视频与演示材料分析。比如一段解剖课教学视频AOI可以是屏幕上的标注文字、操作区域、演示主体研究学习者的注意力分配规律。第四类是多目标追踪研究。这在认知心理学里很常见视频里同时出现多个目标研究被试在不同AOI之间的注视转移模式。这三个大场景的共同点是刺激物在时间轴上是流动的兴趣目标在画面中的位置、大小、可见性都随时间变化。静态AOI完全扛不住这些需求动态AOI分析是唯一的正解。2. 动态AOI分析的整体思路与方案设计2.1 动态AOI分析的基本工作流动态AOI分析虽然看起来比静态分析复杂很多但把整个流程拆开其实还是可以理出一条清晰的主线。完整的分析流程大致分为五个环节数据准备整理眼动原始数据时间戳、注视点坐标和刺激物视频文件或逐帧图像序列确认两者的时间基准AOI定义基于刺激物内容在时间轴上逐帧或分段绘制兴趣区生成动态AOI定义文件数据对齐将眼动数据的采样时间点与动态AOI的时间轴对齐确定每个采样点对应哪一帧画面、哪些AOI处于有效状态指标统计对落在各个AOI时间窗口内的注视点进行命中判定计算首次注视时间、总注视时长、访问次数等指标可视化与输出生成动态热图、注视轨迹、AOI时间序列图并对多被试数据进行汇总统计。这个流程看起来是线性的但实际做的时候前两步经常需要来回调整。AOI画得太粗糙分析结果不合理就得回到第二步重新定义。所以我的建议是正式分析前先拿一两个被试的数据做一轮全流程小规模试跑确认AOI划分方式、对齐精度、指标口径都没问题再批量处理剩下的数据。2.2 为什么需要时间戳映射机制整个动态AOI分析链路里最核心、最容易出错的地方就是时间轴对齐这里单独拿出来说。你为什么能说某一帧画面上的某个位置“是”或者“不是”AOI因为刺激视频的播放进程和眼动仪的采样进程都有时间戳。眼动仪记录的数据点是“在T时刻被试的注视点位于屏幕的(x,y)位置”刺激物视频则可以被理解为“在T时刻画面正播放到某一帧这一帧中AOI位于(x,y)位置”。要让两者对上就必须让眼动数据的时钟和刺激物视频的时钟具备可比性。实际实验中有两种常见的同步方式一种是使用眼动分析软件自带的刺激呈现功能。比如Tobii Pro Lab、iMotions这类软件可以直接导入视频作为刺激物播放过程中软件会在内部建立刺激时间轴和眼动采样时间轴的对应关系。这样导出的结果数据里AOI命中情况是软件自动算好的你不用操心时间戳问题。另一种是自己写程序呈现刺激比如用PsychoPy、E-Prime、或者自研的C#/Unity程序同时用眼动仪的SDK采集数据。这种情况下你需要自己设计同步标记比如在视频开始播放的第一帧通过串口或网络给眼动仪发送一个TTL触发信号或者在刺激呈现程序里记录系统时间戳再跟眼动仪数据流里的事件标记做匹配。不管哪种方式核心原则都是一个必须明确眼动数据每个采样点对应的刺激呈现时刻。如果这个映射关系建立了动态AOI分析就成功了一半如果建不了后面的所有统计都是空中楼阁。2.3 常见分析工具与选型建议动态AOI分析的工具选择基本决定了你后续工作效率的下限。目前主流的方案大致分三类各有各的适用场景。第一类是商业眼动分析软件自带的功能代表是Tobii Pro Lab的Dynamic AOI、iMotions的Dynamic AOI模块、SR Research的Data Viewer。这类工具的优势是集成度高时间轴对齐机制完善AOI状态可以跟随视频帧自动更新并且能直接导出统计指标表。缺点也明显贵且对AOI绘制的灵活性有一定限制。第二类是通用编程方案用Python或者R自己写分析脚本配合OpenCV读取视频帧、用Pandas处理眼动数据、用Matplotlib或者Plotly做可视化。这类方案的优势是灵活AOI的形状不局限于矩形可以定义任意多边形甚至椭圆缺点是门槛高时间轴对齐、命中判定、指标计算都得自己实现但好处是一片空白全在掌控中。第三种是半自动方案先用商业软件或者开源工具比如Gazefinder、PyGaze做基础数据处理导出注视点列表后再用自己写的Python脚本做AOI命中与统计。这个方案比较适合已有注视点数据、想在AOI层面做定制化分析的场景。如果你问我个人建议预算充足、被试量大、不想折腾的直接上商业软件做科研、需要深度定制AOI形状和分析逻辑的建议熟练掌握Python方案两者之间的可以先用Tobii Pro Lab把动态AOI画好、导出数据再用Python/R做二次统计和可视化。这套组合方案是我实际项目里用得最多的兼顾了效率和灵活度。3. 核心实操动态AOI的划分、导出与分析3.1 刺激物时间轴与眼动数据时间轴的强制对齐不管用工具还是自己写代码第一步永远是确认对齐精度。如果你用的是Tobii Pro Lab这类商业软件时间轴对齐多数情况下是自动完成的。你需要关心的是刺激物视频本身的帧率信息。比如一段视频标注是30fps但实际编码时是29.97fps播放时间长了就会产生累积偏差30秒的视频可能偏差到一秒的量级这对注视点命中判断的影响很大。所以使用前建议用ffprobe或者PotPlayer查看视频的实际帧率必要时做转码修正保证视频时间基底是准确的。如果是自编程实验需要额外注意采样时间戳的单位。眼动仪SDK输出的时间戳通常是设备开机以来的微秒或毫秒计数值属设备时钟刺激电脑的系统时间戳是另一个时钟统领二者没有直接可比性。常用的做法是# 伪代码示例用事件标记将两个时钟关联起来 # event_markers.csv 记录了发送和接收两端的时间戳 # 通过线性插值建立时间映射函数 import numpy as np from scipy.interpolate import interp1d stim_clock np.array([1000, 2000, 3000]) # 刺激端记录的标记时间点 eye_clock np.array([5000000, 5010000, 5020000]) # 眼动端记录的标记时间点 # 插值函数给定眼动端时间换算为刺激端时间 mapping interp1d(eye_clock, stim_clock, kindlinear, fill_valueextrapolate)这段代码的思路是通过几个已知的同步标记点拟合出两个时钟之间的线性映射关系然后把眼动数据的所有时间戳换算到刺激端时间轴再进行后续AOI判断。实操中有一个很容易被忽略的细节眼动仪采样数据量和刺激呈现帧率之间可能存在“相位差”。假设眼动仪采样率是250Hz每个采样点间隔4ms视频帧率是30fps每帧间隔33.33ms。你把眼动数据按最近邻原则分配到视频帧上会有一半左右的采样点跟帧边界不严格对齐。正确做法是先把AOI状态定义在视频帧时间轴上再对眼动采样时间做插值或区间判断而不是简单round到最近的帧号。3.2 三种常用的动态AOI划分方法时间轴对齐搞定之后进入AOI定义环节。给动态刺激物划分AOI常用的方法有三种按工作量和精度递增排序。第一种是逐帧手动绘制。把视频的每一帧导出来在每一帧上手工画矩形框生成一个独立的AOI文件。这是最原始、最费时但也是最可靠的方法。适合刺激物中目标区域移动非常规则、帧数不多比如只有几十帧关键画面的情况。如果你用Tobii Pro Lab自带的Dynamic AOI功能本质上也是逐帧标注只是软件帮你把帧序列组织起来了。第二种是关键帧插值。每隔N帧比如每10帧手动画一次AOI中间帧的AOI位置、大小用线性插值自动生成。这个方法在目标做匀速或近似匀速运动时效果很好工作量只有逐帧绘制的1/N。缺点也很明显如果目标运动是变速的、跳跃的、突然转向的插值出来的中间帧AOI位置就可能明显偏离真实目标位置导致命中判定失真。关键帧插值的实现逻辑如下import numpy as np # 假设在第0帧和第100帧矩形AOI的左上角坐标分别是(100, 200)和(300, 150) # 中间帧的坐标用线性插值计算 frame_indices [0, 100] x_positions [100, 300] y_positions [200, 150] for frame_id in range(101): x np.interp(frame_id, frame_indices, x_positions) y np.interp(frame_id, frame_indices, y_positions) print(frame_id, x, y)第三种是基于内容坐标联动。如果你的刺激物是程序化生成的比如实验程序里明确知道目标对象的坐标更新逻辑那可以用程序把坐标序列按时间戳导出直接生成AOI坐标文件。这个方法精度最高工作量也最小。常见做法是在实验程序里写日志每一帧记录当前各目标对象的屏幕坐标和宽高实验结束后把这些日志转成AOI定义文件。我在实际项目中做过一个折中方案动态刺激物画面里的目标位置用程序实时记录坐标但目标本身的尺寸变化用关键帧插值补全。因为位置信息最容易程序化尺寸变化则受到旋转、缩放等因素影响插值反而容易出错。具体情况还是得看你的刺激材料是怎么来的。3.3 AOI命中判断的关键技术与参数AOI定义文件生成之后就进入了命中判断环节。这个环节的判断逻辑本身很简单就是比较注视点坐标和AOI空间范围的包含关系但有几个参数设置如果不注意会让结果产生系统性偏差。首先是坐标系一致性。眼动仪输出的坐标可能是屏幕像素坐标也可能是归一化坐标0到1的范围而AOI坐标则基于刺激物图片或视频的分辨率。两者如果不统一命中判断是彻底无法进行的。实际操作中要明确刺激物视频的分辨率是多少、呈现时是否等比缩放、占据屏幕的完整区域还是部分区域。如果视频在屏幕上播放时不是全屏适配存在上下黑边或者左右留白就得做一个从视频像素坐标到屏幕坐标的线性映射。其次是缓冲容差设置。视频内容里的目标边界往往是渐变的、虚化的被试的注视点落在AOI边界上1-2个像素之内的情况很常见。如果命中判定过于严格这些边界注视点会被判为未命中导致注视时长指标偏低。常规做法是给AOI增加一个外扩缓冲区比如将矩形AOI向四周扩张10-15个像素再进行命中判断。但需要注意缓冲区过大又会把临近其他AOI的注视点错误划入所以具体数值要根据刺激物中AOI的间距来定。第三是注视点的归属时刻判断。一次注视fixation本身是有起止时间的AOI命中判断有两种口径以注视点的起点作为归属时间还是以注视点的中点或峰值时刻作为归属时间。这个选择对首次注视时间指标影响很大。比如一个注视点在AOI A的时间里开始在AOI A消失后才结束如果按起点算它被计入AOI A按中点算它可能就会被排除掉。行业内多数软件默认用注视点开始时间但我在实际交叉验证中发现当AOI切换频率很高时用起点判断会导致注视点被错误分配到前一个AOI。建议在分析报告中明确说明所用口径。下面是一个简单的命中判断参考实现def check_inside(px, py, aoi): 判断点(px, py)是否落在矩形AOI内含缓冲区buffer buffer aoi.get(buffer_px, 10) x_min aoi[x] - buffer x_max aoi[x] aoi[width] buffer y_min aoi[y] - buffer y_max aoi[y] aoi[height] buffer return x_min px x_max and y_min py y_max3.4 核心眼动指标的计算逻辑AOI命中判断完成后就可以计算指标了。动态AOI分析中最常用的指标有这几类首次注视时间Time to First FixationTFF指从刺激开始呈现到被试第一次注视到某个AOI内任意一点的时间差。这个指标反映的是注意力被捕获的速度。计算时要注意把刺激开始时刻的零点定义清楚一般以视频开始播放的第一帧为0点TFF则是第一次命中该AOI的注视点开始时间减去刺激开始时间。如果某个被试全程没看过目标AOITFF要么记为缺失值要么记为整个刺激时长这个口径要在方法部分写清楚不然不同研究之间没法比较。总注视时长Total Fixation DurationTFD指被试在该AOI内所有注视点注视时长的总和。注意这里统计“注视点”而不是“采样点”。一个注视点跨越了AOI的时间窗口边界需要把落在窗口内的部分按比例切分还是要整段计入同样要定好规则。我的习惯是只要注视点的起始时间落在AOI时间窗口内就把整个注视时长计入这个AOI如果注视点起始时间在窗口外但中间跨越进来了则不计入。这个规则的优势是逻辑清晰、代码实现简单缺点是会低估跨边界注视点的影响所以报告里一定要注明。访问次数Visit Count指被试的视线进入并离开某个AOI的次数。连续两个注视点都命中同一个AOI算一次访问还是两次访问取决于你对“访问”的定义——是按AOI连续停留时间窗口来切分还是按注视点之间是否存在扫视来切分。多数商业软件采用的是前者只要被试视线一直在AOI内部中间即使有扫视只要扫视的起止点都在AOI内就算一次访问。这个指标对理解用户注意力的“返回模式”很重要。动态AOI的分析场景下还有一个独特指标需要注意AOI可见时间内的覆盖率Coverage Rate。这个指标的计算方式是被试对该AOI的总注视时长除以该AOI在视频中可见的总时长再乘以100%。比如一个LOGO在15秒的视频中出现了8秒被试对它累计看了2秒覆盖率为25%。这个指标只有在动态AOI场景下才有意义静态图片没有“不可见时间”这个概念。3.5 数据导出与统计分析的标准化指标算完之后面临的下一个问题是如何把多被试、多AOI的数据组织成可统计的格式。流水账式的导出表就是每一行代表一个被试在一个AOI上的一项指标列包括被试编号、刺激物编号、AOI名称、首次注视时间、总注视时长、访问次数、覆盖率、AOI可见总时长等。这种长表格式long format是最适合用R或Python做统计分析的格式。如果你用的是商业软件导出时要留意几个字段软件是否已经按AOI名称进行了归并、多被试数据是否已经统一了AOI命名、有无时间窗口外的无效值、AOI之间的重叠区域是怎么处理的。我遇到过不少情况是同一个AOI在两个被试的数据里名称不一致一个叫“Product”另一个叫“product”导出合并后变成了两个独立的AOI统计结果直接错掉。统计分析层面最常见的做法是重复测量方差分析或线性混合模型。动态刺激物实验中多个AOI本质上是被试内因素因此要把被试作为随机效应放入模型。用R的lme4包做一个简单的线性混合模型非常方便library(lme4) model - lmer(log(TFD) ~ AOI_Type (1 | Subject) (1 | Stimulus), data aoi_data) summary(model)另外必须提醒一点眼动数据普遍存在非正态性尤其TFF经常是右偏分布建议在统计建模前先做对数转换或者使用广义线性模型避免违反正态性假设导致P值偏差。还有一个容易被审稿人抓的点多个指标TFF、TFD、Visit Count之间通常存在相关性如果一次性做很多个独立的显著性检验最好做多重比较校正方法至少报告一下用的FDR还是Bonferroni。4. 可视化与结果解读4.1 动态热图的生成逻辑与参数调整动态刺激物的热图强调的是“某个时间段内”而不是“整个刺激时长内”的注视分布。生成方式是把指定时间窗口内的注视点采样点收集起来做高斯核密度估计然后叠加到视频对应帧或者时间窗口平均帧上。关于热图参数最核心的是核宽度kernel bandwidth的设置。太小的核宽度会导致热图呈现一个个离散的尖峰看不出区域性太大的核宽度会让热图糊成一团完全失去空间分辨率。比较常用的经验值是30-50像素的核宽度但具体还是要看你刺激画面中的元素大小。如果画面中元素普遍较小核宽度要相应调小如果元素较大可以适度调大。我习惯先把一个被试的数据做多个核宽度对比图肉眼选择一个既能体现区域分布、又不至于过度平滑的值再统一应用到全部数据上。动态热图的制作通常还需要考虑时间窗口的划分。如果把整个15秒视频做成一个热图热点会集中在所有出现过被人注视的区域画面会非常拥挤。更常见的做法是按时长切成多个时间段比如0-5s、5-10s、10-15s分别出图这样可以看到注意力随时间的变化轨迹。4.2 注视轨迹图与AOI时序图的配合使用注视轨迹图Gaze Plot是另一类常用可视化方式用圆圈表示注视点圆的大小表示注视时长圆圈之间的连线是扫视路径。动态刺激物下的注视轨迹图如果直接画在整段视频上线条会乱成一团麻。建议分时间段绘制比如每3-5秒绘制一张叠加到对应时间段的视频帧上这样才能看清视线的先后顺序。AOI时序图AOI Timeline是我个人最推荐的可视化形式尤其适合动态刺激物。它的画法是横轴是时间纵轴是被试或AOI每一个被试/每个AOI的注视时段用条形表示一眼就能看出被试在什么时间看了什么、不同AOI之间是如何切换的。这种图也是做被试间对比最好的工具把多被试的数据叠在一起你能直观看到品牌LOGO出现后所有人的视线是否都被吸引过去了。做AOI时序图的时候要注意时间轴的零点一定要统一定义到刺激开始时刻这样多被试的图才可叠加。另外要不要在图里显示微注视micro-saccade和眨眼等事件取决于你的研究目标一般报告里只显示注视就可以了。4.3 从AOI指标到研究结论的翻译过程我做动态AOI分析项目时经常提醒自己指标算出来不算完能把这个数值翻译成具体的可用结论才算真正做完。举一个实际例子。一次视频广告效果测试里我在动态AOI层面统计了品牌LOGO首次出现前的视线转移情况结果显示大部分被试的视线在品牌文案出现后2秒内都转移到了文案区域但在LOGO区域的首视时间显著晚于文案。单看TFF数据的话结论可能是“LOGO吸引力不足”但如果结合AOI时序图你会发现是因为LOGO在视频中出现了5秒以后才入场被试前面看不到LOGO自然无法提前注视。所以动态AOI结论解读一定要把AOI的可见性变化考虑进去——AOI都还没出现怎么能说吸引力不够呢这就是动态刺激物分析和静态刺激物分析最大的不同你统计出来的每个指标都必须在对应时间窗口的AOI状态背景下进行解释。AOI的位置、大小、可见性、与其他AOI的相对位置关系都会影响注视行为只看单一指标下结论是非常危险的。建议在报告结论前用AOI时序图配合TFF与TFD指标做交叉验证时序图当故事板来看指标当证据用两者结合才能准确描述被试的注意力动态过程。5. 常见问题与排查技巧实录5.1 数据对不齐时间戳偏差是最常见的坑我接手别人的眼动数据有过不止一次这样的经历原始数据的注视点坐标乍一看没问题但一画AOI时序图发现所有被试的注视点都整体往后偏了300多毫秒。这种情况通常出在刺激视频的起始时间处理上。视频文件本身可能有片头、黑场、或者播放器预热导致实际第一帧内容出现的时间并不是程序记录的那个零点。排查方法很简单取一个被试的数据把注视点叠加到视频的逐帧画面上肉眼检查第一帧中显示的画面内容和注视点位置是否合理。如果所有被试都偏向同一个方向基本可以确定是刺激呈现程序的时间戳对齐问题需要在数据预处理时统一做一个时间偏移校正。5.2 AOI漂移问题AOI漂移指的是AOI框与实际画面中的目标位置发生偏离。这种问题在手动绘制和关键帧插值方法下都很常见。手动绘制时工作人员在某一帧画偏了几个像素累计到后续帧误差就越来越大插值法遇到变速运动时中间帧的AOI位置和目标真实位置偏差可能达到几十个像素。检查办法把AOI矩形框叠加到视频上播放一遍逐帧检查是否贴合目标。如果发现漂移一种做法是针对漂移严重的局部片段重新画关键帧另一种做法是对整段时间的AOI位置做一个全局偏移校准比如通过检测目标在画面中的实际位置计算AOI中心与目标中心的平均误差再做反向平移。这个方法适合目标有明显的边缘轮廓、能用图像处理定位的情况。5.3 指标数值异常偏低的排查总注视时长比预期低很多或者大量被试的TFF是缺失值通常不是被试不看而是AOI的命中判定本身出了问题。首先排查坐标映射AOI坐标是否跟眼动输出的坐标体系一致。归一化坐标和像素坐标混用是极易发生的错误如果刺激分辨率是1920x1080而AOI坐标是按0-1的归一化坐标定义的命中判定肯定会错。其次排查AOI的大小是否过小矩形框画得太贴目标边缘缓冲区设置为零注视点稍微一晃就不在框内。建议把AOI命中结果叠加到原始视频帧上做可视化检查这一步能筛掉绝大多数低级错误。5.4 多人数据合并的规范问题多被试数据合并前先看AOI名称是否一致这个前面已经提过了。还有两个容易忽略的点一是刺激播放时长是否一致。不同被试观看的同一段视频如果因为实验程序bug导致播放速度不同或者中途卡顿AOI时间轴就会错位。这类问题很难事后修正最好在实验时记录实际播放起止时间合并前先校验所有被试的刺激时长差异是否在合理范围内。二是缺失数据的处理规则。有些被试在某段视频中眨眼、闭眼、视线丢失tracking loss时间较长这部分时间不应被计入AOI命中窗口。比较合理的做法是在计算覆盖率时用AOI可见总时长减去该时段内跟踪丢失的时长得到有效可见时长再用总注视时长除以这个分母。如果没有扣除tracking loss覆盖率会被系统性低估这在不同被试之间引入不均匀的偏差。5.5 动态AOI分析的效率优化动态AOI分析最大的槽点是耗时特别是逐帧手动绘制AOI的阶段。在一段60秒的视频上绘制动态AOI即使熟练的人也常常要花上几个小时。几个实操中验证过的提速技巧可以分享第一先用自动化的目标检测工具比如基于颜色阈值、或者用现成的目标检测模型大致提取目标位置作为初始AOI再人工微调。第二如果目标运动比较平滑用关键帧插值可以把手动工作量压缩到原先的十分之一。第三Tobii Pro Lab的Dynamic AOI支持把某一帧画好的AOI复制到其他帧上先复制再调整位置比每帧从头画快很多。第四在AOI较多的情况下可以先定义一个较大的“粗AOI”包含整个运动区域再在需要精确指标的时间段内细化AOI这样前期的粗筛可以大幅减少工作量。最后再分享一个经验做完一轮分析之后一定要保留“AOI定义文件命中判定脚本参数配置文件”这三件套并写一个简要的说明文档记录各项参数设置。眼动分析最怕的不是做不出来而是做出来了但忘了当初怎么做的。参数如缓冲区大小、TFF口径、覆盖率分母定义只要换一次分析环境就可能全部丢失。把这些记录整理好既是学术规范也是给自己未来的复查留一条后路。眼动数据分析这个领域方法细节决定了结果可靠性。动态AOI分析尤其如此——它比静态AOI多出来的那一维“时间”既是分析价值所在也是所有坑的来源。只要把对齐机制、AOI定义、命中判定、指标口径这些基础环节做扎实动态刺激物的眼动数据完全可以得出比静态实验更丰富、更贴近真实视觉行为的结论。
返回列表