这里写目录标题

  • 只有眨眼
    • 重新编写
    • 改为摄像头
  • 加上张嘴

只有眨眼

重新编写

import cv2 as cv
import dlib
import imutils
import numpy as np
from imutils import face_utils as fudef eye_aspect_ratio(eye):# 计算上下的欧式距离a = np.linalg.norm(eye[1] - eye[5])b = np.linalg.norm(eye[2] - eye[4])# 计算左右的欧式距离c = np.linalg.norm(eye[0] - eye[3])# 计算纵横比并返回d = (a + b) / (2.0 * c)return dCOUNTER = 0
TOTAL = 0# 打开摄像头
cap = cv.VideoCapture(0, cv.CAP_DSHOW)
# 建立人脸检测器
detector = dlib.get_frontal_face_detector()
# 建立68关键点检测器
predictor = dlib.shape_predictor('./1.dat')# 返回人脸的左眼和右眼在68关键点中的起始和结束
(lStart, lEnd) = fu.FACIAL_LANDMARKS_IDXS["left_eye"]
(rStart, rEnd) = fu.FACIAL_LANDMARKS_IDXS["right_eye"]# 只要能正确打开摄像头
while cap.isOpened():# 获取每一帧_, frame = cap.read()# 设置输出宽度frame = imutils.resize(frame, width=750)# 转变为灰度图加快识别gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 返回这一帧的所有人脸框faces = detector(gray, 0)# 遍历所有框框for face in faces:# 返回该框的68个坐标shape = predictor(gray, face)# 转变为坐标矩阵shape = fu.shape_to_np(shape)# 返回左眼和右眼的坐标leftEye = shape[lStart:lEnd]rightEye = shape[rStart:rEnd]# 计算左眼和右眼的纵横比leftEAR = eye_aspect_ratio(leftEye)rightEAR = eye_aspect_ratio(rightEye)# 取平均值earAVG = (leftEAR + rightEAR) / 2.0# 计算左眼和右眼的凸包leftEyeHull = cv.convexHull(leftEye)rightEyeHull = cv.convexHull(rightEye)# 圈出凸包,即眼睛的范围cv.drawContours(frame, [leftEyeHull], -1, (255, 255, 255), 1)cv.drawContours(frame, [rightEyeHull], -1, (255, 255, 255), 1)'''若眼睛纵横比小于0.3 且 连续3帧则认为闭眼'''if earAVG < 0.3:COUNTER += 1else:if COUNTER >= 3:TOTAL += 1COUNTER = 0# 接下来是对输出的处理# 左上角输出眨眼次数cv.putText(frame,"Blinks:{0}".format(TOTAL),(10, 20),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 紧接实时earAVGcv.putText(frame,"earAVG:{0}".format(earAVG),(200, 20),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 右下角提示退出信息cv.putText(frame,"Press 'Esc' to Quit",(515, 550),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 输出每一帧cv.imshow('camera', frame)# 按Esc退出if cv.waitKey(1) & 0xff == 27:break# 关闭所有窗口
cv.destroyAllWindows()
# 释放摄像头
cap.release()

改为摄像头

dlib 配置及使用方法

