用普通摄像头免费做眼动追踪:eyeLike 零成本快速上手指南
【免费下载链接】eyeLikeA webcam based pupil tracking implementation.项目地址: https://gitcode.com/gh_mirrors/ey/eyeLike
eyeLike 是一个用 OpenCV(最常见的图像库)写的开源眼动追踪项目:从普通网络摄像头的画面里实时找出双眼瞳孔中心,并把坐标画出来。硬件只要一台 USB 摄像头,跑通约二十分钟。
它能帮你做什么:4 个能落地的眼动追踪场景
- 交互原型:视线触发菜单选择,做"看哪点到哪"的演示,全程不动鼠标。
- 眼控输入:为不方便使用键鼠的人搭一套眼神打字的基础框架。
- 注意力与阅读研究:记录注视落点和停留时长,分析课堂注意力或阅读行为。
- 计算机视觉入门:源码不到千行,梯度、滤波、阈值这些基础操作全部摆在明面上,适合当范文读。
先说清一点:它输出的是瞳孔中心坐标,还不等于"你在屏幕上看哪里"。这个区别决定了它适合做什么,后文"边界"一节展开。
最小化安装步骤:摄像头眼动追踪从依赖到运行
装依赖:编译器、CMake、OpenCV 三件套,Ubuntu/Debian 一条命令即可:sudo apt install build-essential cmake libopencv-dev。OpenCV 建议 3.4 起步,4.x 也兼容。
拿代码,再跑起来:
git clone https://gitcode.com/gh_mirrors/ey/eyeLike cd eyeLike && mkdir -p build && cd build cmake .. && make -j4 ./bin/eyeLike窗口打开后,程序同时显示主画面、人脸裁剪和左右眼三个调试窗口。按f把当前帧存成frame.png便于事后分析,按c退出。注意在build目录下启动可执行文件——人脸检测模型用的是相对路径,见 src/main.cpp。
工作原理:从一帧画面到瞳孔中心的四段流水线
整套眼动追踪就是一条流水线,每段的输出都是下一段的输入。
① 检测:先框出人脸。程序加载res/里预训练好的 Haar 级联分类器——一种扫一遍画面就能框出人脸的检测模型——在红色通道上找最大的一张脸。这个人脸矩形,就是第二步的输入。
② 定位:按百分比裁出眼区。在人脸矩形内部,用固定比例切出左右眼的小区域,顶部偏移、眼区宽高这些比例集中在 src/constants.h,不依赖额外的眼睛检测器。两个小眼区图像,送进第三步。
③ 计算:让梯度投票选出瞳孔。这是 Fabian Timm 的算法,实现见 src/findEyeCenter.cpp。先算图像梯度,也就是相邻像素亮度突变的方向和强度;再按阈值筛掉弱梯度。每个强梯度点朝"自己指向的候选位置"投一票,票分最高的点即瞳孔中心。随后一次泛洪填充,清掉容易出现在区域边缘的假峰。坐标到手,进入收尾。
④ 可视化:画给你看。OpenCV 窗口实时画出人脸框、眼区框和瞳孔点,原始帧与裁剪结果各占一窗,方便你逐段核对结果。
追踪不准的排查方法:调优手册
先对号入座,再动手改参数:
| 你看到的现象 | 排查顺序 |
|---|---|
| 瞳孔点来回跳、不稳定 | 先查光照:去掉面部直射光、压低摄像头曝光;再查距离与角度:50–70 cm、镜头略高于眼睛朝下压,把镜面反光压下去 |
| 瞳孔点总钉在眼框边缘 | 打开kPlotVectorField观察梯度方向是否收敛到瞳孔,或微调kPostProcessThreshold |
| 眼区裁切位置偏了 | 调整 src/constants.h 里kEyePercentTop、kEyePercentWidth等四个百分比 |
| 帧率掉得厉害 | 把输入分辨率降下来,或缩小参与计算的区域 |
眼区比例参数长这样(节选自 src/constants.h):
const int kEyePercentTop = 25; const int kEyePercentWidth = 35; const double kGradientThreshold = 50.0;改完重新make一次即生效。
先看清它的边界:适合、不适合与替代选型
适合:学计算机视觉基础——代码量小、流程透明,每步都能打印中间结果;做低成本原型验证——只要"瞳孔在哪"这一个信号,它已经够用。
不适合:直接做屏幕级视线定位。作者在 Readme.md 里写得很直白:目前只是算法的参考实现,瞳孔定位效果不错,但缺眼角这类参考点,算不出你实际在看屏幕的哪个位置。需要 120fps 以上帧率或医疗级精度的场合,也别选它。
替代选型:预算充足、想要开箱即用的硬件,可以看 Eye Tribe 这类消费级眼动仪;要纯摄像头的商用能力,XLabsgaze 提供 SDK 和浏览器插件;坚持开源又要完整视线追踪,Pupil 目前最成熟,代价是需要专用硬件头环。
常见故障:三个高频问题的快速处理
cmake 配置阶段提示找不到 OpenCV。
- 先确认装好了:
pkg-config --modversion opencv应能输出版本号。 - 手动编译装到自定义目录的,配置时显式指路:
cmake -DOpenCV_DIR=/你的/opencv/路径 ..。 - 核对 CMake 与编译器版本(CMake 3.10+、GCC 7+)。
程序启动了,窗口里却没有画面(摄像头打不开)。
- 看设备是否存在、有无读权限:
ls -l /dev/video0。 - 关掉正占用摄像头的程序(视频会议、录屏工具)。
- 代码默认取 0 号摄像头,多设备时改 src/main.cpp 里的设备索引。
检测到瞳孔,坐标却忽前忽后地漂。
- 按上面"调优手册"的顺序,先过一遍光照和距离。
- 微调 src/constants.h 里的眼区百分比,让瞳孔落在眼框正中。
- 头部尽量稳住——头部大幅移动会放大定位误差。
回到安装章节把仓库拉下来,跑一遍./bin/eyeLike,拿到稳定的瞳孔坐标,你的眼动交互就从这里开始。
【免费下载链接】eyeLikeA webcam based pupil tracking implementation.项目地址: https://gitcode.com/gh_mirrors/ey/eyeLike
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考