基于疲劳驾驶的人眼定位方法研究

2020-06-22 10:29杜永昂杨耀权金玥佟
网络安全与数据管理 2020年6期
关键词:瞳孔人脸灰度

杜永昂,杨耀权,金玥佟

(华北电力大学 控制与计算机学院,河北 保定071003)

0 引言

随着社会经济的发展,我国汽车保有量逐年增加,交通安全形势愈发严峻。 在所有交通事故的成因中,由疲劳驾驶造成的交通事故占总交通事故的20%左右,占特大交通事故40%以上[1]。 目前,疲劳驾驶的检测方法主要分为三大类:基于生理指标的检测方法、基于驾驶员行为特性分析的检测方法和基于面部表情识别的检测方法。基于生理指标的检测方法采用接触式测量方式,一般通过测试驾驶人员的生理信号来推测驾驶人的疲劳状态。 文献[2]使用一种自制驾驶员脑电图信号检测装置,采用快速傅里叶变换提取脑电图功率谱密度,当分析脑电图功率谱密度发现疲劳时,采取一种自动减速的车辆速度控制策略。这种接触式生理参数测试方法通常需要被测者佩戴相应的装置(如电极片等),会给驾驶行为造成极大干扰,不适合实际行车环境下的应用。 基于驾驶人行为特性的疲劳检测方法受道路环境、行驶速度、个人习惯、操作技能等的影响,并不适用我国复杂多变的道路情形。 得益于机器视觉等人工智能的发展,基于面部表情的疲劳驾驶检测方法因其应用成本较低、无需干扰驾驶人员,已经成为该领域的研究热点。 文献[3]基于开源库提取的人脸轮廓点计算眼和嘴的纵横比,生成眯眼和哈欠特征,基于线性拟合趋势提取法生成车辆操纵活跃度特征,然后采用改进的随机森林模型对疲劳状态进行识别。 文献[4]提出了一种采用级联的序列级和帧级两层检测模型,分别处理持续睁眼和眨眼的视频序列, 实现由粗到精渐进地检测眨眼的方法,通过随机回归森林计算眼睛开合度,最终完成眨眼过程。 文献[5]针对复杂光照和姿态变化造成疲劳驾驶的原因,提出了实时增强约束局部模型的多信息疲劳检测方法。 文献[6]提出比例缩减区域(PRA)的方法快速定位人眼,其原理为对面部区域反复迭代缩减,最后得到对人眼区域的定位。 因此,构建一种可靠快速的人眼定位技术是对驾驶人员疲劳检测的关键。 由于光照、道路两侧树木及楼房阴影等原因的影响,直接在原始图像中进行人眼定位存在较大困难,而且准确率较低,因此,人眼定位一般分为如下步骤:第一步,在原始图像中定位出人脸区域;第二步,在人脸图像中粗定位出人眼区域;第三步,对人眼区域进行精确定位。

考虑到不同特征维度对人脸的贡献程度不同,本文提出了一种基于信息熵加权的方向梯度直方图(Histogram of Oriented Gradients,HOG)与支持向量机(Support Vector Machine,SVM)相结合的人脸检测算法,可以有效提取人脸特征,并准确完成人脸定位。 在完成人脸检测之后,以人脸区域为母版,先采用OpenCV 开源实现对人眼的粗定位;然后采用自商图消除光照影响,遍历寻找最优二值分割点;最后用二值分割图像进行积分投影, 实现瞳孔的精确定位。 该算法解决了复杂光照下的瞳孔定位问题。

1 人脸检测算法

梯度直方图HOG 是在2005 年CVPR 会议上由Dalal 提出的特征提取算法[7]。 近年来,HOG 特征提取算法越来越多地受到国内外学者的青睐,积极探索其潜能及应用范围,但在对HOG 特征的相关研究中,大部分学者只是将HOG 算子应用到人脸全局中或只是简单地进行全局特征和局部特征的级联。文献[8]提出的信息熵加权的HOG 特征提取算法将人脸分割成不同块,在不同块中进行加权来提高不同部位的识别率。

