基于OpenCV的驾驶员状态检测系统

2019-10-21 06:24吴荣燎王泽群吴凯利李政霆
关键词:人脸检测

吴荣燎 王泽群 吴凯利 李政霆

摘 要:随着经济的发展,人们对安全问题越来越重视,尤其是驾车出行安全问题。本论文中设计了一种驾驶员状态检测的装置,运用目前热门的面部识别实时检测驾驶员的精神状态,避免驾驶员的疲劳驾驶。该装置基于OpenCV自带的计算机视觉库、Visual Studio 2015以及单片机来进行模拟,重点阐述了视频图像的灰度化的预操作,通过Haar特征训练和face.xml进行人脸检测和识别眼睛,自动判断当前驾驶员是否处于疲劳驾驶。

关键词:人脸检测;疲劳驾驶;Haar特征训练;自动判断

目前,我国道路交通事故年死亡人数高居世界第二位。交通事故导致的人员死伤和财产损失数不胜数,其中与疲劳有关的交通事故占事故总数的20%左右,占特大交通事故的40%以上人在疲劳驾驶时往往就是在高速公路,速度比平时的道路更快,只要精神稍微不集中,反应一迟钝,就会发生重大交通事故。相对来讲,那些长途客车和货运车的司机因其工作原因必须长时间开车,如果没有得到良好的休息就将引发交通事故,造成严重的人员伤亡和财产损失。司机往往意识不到自己已经疲劳驾驶这就是疲劳驾驶最最危险的地方,所以在司机处于疲劳驾驶状态得到一个提醒和警示显得十分重要。基于上述情况,设计了一种驾驶员状态检测的装置,用于检测驾驶员的疲劳情况,给予提醒,避免出现疲劳驾驶导致的交通事故。

1 系统框架设计

人眼检测就是将视频中的每一帧变成单独的图片进行操作,将摄像头采集到人脸信息传给电脑,电脑进行人脸检测和人眼检测,通过LBPH算法将人眼检测结果传给单片机,由单片机进行下一步操作,流程图如图1所示。

单单使用现成的人眼检测算法会带来很大的误判率,先进行人脸检测后再通过坐标的方式进行区域划分和人眼长度与宽度的预测来确定人眼区域,使用这种方式大大提高了人脸人眼检测的准确率和效率[1]。

2 图像灰度化

灰度表明图像明暗的数值,是单通道的数据,而我们平时摄像头采集的一般都是彩色的图像,用R(Red)G(Green)B(Blue)三通道的数据表示,我们在进行图像操作前首先将三通道的RGB图像转化为单通道的灰度图像。灰度化处理后图像依然能够保留原图的大部分信息,但对于后续的算法执行时间复杂度和空间复杂度大大降低[2]。在Visual Studio 2015中直接用cvtColor(src, dst, CV_BGR2GRAY)这个函数可以直接将彩色图像转变成灰度图像,达到图像的预操作。彩色图的像素转换为灰度图的像素,转换公式如下式2-1所示,GRAY 为灰度值。

3 系统设计原理

本系统中的人脸检测使用Haar特征进行AdaHoost分类器训练生成Haar分类器,寻找图片中的ROI(region of interest)区域并进行标定。

3.1 Haar特征

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和,Haar特征值反映了图像的灰度变化情况[3]。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。Haar分类器可由多个强分类器进行级联组合,Haar分类器由Haar-like特征加积分图加AdaHoost再加级联构成,具体强分类器的方式如下:

3.2 AdaBoost分类器

Haar特征只能取得图像的灰度变化情况的大小,但是需要对比普通人脸的图像灰度特征才能确定这张图像是否为人脸,因此需要引入AdaBoost分类器,利用足够多的正样本和足够多的负样本进行AdaBoost分类器训练,在开始训练时每一个样本都是拥有相同的权值,之后再次进行重新计算重复反馈权值的时候,将错误样本的权值提高,正确样本的权值降低。弱分类器就是根据新的权值分配进行重复的训练最后得到的[4]。级联强分类器的目标是,将若干个强分类器按一定顺序排列,希望经过训练使每个强分类器都有较高检测率,而降低误识别率,比如一个强分類器可以通过99%的人脸,但也可以通过50%的非人脸,这样如果有20个强分类器级联,那么就能达到0.99^20约等于98%的总识别率,但是也仅只有约等于0.5^20 0.0001%的错误识别率。这样的结果是可以很好地满足需求[5]。最终,通过将弱分类器重复反馈生成强分类器。最终将正确的结果输出出来,级联分类器示意图如图2。

