基于ARM的防疲劳驾驶检测系统

2015-10-20 09:13陆仲达王丽婧韩运起
电视技术 2015年15期
关键词:分类器摄像头灰度

陆仲达,王丽婧,韩运起

(齐齐哈尔大学计算机与控制工程学院,黑龙江齐齐哈尔161000)

疲劳驾驶是当今交通安全的重要隐患之一。据统计,全世界每年因交通事故导致死亡的人数达60万,直接经济损失约125亿美元,这些事故中57%的灾难性事故与驾驶员疲劳驾驶有关。驾驶员工作性质特殊性、工作环境、道路环境、天气状况,以及受利益驱使,诸多原因下,越来越多的人出现疲劳驾驶[1]。驾驶员产生疲劳后,随着生理机能下降,身体就会有一定的体现,例如眼睑下垂、低头、瞌睡、动作缓慢等,这些都可以作为身体疲劳的特征变量[2]。目前的疲劳检测主要是基于检测驾驶员生理信号、驾驶员生理反应特征、驾驶员操作行为和车辆状态信息等方法[3]。本文通过判断眼睛的闭合程度来检测驾驶员的疲劳状态,是基于驾驶员生理反应特征的疲劳检测系统。

1 疲劳状态判断

疲劳状态的判定需要从两个方面考虑,一是通过眼睛的闭合程度来获得的驾驶员处于疲劳界限;二是在规定时间内多次检测所获得的驾驶员处于疲劳状态时间的长短[4]。

在驾驶员处于疲劳界限的判断中,系统选择摄像头来采集驾驶员的脸部图像信息传递给主控芯片,由图像信息获取驾驶员眼睛闭合程度。先将摄像头采集到的驾驶员面部图像与眼部分类器做比较,然后在合适的区域提取眼部图像,进行灰度处理转换成灰度图,并对灰度图进行水平直方图计算,由此得到一个能描述驾驶员眼睛闭合状态的数值。通过PERCLOS算法处理检测信号并以此来判断驾驶员的疲劳状态[5]。疲劳状态的表征为0~1之间的数,1表示驾驶员的眼睛完全睁开,0表示驾驶员的眼睛完全闭合。当值小于0.2时就表示驾驶员已经处于疲劳状态。针对如何确定驾驶员处于疲劳状态时间的长短,由研究结果得知,一般情况下人们眼睛闭合的时间在0.2~0.3 s之间,驾驶时若眼睛闭合时间达到0.5 s就很容易发生交通事故。为排除驾驶员眨眼而造成的误检,在系统运行时每隔100 ms取一帧图像数据处理,若是连续5次都检测到驾驶员都处于疲劳状态时就可认为此事驾驶员正在疲劳驾驶。当以上两个因素同时出现时,则说明驾驶员处于疲劳状态,应立即开启声光报警信号。

2 系统硬件

系统的硬件组成包括5个部分,分别是:主控芯片、电源电路、传感器电路、存储器电路和报警电路。系统基本原理框图如图1所示。

图1 系统原理框图

系统的主控芯片采用三星公司的S3C2440芯片,此款32位微处理器,其处理器是一个由Advanced RISC Machines公司设计的16/32位的使用ARM920T内核的RISC处理器,能为手持移动设备和其他类型的应用设备提供低功耗、高性能的解决方案。采用专用的5 V稳压电源供电,输入AC 100~240 V,50/60 Hz;稳压输出5 V,2 A;能满足系统的供电要求。5 V电源电路如图2所示。

图2 5 V电源电路

图像采集传感器使用通用的USB摄像头,系统中使用的是一款HUAERTE摄像头,采集的图像分辨率为320×240,图像格式RGB24,图片压缩格式bmp,支持USB2.0,数据传输速率最大可达246 Mbit/s。信号线连接于S3C2440的DNO和DP0两个引脚。USB摄像头与S3C2440的连接电路如图3所示。

图3 USB摄像头与S3C2440的连接电路图

存储电路包括SDRAM存储电路和 FLASH存储系统电路。SDRAM存储电路采用2片32 Mbyte的SDRAM芯片K4S561632C-TC75作为系统内存,2片SDRAM芯片并接在一起形成32 bit的总线数据宽度;FLASH存储系统电路采用Nor FLASH芯片AM29LV160DB作为系统的FLASH存储系统。

系统采用声光报警电路,当检测到驾驶员正处于疲劳状态时,发出声光报警信号,驱动蜂鸣器和发光二极管使得蜂鸣器发出尖锐的响声,发光二极管闪烁,以此来警示驾驶员此刻正处于疲劳驾驶状态。声光报警电路如图4所示。

图4 声光报警电路图

3 系统软件设计

系统程序是基于OpenCV和C语言编写的,系统利用OpenCV提供的大量的计算机视觉库函数来实现底层驱动,再由C语言完成系统的程序框架[6]。

3.1 PERCLOS疲劳检测标准原理

