传统方法眼角定位和dilb 进行疲劳检测(眨眼检测)
发布时间:2018-08-14 09:57,
浏览次数:747
, 标签:
dilb
安装第三方库文件
* opencv
* Dlib,安装方法见
https://www.learnopencv.com/install-opencv-3-and-dlib-on-windows-python-only/
* Numpy
* Imutils (一系列使得opencv 便利的功能,包括图像旋转、缩放、平移,骨架化、边缘检测、显示matplotlib
图像(imutils.opencv2matplotlib(image))
传统方法进行眼角定位
思路是:
1、利用opencv 自带训练好的 haarcascade_frontalface_default.xml 和 haarcascade_eye.xml
来检测脸部和眼睛
以脸部加载xml为例:
face=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face.load(脸部xml的完整路径)
以上是加载xml方法,有很多介绍直接是face=cv2.CascadeClassifier(脸部xml的完整路径),通常会报错。
2、加载完xml 文件后,下一步就是detect,opencv
函数为detectMultiScale(img,scaleFactor,minNeighbors,minsize,maxsize)
scaleFactor 是压缩率,越小金字塔数目越多,相应的检测准确相对好点
minNeighbors 是同一张脸至少被检测n次才认为是真正的
Minszie以元组方式,(检测眼睛时候会用到,避免鼻子和其他部位产生的假阳性)
3、先检测脸,然后再脸的基础上再检测眼睛,到了这一步后,就是自己设计检测的眼角方法:
1)找轮廓,取最大轮廓
2)凸缺陷检测,得到所有凸点
3)眼角如何确定?----将凸点的x,y值相加,排序,最小的为左边眼角,最大的为右边眼角(见测试图)
dlib 疲劳检测
* 下载shape_predictor_68_face_landmarks.dat 文件,这是68个眼部特征点
* 初始化检测器和预测器 detector=dlib.get_frontal_face_detector() predictor =
dlib.shape_predictor(“dat文件路径”)
3 如何确定疲劳?
1) 计算眼睛的宽高比
2)当前帧两双眼睛宽高比与前一帧的差值的绝对值大于0.2,则认为是疲劳
程序如下:
# -*- coding: utf-8 -*- import os import numpy as np import cv2 import dlib
import sys from imutils import face_util