原地址:http://www.chinaaet.com/article/index.aspx?id=114534

关键词:疲劳检测DSP亮瞳效应PERCLOS

摘  要: 针对汽车驾驶员疲劳驾驶检测的要求,设计了一种基于图像处理DSP芯片DM6437的疲劳驾驶视觉检测系统。通过DSP的GPIO口用软件控制摄像头轴上和轴外的两种不同波长的近红外光源(850 nm/950 nn)交替采集驾驶员图像,根据亮瞳效应两帧图像差分后粗定位人眼,用模板检测提取人眼的边界,根据PERCLOS值方法判断驾驶员是否疲劳。根据人眼的不同状态分别处理,用蜂鸣器作为报警系统提醒驾驶员。实验表明,该系统简单实用,而且能够全天候准确快速地判断驾驶员是否疲劳。
关键词: 疲劳检测; DSP; 亮瞳效应; PERCLOS

 疲劳驾驶是造成交通事故的主要原因之一,根据公安部交通管理局发布的2009年全国道路交通事故情况显示,2009年,全国共发生道路交通事故238 351起,造成67 759人死亡、275 125人受伤,直接财产损失9.1亿元,其中疲劳驾驶造成的事故占一定比重。减少疲劳驾驶可以降低公共财产和个人人身财产损失,因此研究防疲劳驾驶系统具有重要的意义。
 国内外有许多研究防疲劳驾驶监测系统,就目前来看,防疲劳监测系统并没有实现市场化原因有两点:一是各种方法都有一定的缺陷,比如用肤色变换提取人脸定位人眼的方法和灰度图像积分投影的方法因受光照影响,定位不准确;二是运行时间慢,达不到实时监测。针对此两点不足设计了本系统。
本系统用轴上和轴外的不同波长的近红外光采集图像,根据亮瞳效应分别能得到亮瞳孔图像和暗瞳孔图像,差分后快速定位人眼,用模板检测提取人眼边界,判断疲劳状态。系统的创新点是人眼定位方法简单准确,疲劳判断标准全面快速。
1 疲劳状态检测原理
1.1 人眼睁开程度检测原理

 人的眼睛是一个精巧的光学成像系统,可以简单地把人眼抽象成一个光学模型,晶状体等效为一个凸透镜,视网膜看做一个光屏。进入人眼的光线是通过晶状体后成像于视网膜上,并且光线能被视网膜反射出去。根据人眼的特性,设计出有效的光源使采集到的图像出现亮瞳孔和暗瞳孔。
 亮瞳效应(bright eye effect)[1]是美国著名的学者Hutchinson在眼睛运动检测专利中提出的,当靠近摄像头光轴的红外光源照射到人脸时,视网膜反射光会使瞳孔显得很亮就是所谓的亮瞳效应,当然眼角膜也会反射光,会在眼球上出现比较小的亮点(glint)[2],如图1所示。经过试验发现,出现亮瞳孔的亮度主要跟三个因素有关:离摄像头光轴的距离、光源的波长、光照强度。距离摄像头光轴的距离越近,反射光就越多进入摄像头,瞳孔就会显得越亮。人眼瞳孔对近红外光有较高的透射率,而人眼视网膜对不同的波长的光具有不同的反射量,对850 nm的红外光能把90%的入射光反射回去,对950 nm的红外光能把40%的入射光反射回去[3]。因此靠近摄像头轴上的光源选择850 nm的红外光较好,容易产生亮瞳孔,轴外的光源选择950 nm的红外光较好,会出现暗瞳孔。由于外界可见光会影响到亮瞳效应,因此在摄像头上会加上近红外滤光片,考虑到成本和使用效果用830 nm的高通滤光片就可以了。结合光源的光照强度和摄像头的视角,本系统的使用范围在40 cm~1 m之间,经过测试可以满足在汽车中的使用。

1.2 人眼疲劳状况监测原理
 系统主要是靠人眼的闭合程度和持续的时间来判断驾驶员是否疲劳,采集到的图像人眼只会存在三个状态分别是:完全闭合、正常睁开、半睁半闭(眯眼的情况)。系统必须根据不同状态出现的时间来判定疲劳状态。
