防疲劳驾驶

来源:互联网 发布:windows本地搭建git 编辑:程序博客网 时间:2024/04/28 10:23

驾驶员在疲劳时,其对周围环境的感知能力、形势判断能力和对车辆的操控能力都有不同程度的下降,因此非常容易产生交通事故。所以,疲劳驾驶是当今交通安全的重要隐患之一。为此,很多研究机构与厂家都希望推出能够预防疲劳驾驶的设备,希望能够快速抢占汽车市场,但由于研发难度大,效果不理想,软硬件成本高,直到如今也只是在极少车型上有相关系统,如丰田和沃尔沃的一些高配车型。

高级驾车辅助系统ADAS是未来汽车电子的发展方向,而防疲劳驾驶系统则是ADAS里面的一项非常重要的子系统。由于公司发展需要,我也有幸能够进入ADAS团队,也希望自己的一点经验能够给后来者一点启示。

目前能够非接触式检测疲劳程度比较权威的方法是PERCLOS,即将眼睑闭合时间占某一特定时间的百分比。因此,要想通过这种方法检测疲劳度,快速且准确的找到眼睛,并判断眼睛闭合程度是关键。当然,方法很简单,但实现却不容易,至少难倒了对疲劳预警系统感兴趣的很多国内的汽车电子厂家和原厂。

有人想通过亮瞳效应来定位眼睛,方法与设备也非常简单,由于瞳孔对某一波长的光反射明显,使用近红外LED灯以一定频率亮灭,在图像中即可呈现出瞳孔位置有明显的差别,根据图像差就能找到候选点。但这种方法有很多不足,LED灯功率不足的情况下,效果明显较差,但如果功率过高,则会伤害人眼,虽然使用者并不能看见近红外光,但伤害且一直存在!即使如此,光照影响、性别、个体差异都将影响这种方法的有效识别率,带眼睛则更不用说了。

有人。。。。。。还是不要一一列举了

还有国内甚至是国外的很多相关论文所描述的方法,大都无参考价值。当然,如果只是想做玩具或者是DEMO,又或是忽悠一下领导,用里边的某些方法还是可行的,要想真正做一个带来商机的产品则完全不行。如果可能,搜索在这方面有突出贡献的厂商的相关专利或许会有更多启发。

如果您需要尽快推出DEMO,增加公司高层的信心,抢占市场先机,又能够有较强的扩展性与提升性,不妨采用一些折中的办法来实现。系统大致的工作流程:搜索人脸、定位眼睛、判断眼睛状态、PERCLOS判断疲劳度。

搜索人脸:

基于Haar特征的Adaboost的算法是这方面的权威,曾经有人说,这种算法与思想实在难以超越,当然前提是使用低成本硬件。这个算法,可以直接从opencv移植到DSP上面,对于正面人脸检测效果还是相当不错的,但如果您需要更快的速度与实际的适用性,您得优化一下这个算法,缩小图片,适当的应用DMA、CACHE与硬件加速器,浮点转定点,自己训练减少分类器层数等方法都能够有效的提升该算法的效率。

OPENCV中带的训练好的分类器只能做正面人脸检测,而我们的疲劳预警系统的摄像头一般装在仪表前方的方向盘柱上,从这个角度拍的是仰角,一般不能获取到较好的效果,所以需要自己训练。如果您还需要检测人脸朝向,可以考虑多角度的Adaboost算法,当然最好在您前面工作已经做的很好的情况下才去深入。当然,有人喜欢用一步到位的方法。

定位眼睛:

定位眼睛一般要求摄像头加滤光片,只让近红外光通过,只有这样才能在带墨镜的情况也能够检测眼睛。如果人脸定位能够取得比较好的效果,那到了这一层面,只需要排除眉毛、眼袋、镜片反光、镜框、鼻孔的影响。当然,说的容易,做的难。

由于硬件的制约,与成本的控制,眼睛的有效像素值太少,眼睛的特征并不十分明显,极容易与鼻孔、黑色镜框、眉毛混淆。这个时候,模式识别的方法可能会面临速度慢且效果不佳的尴尬,至少在这一块,得花上不少的时间。这个时候,三庭五眼、几何关系、边缘特征等一系列传统方法能够较快的实现一些差强人意的效果。

如果您需要更好的效果,那就在成本允许的情况下,视频能够更加清晰,DSP的性能更加卓越,这对于眼睛的精确定位有着非常重要的作用。因为,在这里,很多人搞不清楚疲劳预警是什么东西,以为疲劳预警就是眼睛睁闭检测器。如果您连这个也不懂,那没必要这么苛刻,毕竟成本低也算是一种优势。

眼睛状态判别:

眼睛状态判别依赖于眼睛定位精确的程度,或许仅仅是用P尾阈值法或者是边缘检测就能够得出睁闭的结果。只对于只想做眼睛睁闭检测器的人来说,到这一步已经够了。至少,我们这个demo的效果应该还是可以的。

如果,您需要卓越,那您考虑的应该是眼睛的睁闭程度。这个最好能够有统计学习算法的支持,计算出驾驶员眼睛的正常大小,这样才能够得到正确的睁闭程度。不过,要使睁闭程度变的有意义,运行速度是至关重要的!

PERCLOS:

非常简单的公式,非常有效的算法,依赖于能够获取实时的眼睛睁闭信息。

 

在这个系统中,准确率与速度是最关键的,而且往往准确率与速度是相互制约的,这需要您的权衡。当然,我们更乐于看到有更高效的系统方案推出。。。


原创粉丝点击