参考:
Dlib模型之驾驶员疲劳检测三(瞌睡点头)_疲劳检测 点头-CSDN博客
python毕业设计 深度学习疲劳检测 驾驶行为检测 - opencv cnn_疲劳驾驶算法-CSDN博客
1.数据集使用什么?
使用开源的人脸数据库训练集模型dlib
该系统采用Dlib库中人脸68个关键点检测shape_predictor_68_face_landmarks.dat的dat模型库及视频中的人脸,之后返回人脸特征点坐标、人脸框及人脸角度等。
2.dlib有什么好处?
2.系统的核心功能?
随着计算机视觉检测技术在汽车驾驶安全领域的广泛应用,驾驶员疲劳特征识别需要突破传统小部分特征识别上的局限性和单一性。
为此,设计了一种基于OpenCV的驾驶员疲劳特征识别系统。
该识别系统以树莓派为处理核心,利用摄像头获取所需的检测数据,综合分析驾驶员眼动,嘴型及头部姿势特征,进行疲劳判断。
若处于疲劳驾驶状态,则用语音播放方式发出警告。
该系统通过多次调试验证,实时监测驾驶员的驾驶状态,能更加全面,高效识别驾驶员是否属于疲劳驾驶。
2.疲劳驾驶预警系统的核心功能?
- 识别出驾驶员姓名
- 分别通过Blinks,Yawning,Nod来表示驾驶员的眨眼,打哈欠,点头数
- 正常的睁眼闭眼不会被计入,疲劳状态的半睁半闭Blinks+1
- 左右查看车况,抬头不会误计入
- 当连续低头超过2s,或者当连续闭眼超过2会自动报警,并存入抓拍图片。
4.68个关键点来识别人脸:眉毛轮廓,双眼轮廓,鼻子轮廓,嘴巴轮廓,脸颊轮廓
5.实际检测数通过索引找到每个点在做什么事情
6.基本流程:
- 先做关键点的定位:首先找到人脸轮廓位置face_detection,然后找到人脸上的各个点相对于轮廓的位置land_mark
- 使用dlib人脸识别库:加载人脸检测工具,创建检测68个关键点的检测器,读入数据,检测到多张人脸
- 使用cv2包提取出一个矩形
- 计算各个部位关键点的凸包
如何检测眨眼、打哈欠?
- 闭眼检测,提取人眼部分的点。通过论文提出的EAR值。EAR越大,睁眼;EAR越小,闭眼。用欧式距离。
- 计算视频中每一帧的眼睛纵横比EAR值,当EAR值小于0.2并且连续3帧时,计一次blink
- 类似方法计算哈欠数,嘴巴纵横比,Yawn为打哈欠的帧数,N为1 min内总帧数,设双阈值法哈欠检测的阈值为10%,当打哈欠频率Freq>10%时,则认为驾驶员打了1个深度哈欠或者至少连续2个浅哈欠,此时系统进行疲劳提醒。
如何检测瞌睡点头?
基于HPE(Head Pose Estimation)算法的点头检测算法步骤:
- 2D人脸关键点检测:加载人脸检测和姿势模型估计
- 3D人脸模型匹配:目的是得到世界坐标系中人的点,通过算法对不同的人脸拟合出不同的3D人脸模型,3DMM。
- 求解3D点和对应2D点的转换关系:世界坐标系通过旋转平移到相机坐标系,相机坐标系通过透视投影转换到图像坐标系,3D转换到2D,最后图像坐标系转换为像素坐标系。
- 判断是否点头:主要是判断旋转角,由于瞌睡时主要考虑pitch俯仰角和roll旋转角,在一个时间段内10 s内,当IPitchI≥20°或者|Rolll≥20°的时间比例超过0.3时 ,就认为驾驶员处于打瞌睡的状态,发出预警。
检测过程中需要使用世界坐标系(UVW)、相机坐标系(XYZ)、图像中心坐标系(uv)和像素坐标系(xy)。
一个物体相对于相机的姿态可以使用旋转矩阵和平移矩阵来表示。
7.pytorch和OpenCV有什么区别?
- OpenCV是计算机视觉库,用于处理大量图像数据和视频数据;pytorch是深度学习框架,需要对深度学习原理有一定的了解从而构建和训练神经网络模型。
- pytorch适合于构建和训练神经网络模型而OpenCV适合于视频处理和图像处理。
- OpenCV主要用于实时场景:如视频处理,人脸识别等,而pytorch主要用于离线场景:比如数据分析,模型构建等。
- 都是很好的工具,要根据不同的需求选用。