当眼睛完全闭合时,采集的两帧图像并没有亮瞳孔和暗瞳孔之分,不好定位人眼,这时将检测不到人眼作为一个特征来处理。连续5次都检测不到人眼说明人眼一直处于闭合状态,证明驾驶员疲劳了,这时启动报警系统提醒驾驶员。
 大多数情况下,采集到的图像都是人眼睁开的状态(包括正常睁开和眯眼),采用PERCLOS法判断驾驶员的疲劳状态。到目前为止PERCLOS法是判断眼部疲劳状态的最有效的方法[4],PERCLOS是单位时间内眼睛闭合所占时间的百分比[5],比较科学的就是P80,即眼睛闭合80%所占时间的百分比。由于每个人的眼睛大小都不一样,不能用同一阈值去判断眼睛是否闭合了80%,通过图像处理得到的参数是眼睛的高宽比h(t),设定每次系统启动后把前10次得到的参数h(t)都存到一个数组A[10]中,然后在数组A[10]中找到最大的Amax存储到一个固定的地址中,以后每次得到一个高宽比h(t),人眼闭合程度p(t)就可以如式(1)求出:

在此系统中PERCLOS定义为5 s人眼闭合80%以上的帧数占图像总帧数的百分比。当PERCLOS大于40%时判定驾驶员疲劳,启动报警系统提醒驾驶员。
2 驾驶员疲劳状况监测系统的研制
2.1 硬件系统

 设置在驾驶员前方的摄像机实时获取驾驶员脸部视频图像,经过视频解码器转换成数字图像,经微处理器送入数据存储器。本系统通过控制电源转换开关,从而获取两种不同波长光源照射的脸部图像,通过软件处理能够快速确定人眼位置。为本系统编写的应用程序存放在程序存储器中,系统上电时,通过引导程序将存放在程序存储器中的应用程序自动引导至微处理器中的数据存储区。当系统判定驾驶员处于驾驶疲劳状态时,通过蜂鸣器给予警示。该系统功能框图如图2所示。

2.2 软件系统
 软件系统流程图如图3所示,利用亮瞳效应,轴上和轴外不同波长的交替使用会得到两帧瞳孔亮度差距很大的图像,由于采集两帧图像的时间间隔非常短,只有20 ms,基本上驾驶员的位置没有什么变化,所以两帧图像除瞳孔外,别的地方亮度差距不大。先对两帧图像中值滤波后,再差分,会得到瞳孔位置很突出的差分图像,粗定位眼睛的位置,根据眼睛的特征设置模板,提取出人眼的边界,最后计算PERCLOS值判断驾驶员的疲劳状态,当差分后找不到一对瞳孔时说明采集的两帧图像人眼都是完全闭合的,出现这种状况时把找不到瞳孔作为一个特征来处理,连续出现找不到瞳孔时系统判定人眼一直闭合,判定驾驶员已经疲劳,启动蜂鸣器提醒驾驶员。

2.3 系统模块
 本系统分为4个模块,分别为:图像采集模块、图像处理模块、疲劳判断模块和报警系统模块。
2.3.1 图像采集模块
 根据亮暗瞳孔的形成原理,要想产生亮暗交替的瞳孔图像,需要在同一平面内放置两组近红外光源,一组放在摄像头光轴上,另一组置于轴外。当只打开轴上光源时,就可获得亮瞳孔图像;当只打开轴外光源时,就可获得暗瞳孔图像。由于半导体发光二极管(LED)具有效率高、体积小、寿命长,易于制造成各种特定形状和容易实现不同照射角度等优点,故光源结构中都采用LED作为发光元件。光源设计如图4。

