项目介绍

人眼中心定位是一个用于眼部追踪的算法,它来源于github中eyelike项目,C++语言实现,依赖OpenCV库。
关于代码的编译,作者提供了CMakeLists.txt文件,同时支持Windows,Linux和Mac OS X。
该项目只实现了简单的2维眼球跟踪功能,没有3维信息,也没有视线跟踪和估计功能。
作者提供了另一个博客链接Simple, accurate eye center tracking in OpenCV,其中有一段演示视频,可以看到跟踪效果。
项目主要的算法来源于剑桥大学的一篇文章:《Accurate eye centre localisation by means of gradients》。


算法介绍

该项目从网络摄像头读取视频,进行人脸检测,再根据检测到的人脸图像截取左眼和右眼的ROI区域,最后根据截取到的ROI进行眼球中心检测与跟踪。所以算法的主要包含三个部分:人脸检测,ROI截取,眼球中心定位。

人脸检测

这里面用的人脸检测方法就是OpenCV中集成好的级联分类器,这是一种非常古老的人脸检测方法,利用Haar特征或LBP特征训练多个弱分类模型,组成最终的分类器,进行人脸检测。
OpenCV中提供了多个已经训练好的模型,考虑到侧脸的情况下左右眼将出现遮挡,所以在项目中目前只用到了正面脸检测。


眼部ROI截取

得到整个人脸图像后,截取出左右眼部区域的ROI图像,这个截取过程就是简单的根据先验知识,对于如下的一张人脸图像(注:该图片来源于互联网):


那么,左右眼的区域大小和位置大概是固定的,整幅图像的长宽分别为wIwIw_{I},hIhIh_{I}。眼部区域的长宽为wEwEw_{E},hEhEh_{E},则有:

wE=35100wIwE=35100wI

w_{E}=\frac{35}{100}w_{I}

hE=30100hIhE=30100hI

h_{E}=\frac{30}{100}h_{I}
对于左右眼ROI图像左上角像素点位置:

yL=yR=25100hIyL=yR=25100hI

y_{L}=y_{R}=\frac{25}{100}h_{I}

xL=13100wIxL=13100wI

x_{L}=\frac{13}{100}w_{I}

xR=wI−wE−13100wIxR=wI−wE−13100wI

x_{R}=w_{I}-w_{E}-\frac{13}{100}w_{I}


眼球中心定位

现在截取出了眼部ROI图像,就到了之前提到的那个论文的方法了,《Accurate eye centre localisation by means of gradients》。其实它用到的方法很好理解,一副图像,每个像素点都可以计算出梯度,而梯度包含了幅值和方向。对于眼部图像而言,越是靠近眼球中心的位置,灰度值就越低,就会有更多的梯度方向的连线交于那个点。

所以,中心位置的确定,就是在找梯度方向上的直线相交最多的那个点。


补充

除了眼球定位,这个项目还做了眼睑的定位,是在眼球中心位置与眼部ROI区域确定后,增加了简单的后处理,我没有把这个作为重点。


性能评价

最后,根据梯度方向的眼球定位算法在某些方面还是有可取之处的。它很简单,非常容易理解,然后没有使用边缘之类的纹理特征,这使得在较低分辨率的图像和视频下也能做到定位,因为即便是分辨率很低,起码梯度的特征相比边缘的特征,受到的影响更小,算法在这方面的鲁棒性很好。但是它毕竟是一种基于纹理特征的定位算法,这意味着,当眼部图像的纹理受到外部影响而改变时,算法的定位效果会变得很差。比如我测试的图像是一款头戴式设备采集到的,里面为了照明增加了光源,光源反射到眼球位置后出现了亮点,而这个亮点的存在改变了眼部原来的纹理特征。


实验效果

人脸检测

眼球定位

源码下载

当然可以直接到github地址下载eyelike啦。
同时,我调通了Windows在VS2010版本,依赖OpenCV2.4.11,点击下载。

