疲劳驾驶和酒驾是严重的交通违法行为,驾驶员疲劳行车时,会造成反应迟钝、困倦、四肢无力,不能及时发现路面交通情况以采取准确的驾驶操控措施,极易发生交通事故[1]。据交通部统计,2015年间,由于驾驶员疲劳驾驶导致的交通事故占总数的10.64%,在重特大交通事故中约占45%。在美国,每年与疲劳驾驶相关的车祸夺去了15000人的生命。而酒后的驾驶员会出现视觉障碍、运动反射神经迟钝、判断力降低。有数据显示,在中国,每年因酒驾导致的交通事故占40%~50%,可见,车辆装备具有疲劳检测和酒驾提醒的安全驾驶系统的必要性。
先进驾驶辅助系统(advanced driver assistant system),简称adas,是利用安装于车上的各式各样的传感器, 在第一时间收集车内外的环境数据, 进行静、动态物体的辨识、侦测与追踪等技术上的处理, 从而能够让驾驶者在最快的时间察觉可能发生的危险, 以引起注意和提高安全性的主动安全技术。adas 采用的传感器主要有摄像头、雷达、激光和超声波等,可以探测光、热、压力或其它用于监测汽车状态的变量, 通常位于车辆的前后保险杠、侧视镜、驾驶杆内部或者挡风玻璃上。早期的adas 技术主要以被动式报警为主,当车辆检测到潜在危险时, 会发出警报提醒驾车者注意异常的车辆或道路情况。对于最新的adas 技术来说,主动式干预也很常见。
硬件系统架构及方案
基于zynq ap soc(zynq all programmable soc)的安全驾驶系统的硬件系统[2]如图1所示,系统主要由高速cmos图像传感器ov7725、130万像素usb网络摄像头、zynq-7000可扩展处理芯片、数据存储单元ddr3、hdmi显示屏、酒精传感器和喇叭等组成。xilinx公司的zynq-7000可扩展处理芯片是整个系统的核心,其包含处理系统(processing system,ps)和可编程逻辑(programmable logic,pl)两部分,ps部分集成了最高频率为667ghz的高性能双核arm cortex-a9处理器,而pl部分包含28nm工艺的fpga(field-programmable gate array)逻辑单元和dsp资源。
pl端通过i2c协议驱动[3]ov7725摄像头,将摄像头采集的图像数据缓存于一个异步时钟fifo(first input first output)队列中,而fifo的写时钟由ov7725摄像头模块提供,异步读时钟由vdma engine提供,并在读过程进行灰度图转换,后将数据读入vdma engine。
ps端通过amba高速总线axi_hp接口,驱动ddr3控制器,并读取一帧图片数据,并对图片进行脸部识别等图像处理,得到人脸五官特征值。(3)ps端同时通过usb-host总线对网络摄像头进行配置,并得到图像数据,在linux系统下将图像通过hdmi显示器显示,并将图像数据存储到sd存储卡中。(4)ps端在linux系统下驱动内部集成的12位精度adc转换器,将酒精传感器采集的模拟信号进行数字转换。
预警提示最终通过调用程序预设的语音组合,由hdmi接口输出到带功放或者音频接口的hdmi显示设备,达到提醒驾驶员的目的。
软件系统设计
软件系统架构如图2,采用linaro系统,其是在linux系统基础下,由arm、飞思卡尔、ibm、samsung、st-ericsson 及德州仪器 (ti)等半导体厂商联合为嵌入式soc架构平台而设计的开源系统。其次,本系统使用开源的opencv(open source computer vision library)进行图像的高级处理[4],并采用具有跨平台优势、易扩展的qt图形界面开发框架作为软件app的界面设计与产品封装。如果说系统硬件是骨架和躯体,那么软件算法就是思想和灵魂。编写程序之前,需要搭建好软件开发环境,步骤如图3。
3 疲劳检测算法分析
本系统的疲劳检测流程如图4,系统启动后会对驾驶员的脸部信息[5]进行获取,因为驾驶员在图像中的位置相对固定,通过基于haar特征的adaboost级联分类器[6],对驾驶员进行人脸检测,得到驾驶员的脸坐标,并提取检测的脸部作为roi(region of interes),图像继续对人眼和嘴巴进行定位,得到人眼和嘴巴的特征值图像后,进而进行二值化处理,再经过形态学滤波器,对二值化图像先腐蚀后膨胀,消除小物体,在纤细点处分离物体,然后通过opencv里面的findcontours算子寻找并标记轮廓,从而去除图片中的噪声和图片边缘无关物体,精确得到眼睛和嘴巴的轮廓,然后对该轮廓计算收敛的面积、高度和宽度。经过上述步骤后,便得到了驾驶员的脸部五官坐标之间的距离比例关系。之后,实时地对获取摄像头的图像数据,按照得到的脸部坐标对图像进行分割,并进行adaboost人脸识别处理,再根据初始化时得到的人眼坐标,进一步分割图像,提高运算速度,进行人眼识别,得到实时的人眼坐标,通过人脸五官的分布比例,定位到嘴巴,然后计算人眼和嘴巴的睁开度、打哈欠数、闭眼持续时间,根据perclos算法[7]制定的标准,对驾驶员进行疲劳提醒。
具体算法分析:
(1)本系统的脸部采集算法采用基于haar特征的adaboost级联分类器,其具有精度和速度较快的优点,在adaboost算法中,核心思想是针对同一个训练集训练不同的弱分类器,然后聚合起来,构成强分类器。它根据每次训练集中的每个样本进行分类判决,以及上一次的总体分类的准确度来决定每个样本的权值,最后将每次训练得到的分类器融合起来,作为最终的判决分类器,运行在arm嵌入式系统上,检测速度较慢。而因为驾驶位置相对固定,当系统启动时,通过detectmultiscale函数对驾驶员位置和脸部五官进行初定位,这样可以通过驾驶员坐标,分割图像,降低分类器级数,提高检测速度。而且,驾驶员驾驶机动时候,位置基本无变化,可采取隔2帧图像检测一次人脸位置,并更新的驾驶员位置坐标值。另外,由于人脸五官在脸部中的位置分布是固定的,可采用初始化时得到的五官坐标分布与五官之间的距离,提取检测图像的roi部分,进一步降低运算量。 部分程序如下:
pfacecas-》detectmultiscale(dstimfull,facerectinit,1.1,2,0,size(30,30));
peyescas-》detectmultiscale(dstgimeyes,eyerectinit,1.1,4,0|cv_haar_scale_image , size(5,5) );
facerectinitv=rect(facerectinitvx,facerectinitvy,facerectinitvw,facerectinitvh*6/5);
dstgimface = dstimfull(facerectinitv);
检测效果如图5,检测统计结果如表1。
(2)采用morphologyex函数,对识别提取的眼和嘴巴roi图像进行开运算形态学滤波。开运算算法实际是对图像先进性腐蚀后膨胀,而形态学图象处理表现为一种邻域运算形式,一种特殊定义的邻域称之为“结构元素”(structure element),它在每个像素位置上与二值图象对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图象的相应像素。开运算能达到消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积的效果,假设给定二值图象b(x,y)和作为结构元素的二值模板x(i,j)。
开运算程序如下:
at element = getstructuringelement(morph_rect,size(3,3));
mat element2 = getstructuringelement(morph_rect,size(7,7));
morphologyex(leyet,leyetm,morph_erode,element); // 腐蚀
morphologyex(leyetm,leyetm,morph_dilate,element2); // 膨胀
开运算效果如图6。
(3)opencv里面的findcontours算子能标记并提取脸部五官轮廓,通过提取出来的轮廓,计算得到眼睛、嘴巴的最大逼近张开度,然后通过比较,可判断出驾驶员的眼睛开闭状态、打哈欠次数。处理效果如图7,代码实现如下:
vector《vector》 contours;
vectorhierarchy;
mat image1 = dsttimmouth.clone();
findcontours(image1,contours,hierarchy,retr_external,chain_approx_simple);
int i = 0 ;int crea;
for( ;i《contours.size();i++){《》
crea = fabs(contourarea(contours[i]));
if(crea》=500) {cout《《crea《《endl;break;}《》
qdebug()《《crea《《endl; p=“” }《crea《《endl;》
rect box = boundingrect(contours[i]);
dsttimmouth = dsttimmouth(box);
4 行车记录与酒精检测
随着道路上机动车数量的增多,在开车的路上难免有小刮小碰,遇到撞车党和碰瓷党的事件常有发生,所以本系统集成有行车记录仪功能,记录每一个行车过程的细节,维护司机的合法权益。如图8,系统具有清除内存、内存剩余量、续航时间报时和回播功能。同时,系统集成了12位精度的数模转换器和酒精传感器,实时对酒驾行为提出警报。
本系统在zynq apsoc平台下,集成疲劳检测、行车记录、酒驾判断功能,对人脸检测算法进行了嵌入式架构移植,对adaboost算法进行了嵌入式优化,利用zynq的arm+fpga的架构优势,在(pl)fpga端对图像进行了灰度转换预处理,在ps(arm)端,对来自pl端的图像进行了降噪和人脸检测、人脸五官特征值提取。
本系统的运行图如图9,通过实验,参考表1,识别率较高,达到了预定的功能,适用于车辆防止交通事故的发生等一体化行车安全场景,加以完善,有广泛的应用前景。
GARP VLAN注册协议是什么意思
韩专家:大陆存储芯片量产恐延至明年或更晚
lcd19264驱动程序
柔性压阻传感器未来可广泛应用在可穿戴医疗领域
高精度与低成本难兼顾,对比优势各异的室内定位技术
基于ZYNQ AP SoC的安全驾驶系统设计与实现
无线测温系统高压开关柜电气设备中的应用研究
土壤水分测定仪的使用说明以及使用效果的介绍
峰会回顾第24期 | 系统软件漏洞挖掘研究进展
什么是CNAP (Calling Name Presenta
三星抢先申请石墨烯电池技术专利 将是电池技术的重大创新和升级
如何判断MAX232接口芯片的好坏
OLED是次世代技术?挑战者Micro LED可不愿意
三星推出新款横向折叠屏智能手机,可将其折叠成一个小方形
欧姆定律是谁提出的_欧姆定律思维导图
电源逆变器3个主要参数,提供奇怪的速度
雷神911黑幽灵电竞版评测 重新定义游戏本的i7-8750H
基于C8051F020的智能气动泵控制系统的设计
如何解决手机等便携设备的EMI问题和ESD干扰
从原理到接法全面了解三相电:三相电与两相电、单相电的区别