2.3.2图像处理模块
 由于采集的过程中肯定会存在噪声,所以先用一个3×3的模板对采集到的图像进行中值滤波,减少噪声对图像处理的干扰。图5是中值滤波后的亮瞳孔图像和暗瞳孔图像。

 因为采集两帧图像的时间间隔非常短,两帧图像的位置基本上没什么变化,由于一帧图像瞳孔位置是亮点,另一帧图像瞳孔位置亮度小,而两帧图像别的区域亮度值变化不大,所以差分后的图像瞳孔位置应该是最亮的区域。通过观察差分图像,也能发现差分后瞳孔位置基本上是图像上最亮的部位,可以根据这个特征粗定位人眼。在应用上驾驶员脸部区域离摄像头镜头位置距离在40 cm~1 m之间,连续采集图像时,眼睛小区域的面积差别不是很大,在差分图像上找到最亮点Imax1,通过这个亮点找到一个小区域,把这个小区域的亮度值都设定为零后再在差分图像上找到另外一个最亮点Imax2,根据这个亮点再扩展一个小区域,这两个小区域就是驾驶员左右眼的区域,如图6所示。这种方法的优点是粗定位速度快而且可以避免阈值的设定。

 目前,用于提取人眼边界的方法有很多种,包括各种算子的边缘提取和灰度图像积分投影等等。在此系统中,可以根据粗定位后图像的特征来提取人眼边界。在粗定位图像中,通过观察发现,上眼睑的边界有一特征,就是上面的灰度值比下面的灰度值大;同理,下眼睑的边界特征是:下面的灰度值比上面的大。定义一个模板分两次在粗定位图像上搜索,分别找到满足这两个特征的点,如图7(b)。在扫描过程中找到上眼睑的最高点M(x3,y3)、下眼睑的最低点N(x4,y4),左临界点L(x5,y5)、右临界点R(x6,y6)。得到与眼睛边界相切的矩形框如图7(c)。

 人眼的高宽比h(t)可以求出如式(2):

2.3.3 疲劳状态判断
 在前面图像处理时,差分图像后会找到两个点Imax1(x1,y1)、Imax2(x2,y2)。人眼睁开情况下,这两个点应该在左右瞳孔里,由于左右瞳孔是对称的两个区域,通过实验测试亮点的垂直坐标距离在[0,10]区间里并且水平坐标距离在[25,50]区间里,依此作为依据判断是否检测到人眼。设定一个计数函数,如果连续五次检测都没有检测到对称的双瞳孔说明人眼完全闭合了,软件通过GPIO口启动蜂鸣器提醒驾驶员。
 在能定位人眼时根据PERCLOS值来判断疲劳状态,如前面原理描述一样处理。
2.3.4报警系统
 报警系统采用价格便宜的蜂鸣器,用DSP的GPIO口控制蜂鸣器的启动与停止。
3 实验结果及分析
 利用实验室的设备制作光源,将DSP开发板与光源和仿真器连接,通过仿真器连接PC机和开发板,在CCS3.3环境下调试该系统,最后把程序嵌入到开发板中。连续采集两帧图像的时间间隔为20 ms,为了尽量加快图像处理时间并且满足系统需要,图像大小设定为360×384。测试结果如表1所示。

 检测失误的原因是:虽然安装了近红外高通滤光片,但白天阳光强烈时阳光中的近红外光也很多,影响光源的光照强度,因考虑到成本,滤光片的效果一般,影响了系统的试验结果。另外出现判断失误的原因是,测试人员头部左右摆动幅度太大,摄像头采集图像时采集不到人眼图像。
 此系统的主要优点是定位方法简单并且实用,针对人眼的不同状态,系统分别采用不同的判断疲劳标准,这种方法减小了误判率,缩短了系统处理时间,但有一些缺陷还需要改进。首先,利用亮瞳效应定位人眼,当驾驶员戴眼镜时会出现亮斑再用此方法定位人眼就会出现错误定位。其次,通过研究表明红外光长期照射人眼不健康,以后可以尝试减少红外光的照射时间,用可见光和红外光混合使用。
参考文献
[1] HUCHINSION T E. Eye movement detector with improved calibration and speed. United States, 4 950 069[P]. 1990-08-21.
[2] JI Q, YANG X. Real-time eye ,gaze, and face pose tracking for monitoring driver vigilance[J]. Real-Time Imaging, 2002(8), 357-377.
[3] 刘志强,秦洪懋,汪澎,等.驾驶疲劳监测系统DDDS设计方法[J].江苏大学学报(自然科学版),2008,29(1):25-28.
[4] BISHOP R. Survey of intelligent Vehicle Applications Worldwide[C].Proceedings of the IEEE intelligent Vehicles symposium 2000:25-30.
[5] DINGES D F, GRACE R.PETCLOS: A Valid Psycho physiological Measure of Alertness as Assessed by Psychomotor vigilance[R]. Washington: Federal Highway Administration, Office of Motor Carriers, 1998.