本文提出一种基于信息熵加权的HOG 特征提取算法。 首先计算每幅图片的信息熵;然后提取每幅图片的原有HOG 特征;最后对原有提取的HOG特征实行阈值分割,将符合条件的特征点加权信息熵形成新的HOG 特征。 算法采用SVM 作为分类器,将加权后的HOG 特征作为SVM 的输入特征进行分类。 算法步骤如下:

(1)人脸图像预处理

对检测到的图像进行灰度变换,单通道图片相较RGB 三通道图片信息量更少,可以更加快速地完成训练。

(2)图片HOG 特征提取

本文将人脸图像矩阵I 的维数设定为Ix×Iy,其中x、y 均为64;每个细胞单元尺寸设定为(8,8);每2×2 个细胞单元组成一个块(block);每个细胞单元分为9 个方向块;滑动步长设定为一个胞元长度。检测窗口在横向滑动7 个块,在纵向滑动7 个块,共提取1 764 个特征点。

(3)信息熵加权到特征点

由于HOG 特征点只在人脸轮廓线或鼻子、嘴巴等区域有较为明显的特征,而在人脸大部分较为平滑的区域特征点不明显,故将信息熵加权到该区域。 设DN×M为特征点向量,其中N=1,M=1 764,则特征点均值为:

其中len(DN×M)为特征点向量长度。

加权特征点计算为:

其中DN×M(i)为第i 个特征点向量,E[I]为图片信息熵。 本文阈值点的选择在实验部分有详细的实验数据作为参考。

(4)对信息熵加权后的HOG 特征点进行SVM分类。

2 人眼定位

2.1 基于自商图的局部纹理建模

自商图的计算公式为:

其中,R 为自商图,I 为灰度图,F 为滤波核。

根据自商图的计算公式,将采集的原始图像转变为自商图,消除眼睛区域的光照变化,以更好实现二值化阈值分割。 将人眼区域灰度图进行低通滤波,遍历灰度图与低通滤波图像中的所有像素点,“点对点”地作商运算,并将计算结果归一化到[0~255]灰度范围。

2.2 积分投影定位人眼

一般而言,脸部图像中眼睛区域与周围区域相比较暗,利用该特征,常采用灰度积分投影法来定位眼睛,根据图像的波谷和波峰的分布情况来定位眼睛区域[9]。

假设图像大小为m×n,G(x,y)为像素点(x,y)的灰度值,其在水平方向的积分投影为:

在图像[y1,y2]区域的垂直积分投影为:

3 本文瞳孔定位算法

本文提出了由粗到精的瞳孔检测方法,以自商图为基准寻找二值分割点,实现了眼部区域光照不变性,以灰度积分投影为依据实现了瞳孔精确定位。传统灰度积分投影是直接将原始图像进行灰度化,然后将灰度图进行二值化,最后将二值化图像进行水平投影与垂直投影。 此方法虽然计算效率高,但是容易受光照及阴影所影响,在实际应用中存在一定的缺陷。本文引入自商图,用以消除光照的影响,同时可以保留积分投影的运算效率,满足了实际运用。 瞳孔定位算法主要步骤为:

(1)应用OpenCV 得到左、右眼睛的大体区域。

(2)对眼睛区域进行自商图变化,结果如图1(b)所示,本文滤波核采用高斯滤波。

(3)从图1(b)不难看出,眼部灰度最小值在瞳孔附近,故遍历眼部区域自商图,将灰度值进行排序,得 到 灰 度 最 小 值。 设FN×M为 自 商 图,N、M 分 别 为 该图行列数,则最小值为:

(4)以T 为分割点做灰度阈值变换,将其转换为二值图像:

(5)对二值图像进行水平、垂直积分投影。

(6)得到瞳孔定位的横纵坐标。

