论文部分内容阅读
摘要:针对系统对实时图像处理的需求,本文提出了一种基于ZYNQ AP SoC的安全驾驶系统设计方案。本系统由ZYNQ架构中的PL(FPGA)部分负责驱动CMOS摄像头,将采集的图像进行灰度转换,传给PS(ARM)部分运行Adaboost算法,对图像进行人脸检测,从而获取驾驶员的眼睛和嘴巴的坐标值、面积值和张开度,并利用OpenCV的PERCLOS算法制定疲劳状态标准,给出预警信息。同时,ARM通过USB驱动摄像头,实现行车记录,并通过酒精浓度传感器采集车内酒精浓度,实现酒驾预警。通过实验表明,本系统性能稳定,实现了保障安全驾驶的目的。
关键词:ZYNQ AP SoC;OpenCV;疲劳检测;行车记录
DIO:10.3969/j.issn.1005-5517.2017.2.011
引言
疲劳驾驶和酒驾是严重的交通违法行为,驾驶员疲劳行车时,会造成反应迟钝、困倦、四肢无力,不能及时发现路面交通情况以采取准确的驾驶操控措施,极易发生交通事故。据交通部统计,2015年间,由于驾驶员疲劳驾驶导致的交通事故占总数的10.64%,在重特大交通事故中约占45%。在美国,每年与疲劳驾驶相关的车祸夺去了15000人的生命。而酒后的驾驶员会出现视觉障碍、运动反射神经迟钝、判断力降低。有数据显示,在中国,每年因酒驾导致的交通事故占40%-50%,可见,车辆装备具有疲劳检测和酒驾提醒的安全驾驶系统的必要性。
1 硬件系统架构及方案
基于ZYNQ AP SoC(ZYNQ All Prog rammable 50C)的安全驾驶系统的硬件系统如图1所示,系统主要由高速CMOS图像传感器Ov7725、130万像素USB网络摄像头、Zynq-7000可扩展处理芯片、数据存储单元DDR3、HDMI显示屏、酒精传感器和喇叭等组成。Xilinx公司的Zynq-7000可扩展处理芯片是整个系统的核心,其包含处理系统(ProcessingSystem,PS)和可编程逻辑(Prog rammable Logic,PL)两部分,PS部分集成了最高频率为667GHz的高性能双核ARMCortex-A9处理器,而PL部分包含28nm工艺的FPGA(Field-Programmable Gate Array)逻辑单元和DSP资源。
PL端通过I2C协议驱动Ov7725摄像头,将摄像头采集的图像数据缓存于一个异步时钟FIFO(First Input First Output)队列中,而FIFO的写时钟由Ov7725摄像头模块提供,异步读时钟由VDMA Engine提供,并在读过程进行灰度图转换,后将数据读入VDMA Engine。
PS端通过AMBA高速总线AXI_HP接口,驱动DDR3控制器,并读取一帧图片数据,并对图片进行脸部识别等图像处理,得到人脸五官特征值。(3)PS端同时通过USB-Host总线对网络摄像头进行配置,并得到图像数据,在Linux系统下将图像通过H DM l显示器显示,并将图像数据存储到SD存储卡中。(4)PS端在Linux系统下驱动内部集成的12位精度ADC转换器,将酒精传感器采集的模拟信号进行数字转换。
预警提示最终通过调用程序预设的语音組合,由H DM l接口输出到带功放或者音频接口的HDMI显示设备,达到提醒驾驶员的目的。
2 软件系统设计
软件系统架构如图2,采用Linaro系统,其是在Linux系统基础下,由ARM、飞思卡尔、IBM、samsung、ST-Ericsson及德州仪器(T1)等半导体厂商联合为嵌入式SoC架构平台而设计的开源系统。其次,本系统使用开源的OpenCV(Open Source Computer Vision Library)进行图像的高级处理,并采用具有跨平台优势、易扩展的Qt图形界面开发框架作为软件APP的界面设计与产品封装。如果说系统硬件是骨架和躯体,那么软件算法就是思想和灵魂。编写程序之前,需要搭建好软件开发环境,步骤如图3。
3 疲劳检测算法分析
本系统的疲劳检测流程如图4,系统启动后会对驾驶员的脸部信息进行获取,因为驾驶员在图像中的位置相对固定,通过基于Haar特征的AdaBoost级联分类器,对驾驶员进行人脸检测,得到驾驶员的脸坐标,并提取检测的脸部作为ROI(region of interes),图像继续对人眼和嘴巴进行定位,得到人眼和嘴巴的特征值图像后,进而进行二值化处理,再经过形态学滤波器,对二值化图像先腐蚀后膨胀,消除小物体,在纤细点处分离物体,然后通过OpenCV里面的findcontours算子寻找并标记轮廓,从而去除图片中的噪声和图片边缘无关物体,精确得到眼睛和嘴巴的轮廓,然后对该轮廓计算收敛的面积、高度和宽度。经过上述步骤后,便得到了驾驶员的脸部五官坐标之间的距离比例关系。之后,实时地对获取摄像头的图像数据,按照得到的脸部坐标对图像进行分割,并进行AdaBoost人脸识别处理,再根据初始化时得到的人眼坐标,进一步分割图像,提高运算速度,进行人眼识别,得到实时的人眼坐标,通过人脸五官的分布比例,定位到嘴巴,然后计算人眼和嘴巴的睁开度、打哈欠数、闭眼持续时间,根据PERCLOS算法制定的标准,对驾驶员进行疲劳提醒。
具体算法分析:
(1)本系统的脸部采集算法采用基于Haar特征的AdaBoost级联分类器,其具有精度和速度较快的优点,在Ada Boost算法中,核心思想是针对同一个训练集训练不同的弱分类器,然后聚合起来,构成强分类器。它根据每次训练集中的每个样本进行分类判决,以及上一次的总体分类的准确度来决定每个样本的权值,最后将每次训练得到的分类器融合起来,作为最终的判决分类器,运行在ARM嵌入式系统上,检测速度较慢。而因为驾驶位置相对固定,当系统启动时,通过detectMultiScale函数对驾驶员位置和脸部五官进行初定位,这样可以通过驾驶员坐标,分割图像,降低分类器级数,提高检测速度。而且,驾驶员驾驶机动时候,位置基本无变化,可采取隔2帧图像检测一次人脸位置,并更新的驾驶员位置坐标值。另外,由于人脸五官在脸部中的位置分布是固定的,可采用初始化时得到的五官坐标分布与五官之间的距离,提取检测图像的ROI部分,进一步降低运算量。部分程序如下: pFaceCas->detectMultiScale(dstlmFulI,faceRectInit,1.1,2,0,Size(30,30));
pEyesCas->detectMultiScale(dstGlmeyes,eyeRectInit,1.1,4,0|CV_HAAR_SCALE_IMAGE,Size(5,5));
faceRectlnitV=ReCt(faceRectlnitVX,faceRectlnitVY,faceRectInitVW,faceRectlnitVH*6/5);
dstGImface=dstlmFull(faceRectlnitV);
检测效果如图5,检测统计结果如表1。
(2)采用morphologyEx函数,对识别提取的眼和嘴巴ROI图像进行开运算形态学滤波。开运算算法实际是对图像先进性腐蚀后膨胀,而形态学图象处理表现为一种邻域运算形式,一种特殊定义的邻域称之为“结构元素”(structure Element),它在每个像素位置上与二值图象对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图象的相应像素。开运算能达到消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积的效果,假设给定二值图象B(x,y)和作为结构元素的二值模板x(i,j)。
腐蚀运算:
膨胀运算:
开运算:
开运算效果如图6。
(3)openCV里面的findcontou s算子能标记并提取脸部五官轮廓,通过提取出来的轮廓,计算得到眼睛、嘴巴的最大逼近张开度,然后通过比较,可判断出驾驶员的眼睛开闭状态、打哈欠次数。处理效果如图7,代码实现如下:
4 行车记录与酒精检测
随着道路上机动车数量的增多,在开车的路上难免有小刮小碰,遇到撞车党和碰瓷党的事件常有发生,所以本系统集成有行车记录仪功能,记录每一个行车过程的细节,维护司机的合法权益。如图8,系统具有清除内存、内存剩余量、续航时间报时和回播功能。同时,系统集成了12位精度的数模转换器和酒精传感器,实时对酒驾行为提出警报。
5 结论
本系统在ZYNQ ApSoC平台下,集成疲劳检测、行车记录、酒驾判断功能,对人脸检测算法进行了嵌入式架构移植,对Ada Boost算法进行了嵌入式优化,利用ZYNQ的ARM+FPGA的架构优势,在(PL)FPGA端對图像进行了灰度转换预处理,在PS(ARM)端,对来自PL端的图像进行了降噪和人脸检测、人脸五官特征值提取。
本系统的运行图如图9,通过实验,参考表1,识别率较高,达到了预定的功能,适用于车辆防止交通事故的发生等一体化行车安全场景,加以完善,有广泛的应用前景。
关键词:ZYNQ AP SoC;OpenCV;疲劳检测;行车记录
DIO:10.3969/j.issn.1005-5517.2017.2.011
引言
疲劳驾驶和酒驾是严重的交通违法行为,驾驶员疲劳行车时,会造成反应迟钝、困倦、四肢无力,不能及时发现路面交通情况以采取准确的驾驶操控措施,极易发生交通事故。据交通部统计,2015年间,由于驾驶员疲劳驾驶导致的交通事故占总数的10.64%,在重特大交通事故中约占45%。在美国,每年与疲劳驾驶相关的车祸夺去了15000人的生命。而酒后的驾驶员会出现视觉障碍、运动反射神经迟钝、判断力降低。有数据显示,在中国,每年因酒驾导致的交通事故占40%-50%,可见,车辆装备具有疲劳检测和酒驾提醒的安全驾驶系统的必要性。
1 硬件系统架构及方案
基于ZYNQ AP SoC(ZYNQ All Prog rammable 50C)的安全驾驶系统的硬件系统如图1所示,系统主要由高速CMOS图像传感器Ov7725、130万像素USB网络摄像头、Zynq-7000可扩展处理芯片、数据存储单元DDR3、HDMI显示屏、酒精传感器和喇叭等组成。Xilinx公司的Zynq-7000可扩展处理芯片是整个系统的核心,其包含处理系统(ProcessingSystem,PS)和可编程逻辑(Prog rammable Logic,PL)两部分,PS部分集成了最高频率为667GHz的高性能双核ARMCortex-A9处理器,而PL部分包含28nm工艺的FPGA(Field-Programmable Gate Array)逻辑单元和DSP资源。
PL端通过I2C协议驱动Ov7725摄像头,将摄像头采集的图像数据缓存于一个异步时钟FIFO(First Input First Output)队列中,而FIFO的写时钟由Ov7725摄像头模块提供,异步读时钟由VDMA Engine提供,并在读过程进行灰度图转换,后将数据读入VDMA Engine。
PS端通过AMBA高速总线AXI_HP接口,驱动DDR3控制器,并读取一帧图片数据,并对图片进行脸部识别等图像处理,得到人脸五官特征值。(3)PS端同时通过USB-Host总线对网络摄像头进行配置,并得到图像数据,在Linux系统下将图像通过H DM l显示器显示,并将图像数据存储到SD存储卡中。(4)PS端在Linux系统下驱动内部集成的12位精度ADC转换器,将酒精传感器采集的模拟信号进行数字转换。
预警提示最终通过调用程序预设的语音組合,由H DM l接口输出到带功放或者音频接口的HDMI显示设备,达到提醒驾驶员的目的。
2 软件系统设计
软件系统架构如图2,采用Linaro系统,其是在Linux系统基础下,由ARM、飞思卡尔、IBM、samsung、ST-Ericsson及德州仪器(T1)等半导体厂商联合为嵌入式SoC架构平台而设计的开源系统。其次,本系统使用开源的OpenCV(Open Source Computer Vision Library)进行图像的高级处理,并采用具有跨平台优势、易扩展的Qt图形界面开发框架作为软件APP的界面设计与产品封装。如果说系统硬件是骨架和躯体,那么软件算法就是思想和灵魂。编写程序之前,需要搭建好软件开发环境,步骤如图3。
3 疲劳检测算法分析
本系统的疲劳检测流程如图4,系统启动后会对驾驶员的脸部信息进行获取,因为驾驶员在图像中的位置相对固定,通过基于Haar特征的AdaBoost级联分类器,对驾驶员进行人脸检测,得到驾驶员的脸坐标,并提取检测的脸部作为ROI(region of interes),图像继续对人眼和嘴巴进行定位,得到人眼和嘴巴的特征值图像后,进而进行二值化处理,再经过形态学滤波器,对二值化图像先腐蚀后膨胀,消除小物体,在纤细点处分离物体,然后通过OpenCV里面的findcontours算子寻找并标记轮廓,从而去除图片中的噪声和图片边缘无关物体,精确得到眼睛和嘴巴的轮廓,然后对该轮廓计算收敛的面积、高度和宽度。经过上述步骤后,便得到了驾驶员的脸部五官坐标之间的距离比例关系。之后,实时地对获取摄像头的图像数据,按照得到的脸部坐标对图像进行分割,并进行AdaBoost人脸识别处理,再根据初始化时得到的人眼坐标,进一步分割图像,提高运算速度,进行人眼识别,得到实时的人眼坐标,通过人脸五官的分布比例,定位到嘴巴,然后计算人眼和嘴巴的睁开度、打哈欠数、闭眼持续时间,根据PERCLOS算法制定的标准,对驾驶员进行疲劳提醒。
具体算法分析:
(1)本系统的脸部采集算法采用基于Haar特征的AdaBoost级联分类器,其具有精度和速度较快的优点,在Ada Boost算法中,核心思想是针对同一个训练集训练不同的弱分类器,然后聚合起来,构成强分类器。它根据每次训练集中的每个样本进行分类判决,以及上一次的总体分类的准确度来决定每个样本的权值,最后将每次训练得到的分类器融合起来,作为最终的判决分类器,运行在ARM嵌入式系统上,检测速度较慢。而因为驾驶位置相对固定,当系统启动时,通过detectMultiScale函数对驾驶员位置和脸部五官进行初定位,这样可以通过驾驶员坐标,分割图像,降低分类器级数,提高检测速度。而且,驾驶员驾驶机动时候,位置基本无变化,可采取隔2帧图像检测一次人脸位置,并更新的驾驶员位置坐标值。另外,由于人脸五官在脸部中的位置分布是固定的,可采用初始化时得到的五官坐标分布与五官之间的距离,提取检测图像的ROI部分,进一步降低运算量。部分程序如下: pFaceCas->detectMultiScale(dstlmFulI,faceRectInit,1.1,2,0,Size(30,30));
pEyesCas->detectMultiScale(dstGlmeyes,eyeRectInit,1.1,4,0|CV_HAAR_SCALE_IMAGE,Size(5,5));
faceRectlnitV=ReCt(faceRectlnitVX,faceRectlnitVY,faceRectInitVW,faceRectlnitVH*6/5);
dstGImface=dstlmFull(faceRectlnitV);
检测效果如图5,检测统计结果如表1。
(2)采用morphologyEx函数,对识别提取的眼和嘴巴ROI图像进行开运算形态学滤波。开运算算法实际是对图像先进性腐蚀后膨胀,而形态学图象处理表现为一种邻域运算形式,一种特殊定义的邻域称之为“结构元素”(structure Element),它在每个像素位置上与二值图象对应的区域进行特定的逻辑运算,逻辑运算的结果为输出图象的相应像素。开运算能达到消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积的效果,假设给定二值图象B(x,y)和作为结构元素的二值模板x(i,j)。
腐蚀运算:
膨胀运算:
开运算:
开运算效果如图6。
(3)openCV里面的findcontou s算子能标记并提取脸部五官轮廓,通过提取出来的轮廓,计算得到眼睛、嘴巴的最大逼近张开度,然后通过比较,可判断出驾驶员的眼睛开闭状态、打哈欠次数。处理效果如图7,代码实现如下:
4 行车记录与酒精检测
随着道路上机动车数量的增多,在开车的路上难免有小刮小碰,遇到撞车党和碰瓷党的事件常有发生,所以本系统集成有行车记录仪功能,记录每一个行车过程的细节,维护司机的合法权益。如图8,系统具有清除内存、内存剩余量、续航时间报时和回播功能。同时,系统集成了12位精度的数模转换器和酒精传感器,实时对酒驾行为提出警报。
5 结论
本系统在ZYNQ ApSoC平台下,集成疲劳检测、行车记录、酒驾判断功能,对人脸检测算法进行了嵌入式架构移植,对Ada Boost算法进行了嵌入式优化,利用ZYNQ的ARM+FPGA的架构优势,在(PL)FPGA端對图像进行了灰度转换预处理,在PS(ARM)端,对来自PL端的图像进行了降噪和人脸检测、人脸五官特征值提取。
本系统的运行图如图9,通过实验,参考表1,识别率较高,达到了预定的功能,适用于车辆防止交通事故的发生等一体化行车安全场景,加以完善,有广泛的应用前景。