ARTICLE DETAIL

资讯详情

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

眼动追踪中的动态AOI分析:从静态画框到兴趣区跟随的完整实战指南

眼动追踪中的动态AOI分析:从静态画框到兴趣区跟随的完整实战指南 眼动数据分析里有一个很隐蔽的门槛静态图片上的AOI分析随便找个教程就能上手画个矩形框统计注视时长完事。可一旦刺激物动起来——视频广告、驾驶模拟界面、人机交互操作过程很多人立刻卡壳。为什么因为AOI不是画上去就完了它的边界会随着目标物体的移动、旋转、缩放甚至短暂遮挡而变化。你画的那个框跟不上物体后边的数据就全是噪声。我常跟人说动态刺激物的AOI分析本质上是给会跑的兔子画圈圈画慢了、画歪了测出来的就不是兔子的运动轨迹而是你自己手抖的轨迹。这篇我把动态AOI分析的思路、工具、计算流程和踩坑经验完整梳理一遍适合刚入门眼动分析、打算做视频或交互场景研究的人参考。1. 大多数人的第一个坑画框简单框随物动才是难点先定义清楚问题。AOIArea of Interest兴趣区是眼动分析里最常用的量化手段核心思路就是把刺激画面划分出有意义的区域然后统计注视点落进每个区域的次数、时长和顺序。静态刺激下AOI是一次性划分的一张网页截图LOGO画一个框导航栏画一个框正文画一个框算完收工。但刺激物一旦动态化原来这套一次划分、全程有效的逻辑就崩了。动态刺激物大致有三类每一类对AOI的挑战都不一样。第一类是目标物体本身在画面里运动比如视频广告里的产品、体育比赛里的球员。你需要AOI跟着目标走这在软件里叫动态AOIDynamic AOI。难点在于目标的空间位置随时间变化如果手动在每一帧画框工作量巨大而且不同帧之间框的位置和大小如果不一致累出来的指标会有系统性偏差。第二类是刺激物本身不动但呈现内容随时间变化。典型例子是信息密集的界面操作流程菜单展开、弹窗出现、内容滚动。这类场景里AOI更多是时间段相关的同一个屏幕区域在不同时间代表不同功能你需要按时间段把AOI语义切出来。第三类是观察者视角的变化比如视频里镜头在移动、缩放被试看的是动态场景。这类最麻烦因为感兴趣的目标在屏幕坐标里可能完全不存在了——上一秒还在画面中央的物体下一秒镜头切换后可能被移出画面而你的AOI还在原来的像素位置等着它。很多人做动态视频研究时仍然沿用静态画的矩形框哪怕目标已经跑到画面外了AOI还留在原地。这样统计出来的落点率们有意义但研究对象已经从被试对产品的关注变成了被试对画面某一块固定区域的关注完全是两码事。理解了这个本质你就会明白动态AOI分析的关键不是画框而是建立AOI与运动目标之间的持续对应关系。框只是一个可视化表达背后真正值钱的是每一帧里AOI的坐标序列、形状序列和有效性标记。2. 动态AOI的三种做法与选型思路动态AOI的具体实现方式并没有统一标准不同研究目的、不同刺激特性适合的方案完全不同。我把常见做法归纳成三类你可以对照自己的需求选。2.1 手工逐帧标注精度最高但代价巨大这是最朴素的方式用视频编辑思路把刺激视频按帧或按关键帧切分在每一帧或每隔N帧手动绘制AOI边界软件自动在关键帧之间做插值。优点很明显完全不受目标运动复杂程度限制目标变形、部分遮挡、自身角度旋转人眼都能判断并画出合适的边界精度是所有方法里最高的。缺点是体力活一段60秒的视频按每秒5帧的关键帧密度做就是300个关键帧每个帧画2-3个AOI光标注工作就是大半天。而且标注的一致性很难保证。同一段视频同一批人在不同心情下标出来的框边界可能差出几十个像素这种标注者内/间信度问题在投稿时很容易被审稿人质疑。建议只在以下场景使用目标数量少1-2个、运动模式复杂且不可预测比如野生动物跟踪、你只需要分析某一小段关键时间窗口而不是全部视频。用 Wool 的时候可以做但不建议全程做。2.2 几何跟随法稳定场景下的高性价比方案如果你研究的动态刺激物运动规律相对可预测可以用几何跟随法。具体是在刺激物上选定若干个参考锚点锚点可以是物体的中心点、角点或者特征点通过程序或插件追踪锚点在每一帧的坐标然后以锚点坐标驱动AOI的位置、大小甚至形状。在真实研究中最常见的是中心点追踪加固定尺寸。比如分析儿童观看动画片时的兴趣区域你可以追踪动画主角的脸部中心AOI就以脸部中心为中心、固定半径的圆或固定尺寸的矩形。脸部在画面中移动AOI跟着平移脸部靠近镜头变大AOI却不放大——有误差但只要误差远小于AOI本身的尺寸对统计结果影响就可控。这种方案的精度取决于目标特征是否稳定。人脸、高对比色块、带特征纹理的物体追踪相对靠谱。相反如果目标快速运动导致运动模糊或者目标频繁转角度、被遮挡锚点追踪就会漂移AOI也会跟着歪。2.3 语义/模型驱动法动态AOI的进阶形态更高阶的做法是让AOI的生成跟目标的语义状态关联。举例来说你不是先定义画面坐标区域而是定义画面里那辆车的前挡风玻璃区域。这需要借助外部视觉模型比如目标检测、关键点检测模型对刺激视频做后处理输出目标的边界框或关键点再把这些输出转化为AOI。这种方法解决了两大痛点一是显著降低标注工作量模型自动给出每帧的物体边界框二是可以处理目标形变例如人体姿态变化导致上半身这个区域并不是一个规则矩形模型输出的关键点序列可以驱动一个多边形AOI跟随人体姿态而变化。代价是需要额外技术栈。你需要会跑目标检测模型YOLO系列是入门的常见选择需要处理模型输出把检测框转换为你眼动分析软件能识别的AOI格式通常是逐帧的坐标序列文件。三种方案的取舍我放在一起比较你对照自己的项目情况做决定。方法精度成本适用场景主要风险手工逐帧标注最高人力极大目标少、运动复杂、短片段标注一致性问题几何跟随法中高较低目标运动规律、特征稳定锚点漂移、遮挡失效语义/模型驱动中/高需额外建模目标多、需批量处理模型检测误差传导3. 实操流程从数据采集到AOI跟随坐标导出的完整链路动态AOI分析不是打开软件画框就行它的完整链路包括采集端设计、刺激材料准备、AOI标注/生成、数据导出与清洗计算。每一环都会影响最终结果我按实际操作的先后顺序展开。3.1 数据采集阶段就要想好AOI怎么画很多人是在数据采完之后才开始考虑AOI的问题等到分析时才后悔刺激视频的分辨率、呈现位置、甚至刺激本身的画面构图都直接影响后续能不能准确画出动态AOI。采集阶段有三件事需要提前规划。第一刺激视频的编码必须稳定。尽量用无损或高码率编码避免压缩产生的运动模糊。眼动仪记录的是被试屏幕上的注视坐标AOI需要跟刺激画面对齐如果视频本身是压缩严重的低码率流画面细节糊掉标注时很难判断目标边界在哪。第二刺激呈现的位置必须固定。这里的固定不是指放在屏幕中央就行而是说所有被试看到的刺激必须具备完全一致的像素坐标。很多人用小窗口播放视频或者自适应缩放窗口这就毁了。不同被试看到的画面大小、位置不同AOI坐标就无法统一。严谨的做法是锁定刺激窗口尺寸并用自己的测试眼动数据验证屏幕坐标系与刺激画面的对应关系。第三动态刺激的起始同步需要做标记。在实验编程软件如Experiment Builder、PsychoPy里刺激开始播放时打一个stimulus_start事件标记分析时拿这个标记对齐AOI时间序列和注视数据。没有这个标记同步你花几小时画好动态AOI最终对不上眼动数据的时间轴一切白费。3.2 AOI标注的操作要点两个质量校验手段如果你选择手工逐帧或关键帧标注有一个操作细节值得留意在逐帧标注时别只盯着目标物体的边界画框要学会用眼睛的感知来验证。我见过不少新手把AOI画得很精细贴着目标轮廓描但回放时发现框在抖——每帧之间的框尺寸不一致导致数据里出现大量进入-离开-再进入的噪声片段。一个实用建议是画完一段时间段的AOI后把AOI叠加在原始刺激视频上用注视点轨迹回放功能播放一遍。看到的效果要么是框稳稳跟着目标走要么是框像心跳一样一鼓一鼓。后者说明关键帧之间插值不合理或框大小标得不一致需要返回去修正。第二个校验手段是检查AOI覆盖率计算每一帧上AOI的落点有效性即该帧的AOI坐标是否在画面边界内如果某个时间段的AOI大量落在画面外或画面边缘大概率是目标运动太快、你的关键帧密度不够插值跟不上目标实际位置。这时候适当加密关键帧而不是强行靠后期平滑曲线补救。3.3 把动态AOI导出成标准数据格式不管用什么方式生成动态AOI最终都必须落成标准化格式才能进入统计阶段。常见的格式是把AOI定义为一个时间段坐标表时间戳(ms), AOI名称, 形状类型, 参数(x, y, w, h 或 多边形顶点序列)Tobii Pro Lab生成的动态AOI导出就是这样的结构SR Research的Data Viewer也支持按时间段定义AOI。如果你的工作流里有脚本参与通常需要把这个表格解析为两个结构一个是时间段-空间区域的查找表一个是逐帧坐标序列用于和采样率匹配。我个人强烈建议先把AOI的定义数据和眼动采样数据分开处理在最后一步合入时再合并。原因很简单AOI数据的粒度是按关键帧/时间段毫秒-帧级别而眼动数据是按采样率比如250Hz即4毫秒一个注视样本点。两者直接合并会产生大量重复插值运算而且在AOI定义边界处容易出现对齐误差。先保持独立最后按时间戳做最近邻匹配既清晰又稳定。4. 数据分析阶段的高频错误与排查方法动态AOI分析的数据处理阶段坑比静态分析多得多。这里列出的几个问题是我在实际项目里反复遇到的也是论文审稿时最容易挑出来的问题。4.1 时间对齐毫秒级的误差会被AOI边界放大眼动跟踪在动态场景下的时间同步误差比静态更致命。静态图片里注视点即使时间戳偏了50毫秒落在的AOI大概率还是同一个但在快速运动的动态刺激中目标一秒可能移动上百像素50毫秒就是5-10个像素的位置偏移如果AOI边界很窄一个真实的落点可能被判为落在AOI外或者反过来。所以分析前必须做时间对齐验证。最直接的办法是用几个已知被试一定在看目标的时刻来做验证比如刺激视频中目标突然出现或突然变亮的位置检查这些时刻的注视点是否都落在对应AOI内。如果存在系统性的偏移比如所有注视点都偏在目标右上方优先检查眼动仪与屏幕的校准质量其次检查刺激标记与眼动数据之间的延迟补偿设置。4.2 眨眼与数据丢失动态场景丢失率天然更高被试眨眼、眼动仪跟踪丢失特别是自由观看视频时头部移动在动态实验里更频繁。静态实验里丢失的样本一般直接当作无效剔除损失不大但动态场景里如果目标快速运动丢失前的最后一个注视点很可能已经被外周视觉引导到目标即将到达的位置直接剔除这一段会把目标接近效应的数据都丢光。更稳妥的处理方式是分类型对待眨眼导致的丢失特征为瞳孔信号短暂消失后恢复可以插值或剔除但跟踪漂移导致的注视点大幅跳变则先做滤波再决定去留。Tobii等系统导出的数据里通常有有效性标记validity code建议按有效性标记分段处理而不是一刀切。4.3 AOI重叠动态场景里的冲突规则要提前定静态分析里如果两个AOI重叠了实验者还能手动调一下边界但动态AOI在运动过程中难免出现短暂重叠——两个目标擦肩而过时它们的AOI一定会重叠一段时间。这时候落在重叠区域的注视点到底算谁如果统计脚本不做规则约定这些点会被重复计入两个AOI导致总时长数据虚高。我的做法是在分析脚本里明确设置优先级规则。最常见的规则是重叠区域归先进入的目标或所有AOI不互斥分别统计。到底选哪种取决于研究问题如果是比较两个竞品在画面中的受关注度互斥归因更公平如果只是想了解是否注意到该区域不互斥也无妨。关键是规则必须在处理脚本里写清楚并在方法部分说明别留到写论文时再糊弄。4.4 动态AOI的插值平滑别把人为误差做成高精度当AOI由关键帧插值生成时插值算法选择会影响最终结果。线性插值最常用但如果目标物体的运动不是线性的比如有加速、减速、拐弯线性插值会让AOI在目标运动拐点处明显滞后或提前。解决思路是在运动模式复杂的片段手工打关键帧在平缓片段用插值。千万不要全片统一用一种参数然后祈祷效果良好。我见过有人尝试用Savitzky-Golay滤波对AOI坐标序列做平滑确实能让路径看起来顺畅很多但平滑后的AOI位置和真实目标位置之间会产生系统偏移追逐运动任务里这种平滑会让目标追踪的注视滞后被虚假缩小。如果你要研究的是追踪表现或预期性注视那就别做任何坐标平滑。5. 动态AOI下的指标计算与解读逻辑AOI体系下的核心指标总注视时长、平均注视时长、首次注视进入时间、访问次数、访问顺序在动态场景下的含义跟静态完全不同。按静态的默认理解去解读很容易得出误导性结论。5.1 时间归一化总停留时长必须按有效时间算静态实验里刺激呈现时间对所有被试是固定的计算AOI停留时长比例时分母就是总刺激时间。动态场景下由于每个被试的眼动数据质量不同丢失段长短不一有效观看时间因人而异。此时如果仍统一用刺激总时长做分母会有误差。正确做法是把每次AOI内停留时长除以该被试的有效样本时长总样本数减去丢失/眨眼样本数再乘以试验总时长得到标准化的时长指标。严格一点的论文会报告有效数据比例低于某个阈值如70%的被试数据应当被排除。5.2 动态场景中首次进入时间的边界条件静态场景里首次进入时间TTFFTime to First Fixation计算简单从刺激开始到被试首次注视落入AOI的时刻。动态场景则有个新问题如果一个AOI在视频一开始根本不在画面里目标还没入场那首次进入时间应该从目标出现那一刻算起还是从视频开始算起这直接决定了结果的解释方向。如果研究的是广告中产品出现后多久被试注意到它那应该从产品出现时刻AOI变为可见时刻算TTFF如果研究的是被试在场景里是否能快速找到目标则应从视频开始算。实操中务必把AOI出现的时间点单独记录并据此重设TTFF起点。很多商业软件不会自动处理这个问题需要你在导出数据后自行重算。5.3 访问顺序与转移矩阵动态场景里更有信息量动态刺激相比静态的一个优势是你可以研究注视频次如何在不同动态目标间切换以及这种切换是否与目标运动事件如碰撞、变道、弹窗出现密切相关。这个维度的分析在静态中做不出太多花样动态场景却有大量文章可做。实现思路是先按时间把注视序列切分然后统计连续两次注视落入的AOI对形成转换矩阵。再进一步可以针对特定事件比如视频中产品突然变色的一瞬间做事件前后对比看转移模式是否显著改变。这也是动态AOI分析真正超过静态分析的学术价值所在。5.4 动态场景凝视点与AOI匹配的延迟问题最后一个需要注意的指标解读陷阱是注视点与AOI的匹配时点。眼动仪输出的注视点已经经过降噪处理给出的通常是注视片段的起止和中心位置。有些人在分析时将整个注视片段归类到注视中心点所在的AOI这在动态AOI下风险很大一个持续300毫秒的长注视期间目标可能已经移动了一段距离用户从中心点来看确实在AOI A里但注视的前半段处理的可能是AOI B的信息。从目前主流软件习的做法来看普遍还是用注视点中心位置匹配单一AOI。如果你的研究对时间敏感比如驾驶中的分心研究建议更细粒度地处理把长注视拆成短片段或者在计算每种指标时使用不同匹配口径中心匹配vs.整体重叠匹配并在论文里同时报告两者的结果。别小看这个细节同一个数据集用两种口径算出的结论可能是相反的。6. 动态AOI研究的通用工作流与经验工具选型做动态AOI分析时选择顺手的软件/工具会明显影响效率。我按工作流阶段把常用的方案列出来帮你找到自己项目里最合适的路径。6.1 眼动设备厂商自带工具Tobii Pro Lab与Data ViewerTobii Pro Lab是目前做动态AOI最成熟的商业方案之一。它的动态AOI功能允许你逐帧调整AOI位置、形状支持插值生成中间帧的AOI还可以将动态AOI的时间轴与事件标记对齐导出逐帧的AOI落点汇总表。缺点是不同版本的交互差异较大且动态AOI功能不是所有许可都解锁使用前确认版本权限。SR Research的Data Viewer与EyeLink硬件配合也提供类似的逐帧AOI定义功能。EyeLink的动态AOI方案偏向时间段切分需要你提前定义好时间段内的AOI坐标适合用几何跟随法的场景。6.2 半自动工作流Python OpenCV 眼动软件输出如果你愿意写一点脚本可以大幅提升动态AOI生成效率。我的常见做法是用OpenCV或相关视觉库对刺激视频做目标检测/特征点追踪输出目标的逐帧边界框或关键点坐标将坐标序列按实验定义的时间窗口缝合为AOI时间段表把该表导入到眼动分析软件或直接用Python读取眼动原始样本按照前述的时间戳匹配规则计算AOI内指标。这个流程最大的优势是标注规则是代码化的全程可复现修改参数后重新跑一遍就能更新全部AOI数据比手动重画一周高效得多。6.3 开源/在线眼动分析工具可用但要确认格式开源工具里OpenGaze、PyGaze适合刺激呈现和数据采集但做动态AOI标注和管理都偏弱。有一些在线平台如GazePoint分析平台支持一定程度的动态AOI但格式兼容性和指标算法透明度仍需逐一验证。我的建议是如果你的项目不复杂用商业工具省心如果项目复杂、需要批量化处理就把重心放在代码化流程上。6.4 通用数据格式建议为论文复现做好铺垫无论是哪种工具务必在分析最开始就确定统一的数据结构。我习惯用如下目录组织raw/眼动原始数据、刺激视频、事件标记文件aoi/AOI定义文件逐帧坐标序列、时间段-区域表、AOI生成脚本processed/按被试/试验合并后的AOI指标数据analysis/统计脚本和输出图表。这样在几年后拿到数据集重跑分析时你还能清楚还原每一步是怎么做的。很多人的动态AOI研究出现结果无法复现的悲剧根源就是AOI定义和数据口径存在太多临时手动调整过程完全没有脚本记录。7. 项目落地中的几个实在建议最后说点这几年做动态AOI研究攒下来的通用建议不一定适用于所有场景但值得你在开工前认真考虑。第一能用静态AOI讲清楚的问题别硬上动态AOI。动态AOI在标注、分析、解释上增加的成本是隐性的很容易低估。如果你的研究问题其实是用户是否注意界面中的某个功能区域而这个区域在交互过程中只是替换内容而位置不变那静态AOI划分足以解决问题。动起来的是内容不是区域别把动态内容和动态AOI混淆。第二正式标注前先做预标注并检查标注的重测信度。动态AOI尤其是手工标注的情况下操作者疲劳后很容易出现框的抖动、大小漂移。建议选一段5秒的片段隔天重复标注对比两次标注的重合率可以用IoU即交并比来衡量低于0.7就要警惕。这个步骤能在早期发现标注质量劣化而不是等分析完才发现数据有问题。第三投稿前把AOI的定义规则写清楚。论文的方法部分至少包括动态AOI生成方式手工/几何跟随/模型、AOI形状与大小定义依据、关键帧密度或插值策略、AOI重叠归属规则、时间对齐验证结果。审稿人看到这些细节基本不会揪着你怎么定义AOI不放。第四如果做动态AOI是为了研究人类观看动态视频的底层机制可以考虑把动态视觉显著性模型利用深度学习预测注视显著性的模型的输出也作为对照分析。虽然动态显著模型并不直接给出AOI但它可以帮你验证你的动态AOI划分和一般视觉注意力的预测是否吻合避免AOI边界设置与人类注意机制明显冲突凭空制造出一些显著效应或者掩盖真实的效应。眼动数据分析动态刺激物这块的门槛不低但也不是玄学。把AOI和时间对齐这两件事做扎实你就已经超过了九成直接拿软件默认参数硬跑的人。
返回列表