opencv计算机视觉——疲劳检测(眨眼检测)

1.dist.eculidean(A, B) # 求出A和B点的欧式距离

参数说明:A,B表示位置信息

2.dlib.get_frontal_face_detector()表示脸部位置检测器

3.dlib.shape_predictor(args['shape_predictor]) 表示脸部特征位置检测器

参数说明:args[‘shape_predictor’] 表示位置信息

4.Orderdict([(‘mouth’, (23, 30))]) # 构造有序的字典
参数说明:'mouth’表示字典的键,(23, 30) 表示字典的值

使用人脸检测可以获得人脸框的位置信息,再使用人脸框的关键点检测,检测出各个人脸部分的位置

眨眼检测:主要是通过检测脸部6个点,即 A = dist.euclidean(eye[2], eye[4]), 即眼部的2号点与4号点的欧式距离

B = dist.euclidean(eye[1], eye[5]) C = dist.euclidean(eye[0], eye[3]) # 即1号点与5号点的位置, 0号点与3号点的欧式距离

EAR = (A + B) / 2 * C, 分别计算左眼和右眼的评分求平均作为最终的评分,如果小于阈值,则加1,如果连续3次都小于阈值,则表示进行了一次眨眼活动

代码:

第一步:使用OrderedDict() 构建有序的脸部位置序号字典

第二步:使用argparse构造出可以传入的参数

第三步:使用dlib.get_frontal_face_detector()获得脸部位置检测器

第四步:使用dlib.shape_predictor构造脸部特征检测器

第五步:进入循环,读取图片,对图片维度进行扩大,方便进行脸部特征检测,同时进行灰度化,为了脸部特征检测做准备

第六步:使用detector(gray, 0) 进行脸部位置检测

第七步:循环脸部位置,使用predictor(gray, rect)获得脸部特征的位置信息

第八步:将脸部特征的位置信息转换为数组的形式

第九步:根据字典的序号,获得左眼和右眼的位置array

第十步:使用cv2.convexHull构造左右眼的凸包,并使用cv2.drawContours完成画图操作

第十一步:构造函数计算左右眼的EAR值,使用平均值作为最终的EAR

第十二步:循环,满足条件的,眨眼次数+1

第十三步:进行画图操作,同时使用cv2.putText将眨眼次数进行显示

import cv2
import numpy as np
import argparse
import time
import dlib
from scipy.spatial import distance as dist
from collections import  OrderedDict

def shape_to_array(shape, dtype='int'):
    coords = np.zeros((shape.num_parts, 2), dtype=dtype)
    for i in range(shape.num_parts):
        coords[i] = (shape.part(i).x, shape.part(i).y)

    return coords

def accu_angle_eye(eye):
    A = dist.euclidean(eye[1], eye[5])
    B = dist.euclidean(eye[2], eye[4])
  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值