张贝宁,郜健铭,王靖涵,张 敬,顿媛雅,许留洋
(周口师范学院,河南 周口)
疲劳驾驶是诱发交通事故的重要因素,如果能够在驾驶员出现驾驶疲劳时准确检测并进行语音提醒,可以帮助驾驶员集中注意力,从而降低交通事故的发生率。基于机器视觉的驾驶员危险驾驶检测系统,利用车内摄像头实时采集驾驶员的头部图像信息,并通过人脸检测算法对驾驶员的眼睛状态进行识别,通过算法计算出是否处于疲劳状态。当判定为疲劳驾驶时,通过语音提示驾驶员及时休息,切实保障了行车安全。
该系统对图像处理速度要求较高,为满足系统的实时性要求采用了TMS320C6748 型DSP 芯片,该芯片能减少卷积运算和信号滤波的时间,显著提高了数字信号的运算速率,满足了实时检测的需求。从组成架构上来看,驾驶员危险驾驶检测系统主要由图像采集、图像存储和图像处理3 个核心模块构成,除此之外还有配套的电源模块、语音报警模块等,硬件的整体架构见图1。
图1 系统硬件结构图
图像采集模块的核心设备是前端摄像头,用于收集汽车驾驶员的图像信息,将收集信息进行A/D 转换后利用VPIF 接口输入到DSP 芯片中。CPU 对转换后的信息进行处理,利用EDMA 控制器将处理后的结果传输至存储器中。根据分析结果,如果系统判定驾驶员存在危险驾驶行为,则利用McASP 音频输出接口控制报警器发出警报,提醒驾驶员。
该模块的主要作用是采集驾驶员的实时图像,因此对摄像头的像素、灵敏度、动态范围等参数有较高的要求。本系统选用带图像传感器的MT9V034 型摄像头,输出图像的像素为760×500,最大时钟频率30 MHz,在光线较暗的环境下也能清晰成像。在确定摄像头的型号与参数后,还要寻找合适的安装位置。为了拍摄到完整的驾驶员头部图像,将摄像头放置在驾驶员前方35~40 cm 处,仰角为60~70°,摄像头焦距在15~18 mm 之间。
处理器的性能决定了驾驶员危险驾驶检测系统的应用效果,本系统的处理器(CPU)选择TI 公司生产的TMS320C6478 芯片,该芯片拥有C674X 内核结构,内置64 个32 位的通用寄存器,支持C674x 系列指令集和C++语言,降低了系统的开发难度。提供VPIF 视频接口和McSAP 语音接口,提高了图像、语音、视频等多种类型信息的传输能力。配备的EMDA 增强型访问控制器,对提高系统的整体运行效能有积极帮助[1]。
在系统检测到驾驶员处于疲劳驾驶状态时,播报警示语音提醒驾驶员集中注意力或尽快停车休息。该模块的核心硬件是TLV320AIC3106 音频芯片,共有3个I/O 口。其中2 个为音频输入口,分别是音频模拟输入口、麦克风输入口;1 个音频模拟输出口。在系统启动运行后,把报警语音文件通过音频模拟输入口传输到芯片中,并利用内置的A/D 转换模块将音频信号变成电信号。当系统检测到驾驶员处于疲劳驾驶状态后,触发语音报警功能。此时音频芯片控制音频模拟输出口工作,再重新将电信号转变为身心信号,利用外置扬声器播报语音。
本文设计的驾驶员危险驾驶检测系统,软件部分主要由图像采集、图像预处理、人脸检测和危险驾驶判定等核心模块构成,软件结构见图2。
图2 系统软件结构图
在硬件初始化后,软件部分同步运行,图像采集模块收集驾驶员的图像,并执行一个判断程序“是否成功获取一帧图像?”如果判定结果为“否”,则返回初始化程序,重新采集图像信息;在判定结果为“是”后,进入图像预处理环节。预处理后的图像有两种用途,一种是进行人脸检测,通过人眼定位、提取眼睛闭合度、计算Perclos 值等一系列处理后,完成危险驾驶的判定;另一种是用于分心驾驶判定。如果有疲劳驾驶和分心驾驶行为,则进行语音告警。
2.2.1 图像预处理
在汽车行驶过程中,由于外界光线的变化以及车辆或摄像头的抖动等原因,采集到的图像可能会出现噪声、失真等情况,导致图像的清晰度变差,影响检测结果的准确性。为了避免此类问题,在设计驾驶员危险驾驶检测系统的软件时,加入了图像预处理模块,具体方法有两种:
其一是图像滤波法,已知图像的能量主要分布于幅度谱的中低频段,噪声主要分布于高频段,通过图像滤波有助于降低高频成分幅度,达到去除噪声的效果。同时,图像滤波还能尽可能地保留图像的细节特征,不影响图像本身的精度。其二是光照补偿法,主要是解决因为光照过强或过暗引起的图像失真问题[2]。目前常用的补偿算法是直方图均衡法,计算待处理图像的灰度分布直方图,然后通过非线性变换让图像中的像素值重新排列,让像素从集中分布变为均匀分布,达到光照补偿效果。
2.2.2 人脸检测
对于预处理完毕后的图像,使用AdaBoost 算法做进一步分析,提取特征并检测图像中的人脸。人脸检测的实现大体可分为两个步骤,即分类器训练和图像检测,流程见图3。
图3 人脸检测流程图
样本质量在一定程度上决定了分类器对人脸的识别准确度,为此必须提供足够多的样本图像数据进行分类器的训练[3]。在选择样本时,收集10 000 张人脸图像作为正样本集,同时收集6 000 张非人脸图像(如动物、汽车、风景等)作为负样本集。利用正负样本集训练分类器。利用Haar-like 特征构建弱分类器,其数学模型为:
上式中,x 表示子窗口图像,f(x)表示图像的Haar-like特征值,p 表示不等号的方向,θ 表示阈值。如果Haar-like 特征值在阈值内,则输出结果为“1”,表示图像为人脸;反之,如果Haar-like 特征值不再阈值内,则输出结果为“0”,表示图像为非人脸,由此实现人脸检测。按照上述方法对分类器进行500 次迭代训练。执行一个判断程序“是否达到迭代次数?”,在迭代次数达到500 次后完成训练,将结果保存为XML 文件,并利用训练好的分类器进行人脸检测。
2.2.3 疲劳驾驶判定
当驾驶员长期驾驶并出现驾驶疲劳时,会出现眨眼频率升高、眼睛闭合速度变慢、闭眼时间过长等生理特征[4]。基于机器视觉的疲劳驾驶检测就是在识别人脸的前提下,对人眼的状态进行识别,从而利用相关参数判断驾驶员是否处于疲劳状态。本文采用了以统计像素值为基础的计算眼睛张开度的方法,计算公式如下:
上式中,H(i)表示第i 帧图像中眼睛的睁开度,Hm×1/2 表示判断眼睛睁闭的阈值。如果f(i)为0,表示眼睛闭合;如果f(i)为1,表示眼睛睁开。
在识别眼睛状态的基础上,还要提取疲劳参数、进行疲劳判定。现阶段常用的疲劳参数提取方法有两种类型,分别是基于脉搏、心率的生理参数法和基于眨眼频率、眼睛闭合时间的视觉特征参数法,本文选择后一种方法,并将单位时间内眼睛闭合时间百分比(Perclos)作为判定指标[5]。Perclos 与疲劳程度的映射关系如图4 所示。
图4 Perclos 与疲劳程度的关系曲线
由图4 可知,Perclos值越高,说明疲劳程度越高,该值可通过以下公式求得:
上式中,M 表示60 s 内眼睛闭合图像的帧数,m 表示60 s 内系统采集到的图像总帧数。
本系统的硬件部分包括TMS320C6748 芯片、MT9V034 摄像头、LCD 显示屏,以及1 台GYX1060 计算机;软件部分使用Matlab2018 进行系统开发,使用OpenCV 数据库,运行系统为DSP/BIOS。收集1 000张(700 张为人脸、300 张为非人脸)图像和50 段视频进行检测。
3.2.1 人脸检测结果
将1 000 张图像输入到驾驶员危险驾驶检测系统中,测试人脸检测准确率,结果见表1。
表1 人脸检测分类器测试结果
由表1 数据可知,对于非正面人脸、多人脸和有遮挡的图像,分类器的检测准确率较高,基本维持在90%以上;而光照过强或过暗的图像,检测准确率相对较低,这表明光线强弱是影响人脸检测准确率的核心因素。
3.2.2 疲劳驾驶判定结果
将50 段驾驶员的驾车视频(时长40~100 s)作为检测样本,利用该系统进行疲劳判定,结果见表2。
表2 疲劳驾驶判定结果
参与检测的50 段视频中,有43 段视频的疲劳判定结果准确,准确率为86%;其他7 段视频中,有5 组属于正常驾驶,系统判定结果为轻度疲劳,这意味着在系统设计时需要适当提高疲劳驾驶的判定阈值。
基于机器视觉的驾驶员危险驾驶检测系统以前端摄像头提供的图像作为分析对象,检测到人脸后提取眼部参数,然后求解Perclos 值,进而推测出驾驶员的驾驶状态。如果判定为疲劳驾驶则进行语音提示,使驾驶员集中注意力。该系统判定结果的准确率可以达到86%,应用效果符合设计预期。