网络编程
位置:首页>> 网络编程>> Python编程>> 基于Python实现打哈欠检测详解

基于Python实现打哈欠检测详解

作者:川川菜鸟  发布时间:2021-12-10 06:50:45 

标签:Python,打哈欠,检测

效果图

基于Python实现打哈欠检测详解

基本思路

  • 在 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

来源:https://blog.csdn.net/weixin_46211269/article/details/124105198

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com