PERCLOS是在一定时间内眼睛闭合时间所占的百分比。PERCLOS实验测量方法主要有EM,P70,P80 3种,分别表示眼睛的眼睑遮盖盖过瞳孔的面积超过50%的时候所占的时间的百分比;其中P80是被最为广泛接受的一种疲劳检测标准[7]。PERCLOS疲劳检测原理如图5所示。

在PERCLOS测量原理图中,t1表示眼睛从完全睁开到闭合到20%的时间,t2表示眼睛从完全睁开到闭合到80%的时间,t3为眼睛从完全睁开到下一次睁开到20%所用的时间,t4为眼睛从完全睁开到下一次睁开80%所用的时间。通过测量t1,t2,t3,t4的值就可以很容易地求得疲劳系数,具体计算公式为

图5 PERCLOS测量原理图

PERCLOS参数大于80%,则就认定此刻驾驶员正处在疲劳状态。

3.2 疲劳检测程序设计

系统程序采用PERCLOS作为疲劳检测标准,计算所得的PERCLOS参数超过系统所设定的疲劳检测阈值时即断定驾驶员在疲劳状态。疲劳检测过程要求系统能实时处理摄像头采集到得驾驶员的面部图像,并迅速对处理结果做出相应的反应。因此对所使用的OpenCV代码做相应的修改,在不改变原本函数功能的基础上力求做到代码最精简,执行效率最高,系统运行安全稳定。在设计中,系统从采集到处理完毕一帧图像数据所用时间小于100 ms,能满足实时检测的要求。疲劳检测程序流程图如6所示。

图6 疲劳检测程序流程图

3.3 摄像头驱动设计

摄像头驱动程序函数函数封装到函数CvCapture*cvCreateCameraCapture(intindex)中。当调用函数时,OpenCV会自动打开函数参数(index)指定的摄像头,并从摄像头中读取视频信息。如果摄像头初始化成功后捕获到了驾驶员的面部图像,函数就会返回一个指向已经初始化了的CvCapture指针。如果摄像头初始化不成功,该函数就会返回一个NULL指针。

当系统中同时安装了多个摄像头时,可以用identifier来指定系统所需要使用的摄像头,以便告知系统怎样与摄像机相交互。当系统中只有一个摄像机时,identifier要设为0。当系统调用cvCreateCameraCapture(int index)函数时,要将identifier参数与摄像机捕捉常数送给cvCreateCameraCapture(int index)函数的参数index。系统使用一个摄像头,index参数为1。

3.4 分类器匹配程序设计

系统采用由OpenCV提供的基于小波特性的类Haar级联分类器。它是在Viola-Jones分类器的基础上通过对角特性扩展而得来的,采用的是boosting分类器算法。Viola-Jones筛选式级分类器中的弱分类器是一多数情况下只有一层的决策树,该决策树以式(2)的形式进行决策

式中:f表示判断的特征值;v表示输入量;t表示判断的阈值;+1和-1表示两个判断结果,当v大于设定的判断阈值时则输出+1,表示与分类器中的模板匹配,否则就表示不匹配。

训练时,Viola-Jones分类器在每个弱分类器中使用的1~3个特征,然后迭代建立一个由弱分类器加权相加而组成的强分类器。其建立原理如式(3)所示

如果加权和大于1,则返回1;如果加权和等于0,则返回0;如果加权和小于0,则返回-1。在分类器与所获取的图像进行模板计算时首先要导入分类器,然后将分类器与采集的图像做比较运算,得出匹配结果,最后释放分类器所占的内存。分类器的导入函数CvHaarClassifierCascade*cvLoadHaar-ClassifierCascade(constchar* directoryCvSizeorig_window_size),其中directory表示分类器的储存路径,orig_window_

size表示被检测的目标尺寸。

3.5 疲劳检测程序设计

当检测到驾员的眼睛的闭合程度后,通过PERCLOS算法检测出驾驶员正处于疲劳驾驶状态时,就开启声光报警信号以警示驾驶员。疲劳检测过程如图7所示。

图7 疲劳检测流程图

4 测试实验

4.1 获取图像

使用USB摄像头获取驾驶员的面部图像,面部图像为RGB模式下的图像,RGB模式下的面部图像如图8~图11所示,并将其转换为YCbCr模式下的图像。

在RGB模式中除了颜色外还有亮度非常敏感,对于人眼来说不同亮度的相同颜色就意味着不同的颜色。当分析一幅人的脸部图像时,需从图像中去除亮度。在此使用被广泛应用的YCbCr空间视频压缩标准。由于肤色主要取决于皮肤亮度,因此将YCbCr颜色空间进行非线性变换,即可去除亮度。由RGB模式下的驾驶员的面部图像转换到YCbCr模式下的图像如图12~图15所示。

图8 戴眼镜睁眼RGB图

图9 戴眼镜闭眼RGB图

图10 裸眼睁眼RGB图