# USAGE
# python detect_blinks.py --shape-predictor shape_predictor_68_face_landmarks.dat --video blink_detection_demo.mp4
# python detect_blinks.py --shape-predictor shape_predictor_68_face_landmarks.datimport cv2
import dlib
import imutils
from imutils import face_utils
# import the necessary packages
from scipy.spatial import distance as distdef eye_aspect_ratio(eye):# compute the euclidean distances between the two sets of# vertical eye landmarks (x, y)-coordinates 欧氏距离A = dist.euclidean(eye[1], eye[5])B = dist.euclidean(eye[2], eye[4])# compute the euclidean distance between the horizontal# eye landmark (x, y)-coordinatesC = dist.euclidean(eye[0], eye[3])'''[1] [2][0]          [3][5]  [4]'''# compute the eye aspect ratioear = (A + B) / (2.0 * C)# return the eye aspect ratioreturn ear# # 我注释掉的 construct the argument parse and parse the arguments
# ap = argparse.ArgumentParser()
# ap.add_argument("-p", "--shape-predictor", required=True,
#   help="path to facial landmark predictor")
# ap.add_argument("-v", "--video", type=str, default="",
#   help="path to input video file")
# args = vars(ap.parse_args())# define two constants, one for the eye aspect ratio to indicate
# blink and then a second constant for the number of consecutive
# frames the eye must be below the threshold
EYE_AR_THRESH = 0.3
EYE_AR_CONSEC_FRAMES = 3# initialize the frame counters and the total number of blinks
COUNTER = 0
TOTAL = 0# 初始化dlib's face detector (HOG-based),然后创建“面部标志预测器”facial landmark predictor
print("[INFO] loading facial landmark predictor...")
detector = dlib.get_frontal_face_detector()  # 创建识别器
'''
print("detector:",help(detector))
This object represents a sliding window histogram-of-oriented-gradients based object detector.
此对象表示基于定向梯度的对象检测器的滑动窗口直方图。
'''# predictor = dlib.shape_predictor(args["shape_predictor"])
predictor = dlib.shape_predictor('./1.dat')  # 读取训练好的模型
"""
print("predictor",help(predictor))
This object is a tool that takes in an image region containing some
object and outputs a set of point locations that define the pose of the object.
The classic example of this is human face pose prediction, where you take
an image of a human face as input and are expected to identify the locations of
important facial landmarks such as the corners of the mouth and eyes, tip of the nose, and so forth。
此对象是一个工具,它接受包含某些对象的图像区域,并输出一组定义对象姿势的点位置。
这方面的经典例子是人脸姿势预测,在这里,您可以将人脸的图像作为输入,
并期望识别重要面部标志的位置,如嘴角和眼睛、鼻尖等。
"""# 分别地抓取人脸的左眼和右眼的坐标 respectively
(lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]
(rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]
# face_utils.FACIAL_LANDMARKS_IDXS:Dictionary that remembers insertion order
# 开始读取视频流
print("[INFO] starting camera stream thread...")
# vs = FileVideoStream(args["video"]).start()cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 从视频流循环帧
while True:# if this is a file video stream, then we need to check if# there any more frames left in the buffer to process# grab the frame from the threaded video file stream, resize# it, and convert it to grayscale# channels)_, frame = cap.read()  # 读取一针frame = imutils.resize(frame, width=1000)  # 设置宽度  ·450gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 创建灰度图识别器  进行识别加快速度rects = detector(gray, 0)# loop over the face detectionsfor rect in rects:# determine the facial landmarks for the face region, then# convert the facial landmark (x, y)-coordinates to a NumPy# arrayshape = predictor(gray, rect)  # 进行预测 返回值包括眼睛鼻子嘴的坐标shape = face_utils.shape_to_np(shape)# extract the left and right eye coordinates, then use the# coordinates to compute the eye aspect ratio for both eyesleftEye = shape[lStart:lEnd]rightEye = shape[rStart:rEnd]leftEAR = eye_aspect_ratio(leftEye)rightEAR = eye_aspect_ratio(rightEye)# average the eye aspect ratio together for both eyesear = (leftEAR + rightEAR) / 2.0# compute the convex hull for the left and right eye, then# visualize each of the eyesleftEyeHull = cv2.convexHull(leftEye)rightEyeHull = cv2.convexHull(rightEye)cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1)cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1)# check to see if the eye aspect ratio is below the blink# threshold, and if so, increment the blink frame counterif ear < EYE_AR_THRESH:COUNTER += 1# otherwise, the eye aspect ratio is not below the blink# thresholdelse:# if the eyes were closed for a sufficient number of# then increment the total number of blinksif COUNTER >= EYE_AR_CONSEC_FRAMES:TOTAL += 1# reset the eye frame counterCOUNTER = 0# draw the total number of blinks on the frame along with# the computed eye aspect ratio for the framecv2.putText(frame, "Blinks: {}".format(TOTAL), (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.putText(frame, "EAR: {:.2f}".format(ear), (300, 30),cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)# show the framecv2.imshow("Frame", frame)key = cv2.waitKey(1) & 0xFF# if the `Esc` key was pressed, break from the loopif key == 27:break# do a bit of cleanup
cv2.destroyAllWindows()
cap.release()

加上张嘴

