董劭杰,陈哲
(南京工程学院,南京 211167)
随着图像处理技术的进展和计算机处理能力的提高,以家用计算机作为硬件载体已经完全可以运行一些计算机视觉库,并且得到相对准确的结果。利用这一结果,一部分残障人士通过增量的软件更新和家用摄像头就可以方便地控制使用家用电脑,而不必做硬件层面的大改动。另外,人的眼部动作蕴含了非常多的信息量,同时双目的目光聚焦处也代表了当前用户的注意力集中点,利用眼球的这一属性,可以适量减少操作过程中的误触和不当操作,有助于提高工作效率。最后,对新的人机交互方式的探索也许能够带来更好的用户体验,帮助人们更加便捷地使用计算机提高生产力。
在对人眼进行定位的过程中我们使用了OpenCV3中的Haar分类器。Haar-like特征最早是由Papageor⁃giou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征。Haar分类器的工作原理如下:分布于目标区域中的矩形框通过强化的特征来反映各个位置的灰度变化,并且最终由这些变化情况来对目标图像进行分类识别。
图1
最初的特征库包含3种类型的特征,如上图1所示。图像中白色区域的像素灰度值与减去黑色区域像素灰度值之和,所得到的数值就是所覆盖区域的特征值[1]。
Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构[2]。
利用Hough变换,可以方便地在人眼中找到近似圆形的瞳孔区域并且进行定位。使用Hough变换之前的必要条件是先利用Haar特征将眼部区域进行预先分割,否则将会大大增加处理难度。以下为实验结果。
(1)直方图均衡化
直方图是图像的最基本的统计特征,它反映的是图像的灰度值的分布情况。直方图均衡化的目的是使图像在整个灰度值动态变化范围内的分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。在处理图像之前,首先对图像进行灰度直方图处理,删除其中不必要的噪点,才可以得到更好的后期处理效果。
图2
图3
(2)利用图像卷积来进行边缘分割
无论是上文中的Hough变换还是Haar-like方法,都需要首先对图像进行边缘分割才能更好地确定需要处理的区域,排除背景和噪声。所以,这里使用近似二阶导数的Laplace算子来进行图像的卷积操作并且最终得到图像的边缘分割结果。
最终结果再经过反相和锐化如图4。
图4
图5
想要实现眼球鼠标,首先需要的就是捕捉连续的眼部图像。这里考虑到以后的应用场景一般为家用,所以我们选用了一般的家用60Hz摄像头作为图像的来源。在实际使用过程中,由于设备的性能限制,我们并没有逐帧的处理比较图像,而是采用了每n帧一次的方式来处理图像,事实证明:适当的降低处理的帧率反而有助于获得更加有价值并且抖动较小的图像。具体的比较结果如图6:左图为n=2即每两帧跳过一帧时的处理结果,而右图为n=3即每三帧跳过一帧时的处理结果。
图6
如图6所示,使用目光在屏幕上绘制圆形之后,左侧帧率较高的时候轨迹出现了较多的折角,相较于右图显得不平滑不流畅。
处理图像是为了从图像中提取到有意义的信息并且供给下一步的图像比较过程。主要涉及到的步骤按照时间轴分布如下:
(1)二值化和灰度处理
由于一般的图像中很难保证没有影响识别的噪声,同时本装置最终只需要识别颜色较浅的眼白上的黑色瞳孔,所以首先利用二值化或灰度处理来消除多余的颜色带来的干扰。至于二值化和灰度化之间的选择,经过对比,在复杂的背景环境下尽量还是应该选择灰度化处理,这样可以保留更多细节。图7-8为对比图,背景为白墙的前提下,灰度处理能够保留更多的细节。
图7
图8
(2)利用Haar分类器来进行眼部识别和定位
利用图像的Haar特征,可以确定人脸的位置,并且进一步确定人眼的位置。在位置关系上人眼位置相对人脸区域具有一定的不变性,如:人眼位于人脸的上半部分,人眼对称分布在人脸两侧,利用这些先验知识可以减少人眼定位的搜索区域;其次,人眼区域的灰度变化值低于周围区域的灰度变化值,因此,可以利用阈值分割算法分割出人眼候选区内含有人眼的区域。具体效果如图9:
图9
但是,在实际使用过程中,是没有这样直观地展示和对比过程的,并且考虑到设备的处理能力和算法的一些缺陷,也存在一定的检测失败情况。实际测试中,在头部快速摆动的两秒钟之内摄像头捕捉了40张图像,批量处理过后只有两张图片的处理结果出现了错误,这样的准确率已经达到了要求。
(3)利用Canny算子(卷积)做边缘处理
在前面的理论部分已经提到过,利用Laplace算子对图像进行梯度计算并且最终得到图像中对比度符合阈值的边缘图像。而Canny算子正是OpenCV3中提供的一种对图像做边缘处理的算子,利用Canny算子,可以方便地将需要识别的色块分割出来转化为特定的线条,并且最终提取出有效信息。
(4)利用Hough变换检测瞳孔(圆形特征)
众所周知,瞳孔边界的轮廓近似地构成了一个圆形,这样就可以利用Hough变换来获取瞳孔的中心位置。由于比直线检测多出一个维度,使得标准的Hough圆检测需要大量内存且速度较慢。出于对运算效率的考虑,OpenCV3实现的Hough圆检测是一个比标准Hough圆变换更为灵活的检测方法:Hough梯度法,也叫2-1Hough变换(21HT)。原理是首先对图像进行Canny边缘检测,然后考虑边缘图像中的每一个非0点的局部梯度,通过CVSobel()函数计算x,y方向上的Sobel一阶导数得到梯度,利用得到的梯度,由斜率指定直线上的每一个点都在累加器中被累加,然后从累加器中这些点中选择候选的中心画圆[3]。实际的检测效果如图10。
图像经过处理之后我们便得到了一个关键信息,即瞳孔的中心位置。利用这个中心位置,只要再经过参数的整定,便可以得到目光在屏幕上相应的聚焦点,并且最终实现眼球鼠标轨迹的绘制。
图10
(1)参数整定
为了实现最终的目标,必须先在绘制轨迹之前确认瞳孔位置和屏幕上目光聚焦位置的对应关系。本文中采用的方法便是使用标准大小的特定图像来整定参数,如图11。每次在使用者的目光移动到目标点的时候都进行一次记录,将此时的目光聚焦点和瞳孔位置形成对应关系,这样就可以得出瞳孔移动距离到目光移动距离的放大倍数。
图11
经过实验和测量,在日常使用家用电脑的过程中,只要满足在头部基本不晃动的情况下用目光能够脚轻松地遍历屏幕这样的条件,瞳孔移动距离到目光移动距离的放大倍数就基本不会随着目光的移动而出现较大的变化。而上述条件也符合一般情况下大多数人使用电脑的场景。
(2)绘制轨迹
为了动态标注轨迹,需要有可视化的引导,这里我们使用了Pillow集成的绘图功能,这里不做赘述。
本文探讨了利用OpenCV3完成眼球鼠标的可行性,并且成功进行了验证。以一般家用计算机的算力,借助常用的摄像头,就可以完成对人眼球信息的搜集。这样的装置能够帮助残疾人或行动不便者更加便利的使用电脑,有一定的社会意义和研究价值。