当前位置 : 主页 > 编程语言 > python >

python实时打哈欠检测

来源:互联网 收集:自由互联 发布时间:2022-06-15
效果 基本思路 在 OpenCV 中使用VideoCapture方法初始化视频渲染对象 创建灰度图像 导入预训练模型,识别脸部和人脸标志 计算上唇和下唇距离(其它类似) 创建唇边距离的If条件,满足则

效果

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

    完整项目

    点击下载

    上一篇:python人脸考勤系统
    下一篇:没有了
    网友评论