疲劳驾驶是交通事故的主要诱因之一,关于检测司机是否疲劳驾驶,已成为了众多学者研究的主流方向。一般而言,疲劳驾驶检测分为三个阶段:从原始图片中检测到脸部、从脸部图片中定位到眼睛、根据眼睛状态判断是否疲劳。在摄像头输入拍摄图像后,人脸检测阶段从图像中提取出驾驶员的人脸部分,人眼检测阶段从人脸中准确提取出人眼位置,疲劳识别阶段则从提取的人眼中判断出驾驶员是否处于疲劳状态。人脸检测是目标检测的一种,最有代表性的是知名的Faster R-CNN,其准确率远高于传统机器学习方法。然而,准确率提升的代价是计算复杂性的提高,这些在GPU上才能训练出来的模型难以用在工业领域,运行效率仅为GPU的1/10的CPU才是工业界常见的选择。在此背景下,单目标多目标检测器(Single Shot Multi Box Detector,SSD)和YOLO(You Only Look Once,YOLO)算法被提出用于改进深度目标检测的运行速度,但经过实验,发现这些方法在树莓派上的运行速度仅仅有2-3 fps,其中CPU和GPU的差距,以及树莓派与计算机CPU性能差距都是造成运行速度缓慢的原因。深度目标检测模型的速度决定了是否能够应用在工业领域中。在此背景下,针对疲劳驾驶拍摄图片的特殊性,本文对SSD算法进行了改进,在准确率仅损失0.78%的代价下,将运行速度提升至10.06 fps。考虑到驾驶员图像中人脸较大、仅仅需要识别出单张人脸的特性,本文的改进包括以下三个部分:1.引入轻量级网络MobileNet_V2取代原SSD算法中的VGG作为特征提取网络主干;2.放弃目标检测中耗时占比较大的小目标检测特征图;3.取消耗时长的非极大值抑制(Non-Maximum Suppression,NMS)算法,直接取概率最大的特征窗口作为检测结果。人脸检测部分已经识别出完整人脸,在此基础上检测人眼位置是相对简单的任务,本文使用机器学习算法以节省运行时间,满足实时需求,最终人眼检测部分使用了Gentle Adaboost算法,相较于传统的分类算法引入了bagging的概念,有更高的准确率。此外,本文使用Camshift算法进行人眼跟踪,跟踪算法速度更快,可以有效降低人眼检测算法触发频率,提升整体系统实时性。检测出人眼位置后,本文使用眼睛闭合时间比例(Percentage of Eyelid Closure Over the Pupil Over Time,perclos)方法在识别出的人脸上进行疲劳驾驶识别,经过多轮实验,认定人眼闭合标准选择P80标准,并配合眨眼频率制定清醒、轻度疲劳、疲劳和重度疲劳的阈值。最后通过组建摄像头、树莓派、电池、扬声器部分搭建了防疲劳驾驶系统。
暂无评论