疲劳驾驶检测系统详细设计说明书2015年3月13日目录1.引言...............................................................................................................31.1编写目的...............................................................................................31.2背景.......................................................................................................31.3定义.......................................................................................................31.4参考资料...............................................................................................42.程序系统的结构...........................................................................................43.详细设计.......................................................................................................63.1程序简单描述......................................................................................73.2整体结构...............................................................................................73.3性能.......................................................................................................73.4输入输出项..........................................................................................83.5算法.......................................................................................................83.5.1人脸检测算法..............................................................................83.5.2OTUS最佳阈值图像分割法.......................................................93.5.3ROBERTCROSS边缘检测.........................................................93.6主要类的说明以及XML配置文件................................................103.7存储分配............................................................................................163.8注释....................................................................................................163.9测试计划............................................................................................173.10尚未解决的问题.............................................................................171.引言1.1编写目的此说明书在概要设计的基础上,对基于人眼的疲劳检测终端各个模块,程序分别进行了实现层面上的要求和说明。在以下的详细设计报告中将对在本阶段中队系统所做的所有详细设计进行说明。主要工作包括:根据软件需求说明书所描述的数据,功能,运行,性能,需求,并依照概要设计说明书所确定的处理流程、总体设计、软件系统的结构设计,逐个模块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等)。软件开发小组的产品实现成员应该阅读和参考此说明书,从而进行代码的编写,测试。1.2背景说明:A、待开发系统的名称:不规范驾驶检测系统B、开发者:孙艳强陈浩倪四飞用户:驾驶员或者是汽车厂商以及交通管理部门C、项目开发背景:学生工程实践选题定义1、android-opencv:这是一个在android操作系统上的Opencv开源库,本系统的开发中用到了该库,加快了开发的效率,降低了开发成本。2、系统:待开发的不规范驾驶检测系统参考资料《软件工程概论》《软件文档编写》《android应用程序设计》《java基础》《opencv教程》《andorid-opencv手册—网页版》2.程序系统的结构本待开发的系统采用的软件层次框图如下图所示:在前期的方案确定的时候,采用的是基于android操作系统的OpencV开源库,因此只需要将编译好的OpenCV库导入到开发环境中即可进行开发,因此本系统的主要开发工作集中在应用程序的设计部分。Android应用程序Android-OpenCV库AndroidOS硬件平台在项目的概要设计中,确定的具体的软件的主流程方案如下图所示。状态分析有超出阈值没达到达到是否获取一帧图像图像预处理人脸定位人眼和嘴巴定位给予警示结束计数开始有摄像头打开摄像头在人眼状态的判断过程中具体的步骤如下图所示。3.详细设计为了完成系统所需要的功能,我们设计了一个类来实现:FdActivity说明如下:FdActivity:该类是作为程序的主界面类,在该类中,将surfaceview占据了整个界面,在该类中主要重写了onCreate()、onPause()、onDestroy()、onCameraViewStarted()、onCameraViewStopped()、onCameraFrame()、onCreateOptionsMenu()、onOptionsItemSelected()、函数具体的分析参见程序的具体描述部分;onCameraFrame()函数:在系统实时监测驾驶员的头像数据的时候,需要显示当前的帧率,该类就是负责帧率的显示的类,该类中,主要是实现了以下的几个功能:人脸检测人脸定位二值化边缘检测闭合从一帧图片中计算人眼的区域绘制人眼的区域3.1程序简单描述打开摄像头,实时采集脸部的帧数据,图像进行灰度变化,首先进行预处理,将背景噪声以及图像中的突刺变化去除,防止影响后面的图形计算精度;利用Opencv中的已有函数接口进行人脸和人眼的定位,在将人眼的轮廓提取出来,这里面的用的方法:Otus和RobertCross边缘检测。利用最大垂直距离进行是否闭合的判定,组后再利用PERCLOS原理进行疲劳状态的判断。3.2整体结构见概要设计说明书3.3性能实时性:能基本实现实时性的要求对人脸的判断准确度:95%以上眼睛的判断准确度:90%以上疲劳识别:80%以上3.4输入输出项输入的数据是:摄像头采集的实时数据输出是:预警声音3.5算法人脸检测算法传统的检测人脸分方法有很多种:基于肤色的分离、基于统计模型、或者是PCA方法,但是这些方法识别的时间较长,并且准确率不高,在本文中,采用的是OpenCV中非常成功的基于Haar-Like特征的Adaboost算法。人脸检测分成两步:首先是训练过程产生分类器文件,再是利用分类器进行人脸检测过程[4]。训练过程:(1)准备正负样本,正样本是需要检测的目标(正脸),负样本是不含正样本特征的任何目标;(2)利用CreatSample程序准备正样本集;(3)利用Haar-Training程序训练得到分类器特征xml文件。检测过程:利用android-OpenCV中的分类器构建函数去加载该特征xml文件,利用分类器本身的成员函数[4,5]:detectMultiScale(Matimage,ListRectobjects,doublescaleFactor,intminNeighbors,intflags,SizeminSize)对指定的image进行检测。其函数各参数的意义:Image:需要进行目标检测的区域.Object:将检测到的目标标记在矩形框中.scaleFactor:代表图像的缩放因子.Minneighbors:指定每个候选矩阵至少包含的邻近元素个数.Flag:标志位,默认为0.Minsize:最小的检测窗口,如果该值设置过小,将会导致图像的计算量较大。Otus最佳阈值图像分割法当系统成功标记处人眼部的区域后,需要进行二值化处理,从而实现眼部提取。但是由于图像的灰度值对光线很敏感,固定的阈值势必无法满足要求,本文采用的是基于Otsu算法的二值化处理。Otsu算法,又被称为最大类间法,是一种自适应的图像分割技术,它是根据最小二乘原理推导出来的,根据光线强度的不同,阈值会随之变化,能得到最优的阈值[7],其基本原理如下:将直方图在某一阈值进行分割成两组,称为“前景”和“背景”,当被分成的两组的方差最大时候,该阈值就是最佳分割阈值。方差是灰度均匀分布的一种度量,值越大,说明构成图像两部分的差别越大,当部分“前景”错分为“背景”或者“背景”错分为“前景”的时候,都会导致方差变小,因此最大类间法意味着错分的概率最小。对于图像直方图,不妨假设其灰度级为0~m,像素点个数为N,针对某一个分割阈值t,那么整个图像被分割成两部分,0~t称为“前景”,而t+1~m称为“背景”。“前景”的权重为Wf,均值设为Mf,方差为Df,“背景”的权重为Wb,均值设为Mb,方差为Db。图像的整体的方差公式如式3所式。bbffDWDWD**(3)Otsu的最终目的就是要求出D的最大值来,从而得到最优的分割阈值。RobertCross边缘检测边缘是图像灰度值变化剧烈的位置,因此包含了大量的有用信息,常用的边缘检测包含很多,比如:RobertCross边缘检测,Canny边缘检测,Prewitt边缘检测,Sobel检测。但是这些方法中唯有RobertCross计算方便简单、快速,容易在实时系统中实现,本系统中采用的就是该检测方法,根据任意一对互相垂直方向上像素点的差分来计算梯度的原理[8,9],采用对角线方向相邻像素灰度差。如式4所示:|1)+jf(i,-j)1,+f(i|+|1)+j1,+f(i-j)f(i,|=j)G(i,(4)G代表的是计算之后的灰度值,而f代表的是原始图像的灰度值。虽然Robert检测速度很快,但是其缺点也是很明显的,对噪声敏感,并且边缘不是很光滑。3.6主要类的说明以及xml配置文件在上面的概述中,我们初步说明了在该系统的实现过程中需要实现的几个类。在这里我们详细的说明。//思路:详细写出每个类的每个函数接口的作用以及用法FdActivit