汽车电子
疲劳驾驶和酒驾是严重的交通违法行为,驾驶员疲劳行车时,会造成反应迟钝、困倦、四肢无力,不能及时发现路面交通情况以采取准确的驾驶操控措施,极易发生交通事故[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);
随着道路上机动车数量的增多,在开车的路上难免有小刮小碰,遇到撞车党和碰瓷党的事件常有发生,所以本系统集成有行车记录仪功能,记录每一个行车过程的细节,维护司机的合法权益。如图8,系统具有清除内存、内存剩余量、续航时间报时和回播功能。同时,系统集成了12位精度的数模转换器和酒精传感器,实时对酒驾行为提出警报。
本系统在ZYNQ ApSoC平台下,集成疲劳检测、行车记录、酒驾判断功能,对人脸检测算法进行了嵌入式架构移植,对AdaBoost算法进行了嵌入式优化,利用ZYNQ的ARM+FPGA的架构优势,在(PL)FPGA端对图像进行了灰度转换预处理,在PS(ARM)端,对来自PL端的图像进行了降噪和人脸检测、人脸五官特征值提取。
本系统的运行图如图9,通过实验,参考表1,识别率较高,达到了预定的功能,适用于车辆防止交通事故的发生等一体化行车安全场景,加以完善,有广泛的应用前景。
全部0条评论
快来发表一下你的评论吧 !