自定义眼动仪校准



很快,我们将发布带有定制眼动仪校准”功能的产品。 不幸的是,由于种种原因,它仍然无法完成本文。 但是,最近发生了一个有趣的事件,提示您完成开始的工作。 但是,首先是第一件事。 我希望有人仍然可以从我们的经验中受益,尽管事实证明这个职位很潮湿。

简而言之, 眼动仪是使您能够跟踪视线以及眼睛和头部位置的设备。

眼动仪有很多应用领域,其中之一是计算机游戏行业( 更多 )。

通常,凝视检测负责游戏中的辅助(辅助)功能,但很重要:

  • 相机移动;
  • 瞄准
  • 选择用于交互的对象;
  • 武器选择;
  • 视线自动暂停;
  • 其他。


在大多数情况下,标准校准(我们将讨论Tobii Eye Tracker 4C设备)足以舒适地使用Eye Track'era


但是,不幸的是,就我们的目的而言,通过标准校准获得的设备精度还不够,因为在我们的项目中,外观是控制的主要机制。



根据上述内容,形成了任务 :改进标准校准;
条件Tobii Eye Tracker 4C设备,开发语言为C#(WPF)

这似乎是一个表面上的解决方案:如果您想要更高的精度-添加更多的校准点,但这并不是那么简单。

Tobii AB有很多用于处理其设备的工具 。 发现Tobii Pro SDK时,Joy 无止境 ,该SDK具有所有用于校准的包子,但是后来证明,该SDK不适合专门用于我们的眼动仪模型(尽管很奇怪使用此SDK时,设备的凝视检测仍然存在。 我不得不更轻松地使用工具-Tobii.EyeX.Client

根据经验,可以找到最佳数量的校准点及其位置:一个4x3矩阵,其中放置12个校准点(每个校准点位于单元的中心)。

还凭经验找到以下参数:

  • 在一个校准点校准的时间-3秒;
  • 所考虑的点的索引为5(如果从设备接收的点的索引为该值的倍数,则在计算校准时将其考虑在内);
  • 校准点的最大允许偏差px )通过以下公式计算:

    regionWidthregionHeight0.45

    在哪里 regionWidthregionHeight-校准矩阵的像元宽度和高度


校准算法(从简单到疯狂)


对于校准矩阵的每个单元,依次执行校准:

  1. 如果当前校准点与从设备接收到的点之间的距离小于最大允许偏差 ,则该点(从设备接收到)将落入集合中以进行进一步处理,否则-当前电池的校准将重置为其原始状态(并且一切都是新的) ;
  2. 用完一个校准点的校准时间后,我们从先前收集的数据中获得位移的平均值。



校准完成后,我们将按区域(矩阵单元)收集12个平均偏差值



用法(甚至更容易)


  1. 确定从设备接收的点属于哪个区域;
  2. 我们将从设备接收的点偏移该区域中偏移平均值

因此,有可能以编程方式提高Tobii Eye Tracker 4C设备的准确性(通过在标准校准上添加附件)。

不幸的是,由于保密协议,我无法指定软件名称,也无法布置源代码或屏幕截图。 幸运的是,他们让我分享了算法。 我希望有人发帖仍然有用。

本文提供了主要校准过程的最简单描述。 此外,还有很多其他东西:

  • 将点值与上一个值进行平均(以确保平滑度);
  • 检查是否超出屏幕边界;
  • 视线丢失;
  • 跟踪眼睛在太空中的位置变化;
  • 眼动仪状态跟踪;
  • 跟踪屏幕分辨率的变化;
  • 跟踪中止校准;
  • 随机选择校准标记的类型;
  • 还有更多。

这正是促成本文“完成”的事件:由于一些不可思议的巧合,我的朋友( 来自上一篇文章)有机会与Tobii AB的开发人员进行实时聊天。 在交谈中,开发人员提到标准校准并不理想,我们的努力也没有白费。

Source: https://habr.com/ru/post/zh-CN457784/


All Articles