python实时打哈欠检测

效果

在这里插入图片描述

基本思路

  1. 在 OpenCV 中使用VideoCapture方法初始化视频渲染对象
  2. 创建灰度图像
  3. 导入预训练模型,识别脸部和人脸标志
  4. 计算上唇和下唇距离(其它类似)
  5. 创建唇边距离的If条件,满足则是打哈欠,不满足则只是简单的张嘴
  6. 显示帧/图像

部分源码

  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

完整项目

点击下载

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇

)">
下一篇>>