Python打哈欠检测
川川菜鸟 人气:0效果图
基本思路
- 在 OpenCV 中使用VideoCapture方法初始化视频渲染对象
- 创建灰度图像
- 导入预训练模型,识别脸部和人脸标志
- 计算上唇和下唇距离(其它类似)
- 创建唇边距离的If条件,满足则是打哈欠,不满足则只是简单的张嘴
- 显示帧/图像
部分源码
suc, frame = cam.read() # 读取不到退出 if not suc: break # ---------FPS------------# ctime = time.time() fps = int(1 / (ctime - ptime)) ptime = ctime cv2.putText(frame, f'FPS:{fps}', (frame.shape[1] - 120, frame.shape[0] - 20), cv2.FONT_HERSHEY_PLAIN, 2, (0, 200, 0), 3) # ------检测人脸------# # 转为灰度 img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_model(img_gray) for face in faces: # 检测人脸,框起来-# x1 = face.left() y1 = face.top() x2 = face.right() y2 = face.bottom() # print(face.top()) cv2.rectangle(frame, (x1, y1), (x2, y2), (200, 0, 00), 2) # ----------检测人脸标注-----------# shapes = landmark_model(img_gray, face) shape = face_utils.shape_to_np(shapes) # -------检测上下唇--------# lip = shape[48:60] cv2.drawContours(frame, [lip], -1, (0, 165, 255), thickness=3) # -------计算上下唇距离-----# lip_dist = cal_yawn(shape) # 打印距离 # print(lip_dist) # 大于设定值,则认定是打哈欠 if lip_dist > yawn_thresh: cv2.putText(frame, f'User Yawning!', (frame.shape[1] // 2 - 170, frame.shape[0] // 2), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 200), 2) # 按字母q退出 cv2.imshow('Webcam', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break
加载全部内容