基于ARM+DSP的驾驶员眼部疲劳视觉检测算法设计
 
- UID
- 872238
|

基于ARM+DSP的驾驶员眼部疲劳视觉检测算法设计
如何为驾驶员提供一个有效实用的安全辅助驾驶系统是车辆安全驾驶的一个重要课题。基于机器视觉的疲劳驾驶检测技术已在国内外开展了广泛研究,其中以驾驶员眼部特征的检测最为广泛。
本文以低成本、低功耗、高实时性为设计原则,以ARM+DSP构成硬件平台,并移植了嵌入式操作系统WindowsCE5.0,设计了一套基于驾驶员眼部特征的疲劳驾驶检测算法,对驾驶员驾驶过程进行实时检测和报警,从而提高驾驶的安全性与舒适性。
1 硬件平台设计
系统硬件平台选用三星公司ARM9架构的S3C2440作为核心处理器,利用TI公司的TMS320DM642作为视频采集处理模块,其结构框图如图1所示。DSP平台主要负责采集图像、图像算法处理,ARM平台主要完成整个系统的控制处理,两者之间通过网口实现通信和同步。在系统运行过程中,ARM平台可实时显示采集到的视频以及相应眼部疲劳特征识别的结果,同时用户可通过触摸屏交互界面对系统进行设置和控制。为保证系统平台具有高的可靠性以实现复杂的系统调度,在设计过程中对本系统各平台进行了操作系统移植,DSP平台移植了DSP/BIOS系统,ARM平台移植了Wince操作系统。.jpg) S3C2440是一款基于ARM92OT核的16/32bitRSIC结构的嵌入式微处理器,主频为400MHz,最高可达533MHz;片内外资源丰富,具有强大的处理能力。系统存储扩展了64MB的NANDFlash、64MB的SDRAM;另外还有2MB的NORFalsh,用于存放系统引导加载程序[1]。
TMS320DM642芯片[2]能够实时高速地完成大数据量的数字视频编解码处理,是强大的高性能单片多媒体处理器,具有高质量、多通道、优越的视频处理性能,以及完整的软件可编程特性;基于C64x系列VelociTI.2DSP架构的设计,与TI公司其他的C64x数字信号处理器代码相兼容,拥有500/600MHz时钟频率,性能高,其传输速率达4000/4800MIPS;不仅具有C64x系列芯片的主要特征,还高度集成了音视频等外部设备的接口,方便多媒体应用开发。
2 图像识别算法
2.1 总体检测流程
首先,根据脸部肤色的聚类特性检测驾驶员脸部位置,在人脸检测的基础上,根据眼睛在人脸上的几何位置分布,确定眼睛的大概位置,缩小眼部检测的区域范围;其次,在缩小的眼部搜索区域范围内,利用Sobel边缘检测算法对眼部区域进行边缘检测,提取眼部的边缘信息,并对其进行二值化处理;再对二值化后的眼部区域进行连通成分分析,采用基于区域连通的二值图像滤波方法去除眼部周围图像噪声点的干扰;然后根据改进的积分投影算法,计算左右眼角和上下眼睑的距离,确定驾驶员眼睛的睁闭状态;最后,定义眨眼频率,并据此实现疲劳驾驶的检测。具体的算法流程如图2所示。
.jpg)
2.2 基于肤色聚类的人脸检测
肤色对面部表情、头部旋转以及图像尺度的变化不敏感,但是人脸检测的一个重要特征。在HSV颜色空间,图像的照度和色度是分离的,肤色聚类更紧密,不易受周围光线的影响。因此,本文采用基于RGB和HSV颜色空间的肤色聚类算法对驾驶员脸部进行检测。从摄像头采集的图像为RGB格式,可以利用式(1)实现从RGB颜色空间到HSV空间的转换[3]。
.jpg) 2.3 眼部感兴趣区域确定
假设检测出的人脸区域长度为HF、宽度为WF,在竖直方向上,眼睛大概位于脸部二分之一以上、头顶以下HF/5的区域。在水平方向上,眼部边界区域被定位于距离脸部左边界WF/8处开始到距离脸部右边界WF/8处的区域。根据上述原则,初始眼部检测区域为如图3中所示的矩形EFGH区域。
.jpg) 2.4 基于Sobel算子的边缘检测
边缘是图像灰度变化剧烈的地方,在从皮肤到眼白再到瞳孔的变化过程中,包含了丰富的眼部图像边缘信息,因此可以用边缘提取的方法将眼部边缘提取出来作为人眼检测和定位的基础。利用Sobel边缘算子对初始眼部检测区域进行边缘检测,能够有效地将眼部边缘提取出来。Sobel算子可用矩阵形式表示为:
.jpg)
2.5 改进积分投影算法确定左右眼角和上下眼睑的距离
对滤波后的二值图像,首先将初始眼部检测区域EFGH从水平方向的中线位置分成如图3所示的左右两个部分(即右眼检测区域EMNH和左眼检测区域MFGN),然后利用改进积分投影算法分别在左右眼检测区域内确定左右眼的左右眼角距离及上下眼睑距离。因左、右眼的参数确定方法类似,故仅以右眼检测区域EMNH为例说明参数的确定过程。具体实现过程如下:
(1) 为避免计算过程中眼睛上方眉毛对定位结果的影响,算法在确定上下眼睑边缘,从右眼检测区域EMNH的最下方一行像素开始向上搜索,逐行从左至右统计每行中灰度值等于1的像素个数,并将第i行中灰度值为1的像素个数之和存放在数组Nc中,规定右眼检测区域EMNH的最下方一行为第0行,即i=0;每搜索统计完一行后i自动加1。
(2) 对当前第i行中灰度值等于1的像素的个数之和进行统计计算,如果:
.jpg)
3 实验与分析
为验证眼睛疲劳特征检测算法的有效性,在构建的ARM+DSP系统上对采集到的视频图像进行实验验证。在沪宁高速南京段的实验结果表明,该系统将算法处理时间控制在50ms以内,取得了良好的实时效果,疲劳驾驶检测正确率达97.6%。部分图像的眼部区域检测结果如图4所示,其中,第一行为人脸检测后的面部定位图像,第二行为经Sobel边缘检测后的眼部二值图像,第三行为得到的眼部边界定位图像。
.jpg) 通过观察发现,通常情况下,驾驶员在睁眼和闭眼时,左、右眼的睁闭情况是同步的,即同时睁开或同时闭合。因此,在对眼睛睁闭状态进行判断时,为减少计算量,仅对左眼的睁闭情况进行判断。针对图4所示的眼部区域检测结果,利用式(8)计算其左眼睁闭度的大小,计算结果如表1所示。
由表1可知,图4中第一列和第二列所示的眼睛闭合时的睁闭度值明显小于第三列和第四列所示的眼睛睁开时的睁闭度值。故只要选择合适的阈值,根据眼睛睁闭度值的大小,就可对驾驶员眼睛的睁闭状态进行有效判断。
.jpg)
本文在ARM+DSP系统上实现了基于眼部特征的疲劳驾驶检测算法。利用基于肤色聚类的脸部检测算法确定脸部边界,采用一种简单有效的改进积分投影算法,实现了驾驶员眼部睁闭状态的有效判定和疲劳驾驶的实时检测。 |
|
|
|
|
|