import cv2 as cv
import dlib
import imutils
import numpy as np
from imutils import face_utils as fu# 计算眼睛的纵横比
def eye_aspect_ratio(eye):# 计算上下的欧式距离a = np.linalg.norm(eye[1] - eye[5])b = np.linalg.norm(eye[2] - eye[4])# 计算左右的欧式距离c = np.linalg.norm(eye[0] - eye[3])# 计算纵横比并返回d = (a + b) / (2.0 * c)return d# 计算嘴巴的纵横比
def mouth_aspect_ratio(mouth):# 计算上下的欧式距离a = np.linalg.norm(mouth[3] - mouth[9])  # 52, 59b = np.linalg.norm(mouth[14] - mouth[18])  # 63, 67# 计算左右的欧式距离c = np.linalg.norm(mouth[0] - mouth[6])  # 49, 55d = np.linalg.norm(mouth[12] - mouth[16])  # 61, 65# 计算纵横比并返回e = (a + b) / (c + d)return e# 连续3帧眨眼次数
EYE_COUNTER = 0
# 总共眨眼次数
EYE_TOTAL = 0# 连续3帧张嘴次数
MOUTH_COUNTER = 0
# 总共张嘴次数
MOUTH_TOTAL = 0# 打开摄像头
cap = cv.VideoCapture(0, cv.CAP_DSHOW)
# 建立人脸检测器
detector = dlib.get_frontal_face_detector()
# 建立68关键点检测器
predictor = dlib.shape_predictor('./1.dat')# 返回人脸的左眼和右眼在68关键点中的起始和结束
(lStart, lEnd) = fu.FACIAL_LANDMARKS_IDXS["left_eye"]
(rStart, rEnd) = fu.FACIAL_LANDMARKS_IDXS["right_eye"]# 返回人脸的嘴巴在68关键点中的起始和结束
(mStart, mEnd) = fu.FACIAL_LANDMARKS_IDXS["mouth"]# 只要能正确打开摄像头
while cap.isOpened():# 获取每一帧_, frame = cap.read()# 设置输出宽度frame = imutils.resize(frame, width=750)# 转变为灰度图加快识别gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 返回这一帧的所有人脸框faces = detector(gray, 0)# 遍历所有框框for face in faces:# 返回该框的68个坐标shape = predictor(gray, face)# 转变为坐标矩阵shape = fu.shape_to_np(shape)# 返回左眼和右眼的坐标leftEye = shape[lStart:lEnd]rightEye = shape[rStart:rEnd]# 计算左眼和右眼的纵横比leftEAR = eye_aspect_ratio(leftEye)rightEAR = eye_aspect_ratio(rightEye)# 取平均值earAVG = (leftEAR + rightEAR) / 2.0# 计算左眼和右眼的凸包leftEyeHull = cv.convexHull(leftEye)rightEyeHull = cv.convexHull(rightEye)# 圈出凸包,即眼睛的范围cv.drawContours(frame, [leftEyeHull], -1, (255, 255, 255), 1)cv.drawContours(frame, [rightEyeHull], -1, (255, 255, 255), 1)# 返回嘴巴的坐标Mouth = shape[mStart:mEnd]# 计算嘴巴的纵横比mar = mouth_aspect_ratio(Mouth)# 计算嘴巴的凸包MouthHull = cv.convexHull(Mouth)# 圈出凸包,即嘴巴的范围cv.drawContours(frame, [MouthHull], -1, (255, 255, 255), 1)'''若眼睛纵横比小于0.3 且 连续3帧则认为闭眼'''if earAVG < 0.3:EYE_COUNTER += 1else:if EYE_COUNTER >= 3:EYE_TOTAL += 1EYE_COUNTER = 0'''若嘴巴纵横比大于0.5 且 连续3帧则认为打哈欠'''if mar > 0.5:MOUTH_COUNTER += 1else:if MOUTH_COUNTER >= 3:MOUTH_TOTAL += 1MOUTH_COUNTER = 0# 接下来是对输出的处理# 左上角输出眨眼次数cv.putText(frame,"Blinks:{0}".format(EYE_TOTAL),(10, 20),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 紧接实时earAVGcv.putText(frame,"earAVG:{0}".format(earAVG),(200, 20),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 左上角输出打哈欠次数cv.putText(frame,"Yawning:{0}".format(MOUTH_TOTAL),(10, 50),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 紧接实时marcv.putText(frame,"mar:{0}".format(mar),(200, 50),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 右下角提示退出信息cv.putText(frame,"Press 'Esc' to Quit",(515, 550),cv.FONT_HERSHEY_COMPLEX_SMALL,1,(255, 255, 255),2,cv.LINE_AA)# 输出每一帧cv.imshow('camera', frame)# 按Esc退出if cv.waitKey(1) & 0xff == 27:break# 关闭所有窗口
cv.destroyAllWindows()
# 释放摄像头
cap.release()