眼球中心定位跟踪算法—eyelike相关推荐

  1. 眼球中心定位跟踪算法—eyelike 代码解析

    论文及代码地址 原始论文 Accurate eye centre localisation by means of gradients 原始代码 eyelike 代码分析(很久之前写的,排版有点乱,有 ...

  2. tdoa/aoa定位的扩展卡尔曼滤波定位算法matlab源码,TDOA/AOA定位的扩展卡尔曼滤波定位跟踪算法Matlab源码...

    TDOA/AOA定位是无线定位领域里使用得最多的一种定位体制,扩展卡尔曼滤波器是最经典的非线性滤波算法,可用于目标的定位和动态轨迹跟踪,GreenSim团队实现了该算法,本源码由GreenSim团队原 ...

  3. 130万奖金池!目标检测、3D点云检测与跟踪、L4规划控制等赛事全面启动!国家智能网联汽车创新中心ICV创新算法攻关任务来了...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 国家智能网联汽车创新中心-ICV创新算法攻关任务报名火热开启! 智能网联汽车已成为汽车产业转型升级的重要战略 ...

  4. python卡尔曼滤波室内定位_基于扩展卡尔曼滤波算法的室内定位跟踪系统

    基于扩展卡尔曼滤波算法的室内定位跟踪系统 凌海波,周先存 [摘 要] 摘要:为了解决无线室内定位系统实时跟踪位置坐标误差较大问题, 提出一种基于扩展卡尔曼滤波 (EKF) 算法的室内定位方法.系统采用 ...

  5. 目标跟踪算法三:Modeling and Propagating CNNs in a Tree Structure for Visual Tracking (VOT2016冠军)

    目标跟踪算法三:Modeling and Propagating CNNs in a Tree Structure for Visual Tracking (VOT2016冠军) 文章链接:https ...

  6. 目标跟踪算法的分类(一)

    运动目标跟踪主流算法大致分类 主要基于两种思路: a)不依赖于先验知识,直接从图像序列中检测到运动目标,并进行目标识别,最终跟踪感兴趣的运动目标: b)依赖于目标的先验知识,首先为运动目标建模,然后在 ...

  7. 90+目标跟踪算法九大benchmark!基于判别滤波器和孪生网络的视觉目标跟踪:综述与展望...

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标跟踪]技术交流群 后台回复[视觉目标跟踪综述]获取本文论文! 准确和鲁棒的视觉目标 ...

  8. 目标跟踪算法_Camshift函数(学习笔记)

    在这一节中,主要讲目标跟踪的一个重要的算法Camshift,因为它是连续自使用的meanShift,所以这2个函数opencv中都有,且都很重要.为了让大家先达到一个感性认识.这节主要是看懂和运行op ...

  9. 目标跟踪算法综述与分析

    本人硕士期间研究过10个月左右的目标跟踪算法,刚入门时苦于没人指点,自己每天乱看文章,后来发现看的好多文章都是没有意义的(ps....看了一大堆meanshift,kalman啥的......),做了 ...

最新文章

  1. android LaunchMode之SingleTask
  2. computed vue 不 触发_vuejs render何时执行?以及使用vue.$refs遇到的坑。
  3. 公网对讲机修改对讲机程序_更少的对讲机,对讲机-更多专心,专心
  4. python链接mysql报错2003_Python连接Mysql报错问题解决
  5. ajax get请求成功,成功()函数的AJAX GET请求
  6. Laravel 5 测试用例 记录
  7. FreeImage 结合 VB6 使用技巧
  8. java数据流更新文件内容,数据流 · Java 文件操作 · 看云
  9. 第 29 章 电阻触摸屏—触摸画板
  10. 《愤怒的小鸟大电影》分析报告
  11. 霍纳法则c语言算法代码,霍纳法则(Horner Rule)介绍及C语言实现
  12. 【云驻共创】初探数通网络开放可编程
  13. 免安装版本的+mysql_mysql免安装版本
  14. 苹果电脑怎么打开计算机管理,mac开机启动管理怎么设置_mac如何设置开机启动管理-win7之家...
  15. php cache_expire,PHP session_cache_expire 会话函数
  16. 概率统计16——均匀分布、先验与后验
  17. 李永乐复习全书线性代数 第六章 二次型
  18. java liferay_Liferay 6.1开发学习(二):创建一个Portlet工程 | IT人生录
  19. wps怎么重命名文件_wps为什么现在不能把文件重命名,这是为什 – 手机爱问
  20. Objective C 类别(Category)与类扩展(Extensions)

热门文章

  1. 我的世界Minecraft基岩版开服服务器教程(Windows)开服器开服包下载开服网站服务器要多少钱开服核心开服端下载
  2. Window_MySQL初始化(重置)数据库
  3. 根据出生日期计算年龄(精确到天)
  4. 局部变量能否和成员变量重名?
  5. Cannot spawn .husky/pre-commit: No such file or directory
  6. 【Python】tkinter点击按钮后获取按钮本身
  7. python读取超大csv文件_python – 读取一个巨大的.csv文件
  8. 流媒体开发中H264编码NALU结构介绍与I帧判断方法
  9. http请求 响应数据格式
  10. salad --06