如图1 所示,(a)为原始图像人脸检测区域;(b)为图像自商图;(c)为二值化图像。 可以看出基于自商图的眼部细节更加突出。 本数据来源LFW 公开数据集,数据编号为Zico_0002。

图1 原始图像、自商图及二值图像对比结果

本文提出的瞳孔定位算法流程图如图2 所示。

图2 瞳孔定位算法流程图

4 实验结果及分析

通过Python 工具平台进行实验,实验运行环境为InterCore I5 处理器,8 GB 运行内存,Windows 10操作系统。 人脸检测数据集采用香港中文大学公布的大型人脸识别数据集CelebA,该数据集包含20 万张人脸图片,人脸属性有40 多种,在表情、光照及姿态等方面更有权威性。 瞳孔定位实验数据集采用HELEN 系列数据集,该数据集包含348 幅图片。 实验识别分类器采用支持向量机分类器。

4.1 基于CelebA 库人脸检测实验

本文选用CelebA 人脸库编号为1 ~200 的图片作为训练样本,选用编号为201~350 的图片作为测试样本。 正、负训练集样本共为400 张;正、负测试集样本共为300 张。 首先对特征点阈值进行选择,通过不同阈值点对比选择出最佳的阈值点。

在CelebA 人脸库中对于不同阈值共进行了4次实验,每一次对人脸特征点进行不同的阈值划分,通过对4 次阈值划分所得的实验结果进行比较,选取最佳阈值点。 得到的最佳实验结果即为本文方法的最终实验结果。

令Mean1=0.8×Mean;Mean2=1.25×Mean;Mean3=1.5×Mean。表1 给出了几种阈值的识别结果。识别结果用百分比表示。 不同阈值识别率比较如图3所示。

表1 不同阈值所得识别结果 (%)

图3 不同阈值识别率比较

根据不同阈值仿真结果可以看出以Mean 为阈值点识别效果最佳,Mean2 次之,然后依次为Mean3、Mean1。 如果Mean1 作为阈值划分点,信息熵只能加权到小部分特征点,不能很好表示全局特征点,导致识别率较低;Mean2、Mean3 则是因为信息熵加权到了太多的特征点,造成了大量噪声,给分类带来了干扰,导致识别率有所下降。

在选择好最佳阈值点后,用原始HOG+SVM 人脸检测与本文人脸检测算法进行实验对比,实验结果如表2 所示。

从不同算法的对比仿真结果中可以看出,本文提出的人脸检测算法识别率高于原始HOG+SVM人脸检测算法。 原始HOG+SVM 算法主要依赖于全局特征,有部分关键特征点并不能很好地体现出来,而本文所提出的信息熵加权算法则对这些特征点进行信息熵加权,从而提高了识别率。

表2 不同算法识别率比较 (%)

此外,本文还在HELEN_1 公开数据集对原始HOG+SVM 人脸检测算法与本文提出的人脸检测算法进行了仿真实验,并选择部分样本图片作为展示结果,以便更加直观地体现该算法性能。 其中数据类型分别为脸部右侧旋转、脸部左侧旋转、光照明亮、光照较暗、光影对比强烈、侧脸、阴影强烈、佩戴眼镜、抬头、低头等类型。 数据编号分别为10697993_1、13789611_1、16542667_1、103236168_1、137346980_1、170508172_1、143588896_1、151902153_1、167629013_1、213033315_1。 仿真结果如图4、图5所示。

图4 原始HOG+SVM 人脸检测算法结果

图5 本文人脸检测算法结果

通过对HELEN_1 公开数据集验证可知,如图4所示,HOG+SVM 人脸检测算法对于脸部左侧旋转(13789611_1)、 阴 影 强 烈(143588896_1)、 抬 头 幅 度过大(167629013_1)等情况检测结果均不佳,出现漏检等情况。 本文提出的人脸检测算法,如图5 所示,无论对于脸部右侧旋转、左侧旋转,还是抬头等均可达到满意的检测效果,但是对于阴影强烈(143588896_1)的情况因为训练样本不足还有待增强。 由仿真实验结果可知,本文提出的人脸检测算法比传统人脸检测算法精度更高、鲁棒性更强。