基于DSP的疲劳驾驶检测系统的研究的更多相关文章

  1. VulDeePecker:基于深度学习的脆弱性检测系统

    最近的两款软件,VUDDY和VulPecker,假阴性率高而假阳性率低,用于检测由代码克隆引发的漏洞.而如果用于非代码克隆引起的漏洞则会出现高误报率. 本文使用深度学习处理程序中的代码片段,不应由专家 ...

  2. 谷歌发布基于机器学习的Android APP安全检测系统:Google Play Protect

    Google Play作为众所周知的在线应用市场,因为审查制度的松散,经常会有一些恶意软件伪装成其他应用混入其中.此前阿里聚安全小编就报道了2例关于恶意软件伪装在Google Play上的事件:< ...

  3. 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常

    基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...

  4. 构建基于Suricata+Splunk的IDS入侵检测系统

    一.什么是IDS和IPS? IDS(Intrusion Detection Systems):入侵检测系统,是一种网络安全设备或应用软件,可以依照一定的安全策略,对网络.系统的运行状况进行监视,尽可能 ...

  5. 基于DRL和TORCS的自动驾驶仿真系统——之环境配置

    基于DRL和TORCS的自动驾驶仿真系统 --之环境配置 玩TORCS和DRL差不多有一整年了,开始的摸爬滚打都是不断碰壁过来的,近来在参与CMU的DRL10703课程学习和翻译志愿者工作,也将自己以 ...

  6. adas--智能驾驶辅助系统

    先进驾驶辅助系统(Advanced Driver AssistantSystem),简称ADAS,是利用安装于车上的各式各样的传感器(可侦测光.热.压力等变数), 在第一时间收集车内外的环境数据, 进 ...

  7. Mobileye高级驾驶辅助系统(ADAS)

    Mobileye高级驾驶辅助系统(ADAS) Mobileye is the global leader in the development of vision technology for Adv ...

  8. 疲劳驾驶打瞌睡?python保障您的驾驶安全

    道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足4小时,交通事故肇事几率等同于醉驾. 为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生.这是一项安全技术,可 ...

  9. AI实战分享 | 基于CANN的辅助驾驶应用案例

    摘要:什么是辅助驾驶?简而言之,就是借助汽车对周围环境的自动感知和分析,让驾驶员预先察觉可能发生的危险,有效增加汽车驾驶的舒适性和安全性. 导读:基于昇腾AI异构计算架构CANN的辅助驾驶AI应用实战 ...

随机推荐

  1. EF 简单的 CRUD、分页 代码笔记

    添加: static void Main(string[] args)        {            CCDBEntities ccdbContext = new CCDBEntities( ...

  2. ADO.NET 对象 结构图

  3. 京JS 2013 - A two-day conference in Beijing for the JavaScript and Node.js community

    京JS 2013 - A two-day conference in Beijing for the JavaScript and Node.js community 关于技术大会 京JS 2013 ...

  4. C++操作符的优先级

    C++操作符的优先级 C++操作符的优先级 操作符及其结合性 功能 用法 L L L :: :: :: 全局作用域 类作用域 名字空间作用域 ::name class::name namespace: ...

  5. git clone cm source &amp; cm vs android version

    $ git clone https://github.com/CyanogenMod/android_packages_apps_DeskClock.git -b cm-9.0.0 CM4代表(And ...

  6. SharePoint 2013 &quot;通知我&quot;简单的功能

    简单的功能 "通知我"内部列表或文档库中的主要项目.加入/删除/修改等操作,用户的E- mail通知设定功能:设置列表或文档库通知的能力,有可能设置通知为一个单一的项目.这是Sha ...

  7. NodeJS会是昙花一现吗?

    在用了一年以后,我感觉node.js有一点不正确劲.它非常有意思,可是我认为我应该用另外一个视角去审视它. 网络编程真的能够更easy吗? node.js无疑有一些设计很好的地方.前段时间我写了一个性 ...

  8. c# 未能载入文件或程序集

    近期做项目时碰到这个问题了.goole.百度了半天,整理了下面几种可能: DLL文件名称与载入时的DLL文件名称不一致, DLL文件根本不存在,即出现丢失情况, 载入DLL路径错误,即DLL文件存在, ...

  9. check————身份证

    -- Access 不支持 Substring 查询,可以替换为 mid 查询. select 序号,姓名,身份证号,性别from 身份表where (len(身份证号)<>15 and ...

  10. MySQL生成-单据号不重复

    需求生成一个单据编号 单据编号结构: “单据类型” + “日期” + “流水号” 例子 : GD201605230000007 代码: DELIMITER $$ CREATE PROCEDURE `y ...