脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 基于Python实现打哈欠检测详解

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

2022-11-27 13:36川川菜鸟 Python

这篇文章主要介绍了如何利用Python+OpenCV实现人打哈欠检测,文中的示例代码讲解详细,对我们学习Python有一定帮助,感兴趣的可以了解一下

效果图

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

基本思路

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

部分源码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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实现打哈欠检测详解的文章就介绍到这了,更多相关Python打哈欠检测内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46211269/article/details/124105198

延伸 · 阅读

精彩推荐
  • Pythonpycharm远程连接vagrant虚拟机中mariadb数据库

    pycharm远程连接vagrant虚拟机中mariadb数据库

    这篇文章主要介绍了pycharm远程连接vagrant虚拟机中mariadb数据库,需要的朋友可以参考下 ...

    单爆手2582020-06-05
  • Python生成Jupyter Lab快捷方式的小技巧

    生成Jupyter Lab快捷方式的小技巧

    这篇文章主要介绍了生成Jupyter Lab快捷方式的小技巧,操作迅猛,花费时间少,步骤详细,有需要的朋友可以参考下,希望可以对广大读者朋友有所帮助...

    mighty137522021-12-29
  • Pythonopencv实现车牌识别

    opencv实现车牌识别

    这篇文章主要为大家详细介绍了opencv实现车牌识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    墙缝里的草7772022-07-30
  • Pythonpytorch下使用LSTM神经网络写诗实例

    pytorch下使用LSTM神经网络写诗实例

    今天小编就为大家分享一篇pytorch下使用LSTM神经网络写诗实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    ColdCabbage10442020-04-24
  • PythonPython实现将罗马数字转换成普通阿拉伯数字的方法

    Python实现将罗马数字转换成普通阿拉伯数字的方法

    这篇文章主要介绍了Python实现将罗马数字转换成普通阿拉伯数字的方法,简单分析了罗马数字的构成并结合实例形式给出了Python转换罗马数字为阿拉伯数字的...

    不得闲8982020-09-30
  • PythonPython程序运行原理图文解析

    Python程序运行原理图文解析

    这篇文章主要介绍了Python程序运行原理图文解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下...

    ITxiaoke7542021-01-14
  • Pythonpython上下文管理器使用场景及异常处理

    python上下文管理器使用场景及异常处理

    这篇文章主要为大家介绍了python上下文管理器使用场景及异常处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升...

    测试开发技术修炼7772022-06-27
  • Python使用numpy对数组求平均时如何忽略nan值

    使用numpy对数组求平均时如何忽略nan值

    这篇文章主要介绍了使用numpy对数组求平均时如何忽略nan值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    偶尔也吃鸡5032022-09-22