疲劳检测

pan.baidu.com/s/1Ng_-utB8BSrXlgVelc8ovw

  1. #导入工具包
  2. from scipy.spatial import distance as dist
  3. from collections import OrderedDict
  4. import numpy as np
  5. import argparse
  6. import time
  7. import dlib
  8. import cv2
  9.  
  10. FACIAL_LANDMARKS_68_IDXS = OrderedDict([
  11. ("mouth", (48, 68)),
  12. ("right_eyebrow", (17, 22)),
  13. ("left_eyebrow", (22, 27)),
  14. ("right_eye", (36, 42)),
  15. ("left_eye", (42, 48)),
  16. ("nose", (27, 36)),
  17. ("jaw", (0, 17))
  18. ])
  19.  
  20. # http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf
  21. def eye_aspect_ratio(eye):
  22. # 计算距离,竖直的
  23. A = dist.euclidean(eye[1], eye[5])
  24. B = dist.euclidean(eye[2], eye[4])
  25. # 计算距离,水平的
  26. C = dist.euclidean(eye[0], eye[3])
  27. # ear值
  28. ear = (A + B) / (2.0 * C)
  29. return ear
  30.  
  31. # 输入参数
  32. ap = argparse.ArgumentParser()
  33. ap.add_argument("-p", "--shape-predictor", required=True,
  34. help="path to facial landmark predictor")
  35. ap.add_argument("-v", "--video", type=str, default="",
  36. help="path to input video file")
  37. args = vars(ap.parse_args())
  38.  
  39. # 设置判断参数
  40. EYE_AR_THRESH = 0.3
  41. EYE_AR_CONSEC_FRAMES = 3
  42.  
  43. # 初始化计数器
  44. COUNTER = 0
  45. TOTAL = 0
  46.  
  47. # 检测与定位工具
  48. print("[INFO] loading facial landmark predictor...")
  49. detector = dlib.get_frontal_face_detector()
  50. predictor = dlib.shape_predictor(args["shape_predictor"])
  51.  
  52. # 分别取两个眼睛区域
  53. (lStart, lEnd) = FACIAL_LANDMARKS_68_IDXS["left_eye"]
  54. (rStart, rEnd) = FACIAL_LANDMARKS_68_IDXS["right_eye"]
  55.  
  56. # 读取视频
  57. print("[INFO] starting video stream thread...")
  58. vs = cv2.VideoCapture(args["video"])
  59. #vs = FileVideoStream(args["video"]).start()
  60. time.sleep(1.0)
  61.  
  62. def shape_to_np(shape, dtype="int"):
  63. # 创建68*2
  64. coords = np.zeros((shape.num_parts, 2), dtype=dtype)
  65. # 遍历每一个关键点
  66. # 得到坐标
  67. for i in range(0, shape.num_parts):
  68. coords[i] = (shape.part(i).x, shape.part(i).y)
  69. return coords
  70.  
  71. # 遍历每一帧
  72. while True:
  73. # 预处理
  74. frame = vs.read()[1]
  75. if frame is None:
  76. break
  77.  
  78. (h, w) = frame.shape[:2]
  79. width=1200
  80. r = width / float(w)
  81. dim = (width, int(h * r))
  82. frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
  83. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  84.  
  85. # 检测人脸
  86. rects = detector(gray, 0)
  87.  
  88. # 遍历每一个检测到的人脸
  89. for rect in rects:
  90. # 获取坐标
  91. shape = predictor(gray, rect)
  92. shape = shape_to_np(shape)
  93.  
  94. # 分别计算ear值
  95. leftEye = shape[lStart:lEnd]
  96. rightEye = shape[rStart:rEnd]
  97. leftEAR = eye_aspect_ratio(leftEye)
  98. rightEAR = eye_aspect_ratio(rightEye)
  99.  
  100. # 算一个平均的
  101. ear = (leftEAR + rightEAR) / 2.0
  102.  
  103. # 绘制眼睛区域
  104. leftEyeHull = cv2.convexHull(leftEye)
  105. rightEyeHull = cv2.convexHull(rightEye)
  106. cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1)
  107. cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1)
  108.  
  109. # 检查是否满足阈值
  110. if ear < EYE_AR_THRESH:
  111. COUNTER += 1
  112.  
  113. else:
  114. # 如果连续几帧都是闭眼的,总数算一次
  115. if COUNTER >= EYE_AR_CONSEC_FRAMES:
  116. TOTAL += 1
  117.  
  118. # 重置
  119. COUNTER = 0
  120.  
  121. # 显示
  122. cv2.putText(frame, "Blinks: {}".format(TOTAL), (10, 30),
  123. cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
  124. cv2.putText(frame, "EAR: {:.2f}".format(ear), (300, 30),
  125. cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
  126.  
  127. cv2.imshow("Frame", frame)
  128. key = cv2.waitKey(10) & 0xFF
  129.  
  130. if key == 27:
  131. break
  132.  
  133. vs.release()
  134. cv2.destroyAllWindows()

  

OpenCV计算机视觉实战

唐宇迪老师的课程讲的挺好的 就是贵了点

课程目录

01课程简介与环境配置

02图像基本操作

03阈值与平滑处理

04图像形态学操作

05图像梯度计算

06边缘检测

07图像金字塔与轮廓检测

08直方图与傅里叶变换

09项目实战-信用卡数字识别

10项目实战-文档扫描OCR识别

11图像特征-harris

12图像特征-sift

13案例实战-全景图像拼接

14项目实战-停车场车位识别

15项目实战-答题卡识别判卷

16背景建模

17光流估计

18Opencv的DNN模块

19项目实战-目标追踪

20卷积原理与操作

21项目实战-疲劳检测

pan。baidu。com/s/1Ng_-utB8BSrXlgVelc8ovw

OpenCV计算机视觉实战(Python版)资源的更多相关文章

  1. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

  2. 移动端自动化测试appium 从入门到项目实战Python版✍✍✍

    移动端自动化测试appium 从入门到项目实战Python版 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程 ...

  3. 移动端自动化测试Appium 从入门到项目实战Python版

    移动端自动化测试Appium 从入门到项目实战Python版  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  4. python 库资源大全

    偶然的机会翻到这篇文章,很全面,来源:  Python 资源大全中文版       哪些 Python 库让你相见恨晚? 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 pyth ...

  5. python中文资源大全

    Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...

  6. 第一弹:超全Python学习资源整理(入门系列)

    随着人工智能.大数据的时代到来,学习Python的必要性已经显得不言而喻.我经常逛youtube,发现不仅仅是以编程为职业的程序员,证券交易人员,生物老师,高级秘书......甚至许多自由撰稿人,设计 ...

  7. OpenCV计算机视觉学习(13)——图像特征点检测(Harris角点检测,sift算法)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 前言 ...

  8. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  9. 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token

    一.access_token简介 为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台 开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等, 开 ...

随机推荐

  1. 学到了林海峰,武沛齐讲的Day25-完

    @property @classmethod @staticmethod 类的继承

  2. web+文件夹上传

    一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框 ...

  3. PHP全栈学习笔记25

    <?php /* *@Author: 达叔小生 **/ header("content-type:image/png"); //设置页面编码 $num = $_GET['nu ...

  4. laravel-china 镜像停止服务

    php 的很多开发都会用到composer.然后国内的镜像又慢,很多人会选择用laravel-china的镜像. 之前一直用的很好.今天突然发现不能composer update.出现报错.WTF!! ...

  5. java 标准日期格式

    public static void main(String[] argv) { // 使用默认时区和语言环境获得一个日历 Calendar cale = Calendar.getInstance() ...

  6. 列出python中可变数据类型和不可变数据类型,并简述原理

    可变类型(mutable):变量进行append.+=等这种操作后 == 改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即 ...

  7. 前端性能测试工具Chrome performance

    页面加载速度慢,到底是多少秒,瓶颈在哪里? 前端性能工具Chrome performance 结合F12,基本可以搞定. 一.Chrome performance 1.shift+ctrl+N进入谷歌 ...

  8. dsu on tree学习笔记

    前言 一次模拟赛的\(T3\):传送门 只会\(O(n^2)\)的我就\(gg\)了,并且对于题解提供的\(\text{dsu on tree}\)的做法一脸懵逼. 看网上的其他大佬写的笔记,我自己画 ...

  9. wireshark新手导航

    本篇教你如何开始使用Wireshark.开始本篇之前,请先已经安装完wireshark 3.0.0. 初始界面 启动wireshark,可以看到程序界面主要由以下几部分组成: 窗口标题-window ...

  10. Java-JVM 锁优化

    synchronized 的实现方式是用 Monitor 进行加锁,这是一种互斥锁,为了表示他对性能的影响我们称之为重量级锁. Java 的线程是映射到操作系统原生线程之上的,要阻塞或唤醒一个线程就需 ...