dlib库 眨眼 张嘴相关推荐

  1. 基于dlib库进行微笑识别和口罩识别

    环境配置 tensorflow和keras参考我之前的博客https://blog.csdn.net/A981012/article/details/106650686 下载dlib库不能从anaco ...

  2. windows10+Python3.7安装dlib库进行面部标志识别

    dlib 是一个C++库,由戴维斯·金(Davis King) 开发,是用于线程,网络,数值运算,机器学习,计算机视觉和压缩的跨平台软件包,特别强调了极高质量和可移植的代码.dlib的文档也非常出色. ...

  3. Dlib库中实现正脸人脸关键点(landmark)检测的测试代码

    Dlib库中提供了正脸人脸关键点检测的接口,这里参考dlib/examples/face_landmark_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸关键点检测的 ...

  4. Dlib库中实现正脸人脸检测的测试代码

    Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...

  5. CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之《极限男人帮》和《NBA全明星球员》

    CV:利用cv2+dlib库自带frontal_face_detector(人脸征检测器)实现人脸检测与人脸标记之<极限男人帮>和<NBA全明星球员> 目录 输出结果 设计思路 ...

  6. Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略

    Py之dlib:Python库之dlib库的简介.安装.使用方法详细攻略 目录 dlib库的简介 dlib库的安装 dlib库的使用函数 0.利用dlib.get_frontal_face_detec ...

  7. Python:安装dlib库

    目录: 前言 问题描述 前言 本来安装各种库的方法,我已经写了好几种,甚至于也装上了anaconda 这种神器,但今天还是遇到了一个神奇的问题,因此,特地搜索学习了一下,在此感谢两位博主吧: pyth ...

  8. dlib 怎么安装vs2017_win10中的dlib库安装过程

    之前试过很多方法结果都失败,最后终于发现一个成功的方法,先记一下以防忘记. 参考:记一次Win10环境python3.7安装dlib模块趟过的坑 由于我是通过Anaconda安装的Python,所以环 ...

  9. 人脸识别dlib库 记录

    暑假和大佬报了一个比赛,因为最近在学python所以我们报了Python组的人脸识别.对于人脸识别来说Python有face_recognition库,经过网上查找资料以及官方文档我们很快就完成了.不 ...

最新文章

  1. Linux编写一个C程序HelloWorld
  2. 上下文菜单Context Menu
  3. Nginx 图片防盗链
  4. 自相关函数,功率谱,时间序列信号模型三者的关系
  5. C#基于LibUsbDotNet实现USB通信(一)
  6. 双11即将来临,淘宝内测“购物车分享”功能
  7. CCF认证-2015-3-2 数字排序
  8. 学习JavaScript数据结构与算法-----pdf 分享
  9. oracle 快照过旧怎么回退_我的世界20w45a:1.17首个快照!加入水晶、蜡烛、口袋、铜锭……...
  10. Windows中MySQL的详细安装教程
  11. badboy + jmeter并发性能测试
  12. winform list集合怎么 in过滤_你有真正把 Python Set 当作数学集合吗?
  13. Web开发中常用的linux命令 详解
  14. mysql官网下载驱动包
  15. 2019最新机构Web前端培训全套项目实战(完整)
  16. 卷积神经网络--MINIST数据集
  17. 重置IE浏览器的操作
  18. 航空发动机性能matlab,基于MATLABSIMULINK的航空发动机建模与仿真研讨.pdf
  19. cad调了比例因子没反应_CAD教程:自由缩放命令的操作流程
  20. python注销代码_python怎么注销代码_如何从一个简单的web应用程序注销。在CherryPy,Python中...

热门文章

  1. 表情包可视化编辑、生成配置信息数据工具
  2. Arch Linux 添加 BlackArch 镜像源
  3. 在线编辑word文档代码
  4. java免费视频通话,GitHub标星3.2K
  5. 同样是做网站,为何你的不赚钱
  6. Python语音基础操作--11.2基于GMM的说话人识别模型
  7. 《我和PIC单片机:基于PIC18》——第1章 初识PIC 1.1 与众不同的PIC
  8. SpringBoot集成WebSocket
  9. 博力扬LED大屏专用光纤收发器千兆单模单纤兼容诺瓦灵星雨德普达中德等
  10. C盘与E盘 磁盘目录结构