图11 裸眼闭眼RGB图

图12 戴眼镜睁眼YCbCr图

图13 戴眼镜闭眼YCbCr图

图14 裸眼睁眼YCbCr图

图15 裸眼闭眼YCbCr图

4.2 眼部图片的提取

驾驶员的面部图像经过分类器比较运算后就可以判定驾驶员的眼部位置,然后在眼睛所在区域画出一矩形框,从矩形框中提取出驾驶员的面部图像。提取的眼部图像如图16~图19所示。

图16 戴眼镜的睁眼灰度图

图17 戴眼镜的闭眼灰度图

图18 裸眼睁眼灰度图

图19 裸眼闭眼灰度图

眼部图像提取所使用的函数主要有:CvRect*r=(CvRect*)cvGetSeqElem(eyes,i);cvRectangle(img,pt1,pt2,colors[i%8],3,8,0);利用函数 cvGetSeqElem 查找指定序列中索引所指定的特定元素,调用完该函数后返回指向该元素的指针。如果指定的序列中只有一个块,或者所需查找的元素就在第一个块中,那么应当使用CV_GET_SEQ_ELEM。在使用时该宏首先核查所需的元素是否属于第一个块,若该元素属于第一个块,则返回该元素;否则,该宏就调用主函数GetSeqElem;若元素索引为负数,继续调用cvGetSeqElem函数。函数cvRectangle是在所指定的图像img上通过所指定的两点pt1和pt2作为对角线来绘制矩形框;colors表示矩形框的颜色,设计中选用红色;参数“3”表示所画矩形框线条的宽度,参数“8”表示矩形框线条的类型,最后一个参数表示两个对角线点坐标精度。

4.3 灰度直方图计算

灰度直方图描述的是图像中所有像素点的灰度值的分布情况。由于驾驶员在疲劳驾驶的时候眼睛的闭合程度肯定会大于驾驶员在精神饱满时的闭合程度,因此疲劳时眼睑遮盖住黑眼球的面积就会变大,导致灰度值大的区域的像素点减少。因此,当图片大小相同时,计算大于某一域值的灰度值,在睁眼和闭眼的图像上就会出现两个不相同的数,而且睁眼的灰度图的值定会大于闭眼灰度图的计算值,由此就可以判断眼睛的闭合,如图20~图23所示。当通过PERCLOS算法检测出驾驶员正处于疲劳驾驶状态时,就开启声光报警信号以警示驾驶员。

图20 戴眼镜睁眼灰度直方图

图21 戴眼镜闭眼灰度直方图

图22 裸眼睁眼灰度直方图

图23 裸眼闭眼灰度直方图

5 结论

疲劳驾驶现象是危害自己与他人生命财产安全的重要原因之一,现今国内众多驾驶员都存在疲劳驾驶经历。本文通过采集驾驶员面部图像,提取其眼部图像并进行灰度处理,采用PERCLOS作为疲劳检测标准判断驾驶员是否处于疲劳状态。进一步改进利用红外线摄像头在黑暗环境中能捕捉红外图像的特点,设计出能在光线微弱的环境中识别驾驶员疲劳状态的疲劳检测系统,在一定程度上解决了驾驶员戴墨镜开车无法检测其疲劳状态的问题。系统检测准确性高,能在多种情况下检测驾驶员是否处于驾驶疲劳状态。

[1]胡捷.基于嵌入式Linux疲劳检测系统的设计[J].数字技术与应用,2014(10):89.

[2]孟令军,于磊,郭雄飞.疲劳检测中人眼定位方法研究[J].电视技术,2015,39(1):133-135.

[3] SARAVANAKUMAR S,SELVARAJU N.Eye Tracking and blink detection for human computer interface[J].International Journal of Computer Applications,2010,2(2):7-9.

[4] OLSSONE M,VON SB,PANOSSIAN A G.A randomised,doubleblind,placebo-controlled,parallel-group study of the standardised extract shr-5 of the roots of Rhodiola rosea in the treatment of subjects with stress-related fatigue[J].Planta Medica,2009,75(2):105.

[5]郭永彩,李文涛,高潮.基于PERCLOS的驾驶员疲劳检测算法[J].计算机系统应用,2009(8):54-57.

[6]谭歆,武岳.基于OpenCV的运动目标检测方法研究与应用[J]. 电视技术,2010,34(1):184-187.

[7]苑玮英,袁英.基于PERCLOS的眼睛张开程度检测算法研究[J].微计算机信息:测控自动化,2010,9(9-1):46-48.

猜你喜欢
分类器摄像头灰度
浙江首试公路非现场执法新型摄像头
采用改进导重法的拓扑结构灰度单元过滤技术
摄像头连接器可提供360°视角图像
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
基于实例的强分类器快速集成方法
基于最大加权投影求解的彩色图像灰度化对比度保留算法
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
基于灰度线性建模的亚像素图像抖动量计算
奔驰360°摄像头系统介绍