眼部疲劳检测

编程入门 行业动态 更新时间:2024-10-26 10:40:09

<a href=https://www.elefans.com/category/jswz/34/1752880.html style=眼部疲劳检测"/>

眼部疲劳检测

import cv2
import dlib
from imutils import face_utils
from scipy.spatial import distance as distdef eye_aspect_ratio(eye):# 垂直眼标志(X,Y)坐标A = dist.euclidean(eye[1], eye[5])# 计算两个集合之间的欧式距离B = dist.euclidean(eye[2], eye[4])# 计算水平之间的欧几里得距离# 水平眼标志(X,Y)坐标C = dist.euclidean(eye[0], eye[3])# 眼睛长宽比的计算ear = (A + B) / (2.0 * C)# 返回眼睛的长宽比return ear#1:长宽比,2:眨眼总数
eye1=0.2
eye2=3
counter=0
total=0
print("loading~请稍后")
cap = cv2.VideoCapture(0)
# 加载人脸检测模块,获得脸部位置检测器
detector = dlib.get_frontal_face_detector()
# 第二步:使用dlib.shape_predictor获得脸部特征位置检测器
predictor = dlib.shape_predictor('F:/fatigue1/shape_predictor_68_face_landmarks.dat')
#左开右闭
(lStart,lEnd)= face_utils.FACIAL_LANDMARKS_68_IDXS["left_eye"]
(rStart,rEnd) = face_utils.FACIAL_LANDMARKS_68_IDXS["right_eye"]
while True:# 读取图片并存在frame中。ret, frame = cap.read()# 把frame进行灰度处理gray = cv2.cvtColor(frame, code=cv2.COLOR_BGR2GRAY)# 识别人脸,第二个参数越大,代表讲原图放大多少倍在进行检测,提高小人脸的检测效果。faces = detector(gray, 1)# 画人脸识别的框for face in faces:x1 = face.left()y1 = face.top()x2 = face.right()y2 = face.bottom()cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255))# 在gray中识别图片的face中提取特征点landmarks = predictor(gray, face)#68个特征点的坐标landmark= face_utils.shape_to_np(landmarks)leftEye = landmark[lStart:lEnd]rightEye =landmark[rStart:rEnd]leftEAR = eye_aspect_ratio(leftEye)rightEAR = eye_aspect_ratio(rightEye)ear = (leftEAR + rightEAR) / 2.0# 第十三步:循环,满足条件的,眨眼次数+1if ear < eye1:  # 眼睛长宽比:0.2counter += 1else:# 如果连续3次都小于阈值,则表示进行了一次眨眼活动if counter >= eye2:  # 阈值:3total += 1if total > eye2:cv2.putText(frame, "waring", (200, 300), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)# 重置眼帧计数器cv2.putText(frame, "Faces: {}".format(len(faces)), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.putText(frame, "total: {}".format(total), (150, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.putText(frame, "COUNTER: {}".format(counter), (300, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)cv2.putText(frame, "EAR: {:.2f}".format(ear), (450, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)# 获取68个特征点的坐标for n in range(0, 68):x = landmarks.part(n).xy = landmarks.part(n).ycv2.circle(frame, (x, y), 1, (0, 0, 255))cv2.imshow("img", frame)key = cv2.waitKey(500)if key == ord('q'):break
cap.release()
cv2.destroyAllWindows

只能检测一次眼部疲劳

更多推荐

眼部疲劳检测

本文发布于:2023-06-29 10:42:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/943624.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:眼部   疲劳

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!