4.2 瞳孔定位实验

本文提出的基于自商图先粗后精的瞳孔定位算法,充分考虑了光照、阴影等环境,该算法对光影及噪声干扰等有较强适应性。 一般积分投影法在眼睛定位时,采用的图像预处理方法为自适应阈值分割法,以该法获取二值图像。 虽然该分割法在眼部区域光照较为明亮时会得到较好的效果,但当面部阴影较为严重时,使得整个眼部都会出现二值为黑的情况,如图1(c)所示。 文献[10]提出了一种基于肤色和积分投影结合的眼部定位方法,该方法在水平投影和垂直投影方向均出现了多个波峰、波谷的情况,不易得到准确的瞳孔坐标值。 本文以眼部最小灰度值为分割点,可以较为理想地得到瞳孔横纵坐标值。

本文随机选取50 张实际行车环境图片用于瞳孔定位实验,首先通过上文提到的自商图处理眼部区域,之后通过对每幅图片遍历求取灰度最小值,以该灰度值进行图像二值化,最后进行灰度积分投影,得到准确的瞳孔定位坐标。

表3 给出了本文与传统积分投影瞳孔定位的识别结果。 识别结果用百分比表示。

表3 本文与传统积分投影瞳孔定位算法比较(%)

本文算法充分考虑了眼部区域结构性特点,即瞳孔附近灰度值最低的特性,并引入自商图消除光影的影响。 由仿真实验结果可知,本文提出的瞳孔定位算法比传统算法泛化能力更强,准确度更高。

为了更加直观地展现该算法的优势, 本文从样本中选取部分图片作为展示结果。其中数据类型分别为脸部右侧旋转、脸部左侧旋转、抬头、表情(打哈欠)等类型。 数据帧数分别为1316、1139、469、446、66、26。 仿真结果如图6、图7 所示。

图6 基于传统积分投影瞳孔定位

图7 基于自商图二值分割点瞳孔定位

通过数据仿真结果可知,如图6 所示,基于传统积分投影法对瞳孔定位时,如果头部出现偏转、抬头时将会出现误检等情况,如编号1316、1139、469、446 所示,在实际应用中检测精度较低。 本文提出的瞳孔定位算法,如图7 所示,对于头部左右旋转、抬头等情况都能较为精准地定位出瞳孔位置。 相较于传统的人眼定位方法,本文提出的瞳孔定位方法在准确度方面得到了较好提升。

5 结束语

人眼定位是疲劳驾驶检测的关键环节,针对现有方向梯度直方图人脸检测算法泛化能力不佳的问题,本文提出了一种基于信息熵加权的HOG 特征提取算法,该算法将待分类的人脸特征进行阈值加权,提高了原有人脸检测的识别率。 针对现有瞳孔定位准确率不高的问题,本文提出了多算法协同工作的瞳孔定位方法,以自商图为基准寻找二值分割点,实现了眼部区域光照不变性,以灰度积分投影为依据实现了瞳孔精确定位。 仿真实验结果表明,本文提出的人脸检测算法比传统人脸检测算法鲁棒性更高、泛化能力更强;本文提出的瞳孔定位算法相较于传统方法,定位精度更高,可以为疲劳驾驶检测研究提供更加科学、可靠的数据。

猜你喜欢
瞳孔人脸灰度
采用改进导重法的拓扑结构灰度单元过滤技术
有特点的人脸
一起学画人脸
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
Arduino小车巡线程序的灰度阈值优化方案
三国漫——人脸解锁
瞳孔
瞳孔大,决策力差
长得象人脸的十种动物
屠岸的散文诗(两章)