4 系统工作实现

4.1 人脸识别过程

本文使用的是OpenCV自带的haarcascade_frontalcatface.xml文件,里面包含OpenCV提供的人脸库,使用这个文件就能迅速、准确的识别出人脸,一旦检测出人脸后,用矩形将人脸框出。画出人脸的矩形后继续在人脸矩形的范围内检测人眼的位置,即将人脸区域作为ROI区域,接下去的操作只会在ROI区域内处理。这个步骤可以运行OpenCV自带的haarcascade_eye.xml文件,检测到眼睛后,同样用矩形将眼睛框出。如果检测到脸,但是没有检测到眼睛,说明驾驶员眼睛已经闭上或者睁得很小,处于疲劳状态,此时若驾驶员眼睛闭上时间大于1秒或者眨眼频率过快,我们即可判断驾驶员需要休息,已经不太适合继续开车了,这时的电脑就会发送一个信号给单片机,发出报警声,来提醒驾驶员清醒或者停车休息。

4.2 实时传输

一旦系统检测到驾驶员眼睛的变化情况,判定驾驶员处于疲劳状态,电脑会通过串口自动发送一个信号给单片机,实时监测,若在警报声的提醒下驾驶员恢复精神,电脑又会发送一个信号给单片机,令其停止警报。在这里我输入的程序为发送数字1和数字0。OpenCV 提供的视觉处理算法非常丰富,加上其开源的特性,不需要添加新的外部支持也可以完整的编译链接生成执行程序,代码经过适当改写可以正常的运行在ARM嵌入式系统中,是图像处理十分重要的软件支持。只需要在电脑和单片机双方规定好通信协议,如波特率,奇偶校验,数据字长,起始位,中止位等协议。

4.3 实验结果

将控制蜂鸣器和串口通信的代码输入进单片机,连接电脑,启动系统,电脑会自动打开摄像头并且将图像数据实时经过分类器处理,画出矩形框,正常状态和疲劳状态的图像对比如图3和图4。当系统检测到图3状态时,电脑通过串口输出数字0给单片机,单片机不行进行下一步的操作,一旦系统检测到图4状态时,电脑通过串口输出数字1给单片机,单片机就会让LED小灯闪烁并提供一个脉冲给蜂鸣器,令蜂鸣器发出响声,以此来模拟当驾驶员出现疲劳驾驶时的警报。

5 结语

本文介绍的系统主要运用计算机视觉库(OpenCV),软件开发工具(Visual Studio 2015)以及下位机制作模拟了一套驾驶员检测系统,旨在解决目前众多交通事故中由疲劳驾驶导致的交通事故。从实用角度看,如果每辆汽车上都装有这种装置,有利于减少人员伤亡和财产损失,为长途出行的驾驶员提供了一份警示和安全保障,防止驾驶员不知不觉疲劳而导致意识模糊,反应迟钝,操作无力。经过试验,该系统性能稳定,效果良好。其次,各部分算法还有待精进,比如需要完全闭眼时才能准确检测并报警,眯眼会判定驾驶员精神状态良好,这部分有待改进。

参考文献:

[1]尚丽娜,石晴瑶,方健.基于OpenCV的人眼检测及疲劳判断[J].电子世界,2018(21):19-20+23.

[2]邱鹏瑞.基于OpenCV的视频监控与跟踪系统研究[J].计算机与数字工程,2019,47(04):888-891.

[3]米罗西.图像特征提取三大法宝:HOG特征,LBP特征,Haar特征[EB/OL].

[4]刘伍丰,何前磊,郑维.基于HAAR特征与BP神经网络的车牌识别技术研究[J].电子测量技术,2019,42(08):61-67.

[5]余建波.基于OpenCV的视频人脸识别系统设计[J].信息通信,2018(12):40-42.

项目基金:江苏省高等学校大学生创新创业训练计划项目

项目编号:201913655008Y

作者简介:吴荣燎(1998-),男,浙江宁波人,本科在读,研究方向:汽车电气控制。

猜你喜欢
人脸检测
肤色与唇色信息相结合的人脸检测
人脸检测技术综述
基于Android的车载疲劳驾驶监控系统研究与设计
一种鲁棒的长期人脸特征点跟踪系统
基于改进的Adaboost算法在人脸检测与识别中的应用与研究
JNI技术在基于OpenCV的人脸与微笑检测中的应用
基于人脸特征定位的SNS网站应用组件研究与设计
基于Android平台的人脸识别系统设计与实现
基于Matlab的人脸检测实验设计
基于肤色模型与改进Adaboost算法的人脸检测