ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

普通摄像头做眼动追踪:eyeLike 上手实录

普通摄像头做眼动追踪:eyeLike 上手实录 普通摄像头做眼动追踪eyeLike 上手实录【免费下载链接】eyeLikeA webcam based pupil tracking implementation.项目地址: https://gitcode.com/gh_mirrors/ey/eyeLike你在做一个注意力分析的小 demo卡在第一件事上设备太贵。专业眼动仪动辄几万消费级的红外摄像头也要一两千。但如果目标只是找到每帧画面里瞳孔在哪普通网口摄像头加 OpenCV 就够用。eyeLike 就是这样一个项目基于网络摄像头的瞳孔追踪用图像梯度算法在每一帧里实时定位瞳孔中心。这篇文章带你从零把它跑通把调参时最容易踩的坑和真实的能力边界一次讲清楚。eyeLike 是什么一个算法参考实现eyeLike 是 Tristan Hume 发起并维护的参考实现算法来自 Fabian Timm 2011 年发表的图像梯度瞳孔定位方法MIT 许可。核心依赖只有 C11 和 OpenCV3.x、4.x 都有兼容处理Linux 和 macOS 可以直接编译。官方文档 Readme.md 写得非常简不少信息得自己从代码里挖核心源码src/。作者在文档开头就声明了这是算法的开发者参考实现不是成品眼动追踪方案。这一点后面会展开。原理速览用梯度向量投票找瞳孔中心它是怎么做到的整条链路分四步。先做人脸定位用 OpenCV 的 Haar 级联分类器检测人脸输入取的是图像的红色通道。然后裁眼区——没有独立的眼部检测器而是按人脸框的固定百分比裁出两个眼区可以把它想象成一张脸上贴了两块固定位置的模板快但要求脸比较正。接着算梯度眼区先缩放到 50 像素宽逐像素算 X/Y 方向梯度。最后投票每个强梯度向量会沿着反方向给所有候选中心投票点积越大票越重得票最高的像素就是瞳孔中心——相当于让一圈边缘像素各自举着指向瞳孔的箭头箭头最密集交叉处即瞳孔所在。收尾用泛洪填充清掉图像边缘的假峰坐标再放大回原图。从零跑通编译并运行 eyeLike环境需求就三样装好即可组件版本要求备注C 编译器GCC 7需要支持 C11CMake2.8工程入口版本要求宽松OpenCV3.x 或 4.x代码已做版本兼容装发行版自带包即可之后把代码取下来编译git clone https://gitcode.com/gh_mirrors/ey/eyeLike cd eyeLike mkdir build cd build cmake .. make可执行文件在build/bin/eyeLike。别把它挪到别的地方跑——主程序里 Haar 级联用的是相对路径../res/haarcascade_frontalface_alt.xml从 build 目录启动才能解析到启动时如果打印 Error loading face cascade就是这个原因。程序一启动就打开摄像头弹出 4 个窗口主窗口里能看到人脸矩形、两个眼区裁剪框和瞳孔中心点Capture - Face 窗口单独显示裁出的人脸上面标着两个瞳孔点。这四个窗口都有内容、点跟着眼睛走就说明跑通了。按f会把当前帧存成 frame.png方便事后分析按c退出。关键参数怎么调眼区裁剪框与梯度阈值可调参数集中在一个文件里参数配置src/constants.h。二十来个常量里有三组值得动手。第一组是 kEyePercentTop(25)、kEyePercentSide(13)、kEyePercentHeight(30)、kEyePercentWidth(35)按人脸框的百分比决定眼区裁在哪。我第一次跑的时候发现瞳孔点整体偏外最后查出来是裁剪框没框住眼睛——框错了后面调什么都不对所以出问题先看这组。第二组是 kGradientThreshold默认 50.0。它不是绝对阈值而是动态阈值的系数调大则存活的梯度点变少中心点更稳但弱光下容易跑偏调小则相反。第三组是 kSmoothFaceImage默认 false和 kFastEyeWidth默认 50。前者开启高斯平滑后者是降采样分辨率。点抖得厉害、环境又噪先开平滑还不行再降分辨率代价是损失一点精度。联动顺序记住一条先确认裁剪框对了再动阈值平滑和分辨率用来兜底。能力边界它追踪的是瞳孔不是视线作者在文档里说得很直白This does not track gaze yet。这个版本只能给出瞳孔中心在图像里的二维坐标。没有眼角之类的参考点代码里有但 kEnableEyeCorner 默认关闭没有头部姿态估计也没有屏幕标定所以算不出用户在看屏幕上的哪个位置。精度上正脸、光线均匀时点很稳侧脸、脸上强反光、人脸离镜头太近Haar 检测有 150x150 的最小尺寸限制时效果明显下降。把它当做一个瞳孔定位模块来用、嵌进更大的系统里是最合理的预期。延伸方向从瞳孔点到视线估计你可以尝试把 kEnableEyeCorner 打开——眼角定位的代码已经写在 findEyeCorner.cpp 里。瞳孔中心配合眼角位置能算出瞳孔在眼内的相对偏移这个比例是做视线估计的天然参考特征比单独的屏幕坐标有价值得多。你可以尝试给每帧输出的瞳孔中心加一个简单的低通或卡尔曼滤波。梯度投票的原始输出有抖动任何要做交互控制移动鼠标、点选菜单的下游应用都绕不开时间滤波这也是理解定位和追踪差别的最短路径。你可以尝试固定拍摄条件正脸、均匀光、固定距离采集一段标注过屏幕坐标的样本做瞳孔位置到屏幕点的一次线性映射——这是从找得到走到算得准的最小一步。适合人群一句话想搞懂眼动追踪算法原理、或者要往自己项目里嵌一个轻量瞳孔定位模块的人eyeLike 正好够用。最直接的下一步打开仓库把 Readme.md 读完按上文的流程完整跑一遍跑通之后再谈调参。【免费下载链接】eyeLikeA webcam based pupil tracking implementation.项目地址: https://gitcode.com/gh_mirrors/ey/eyeLike创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表