26.疲劳检测

目录

1  项目介绍

2  代码实现

2.1  导入库

2.2  定义68个关键点

2.3  定义eye_aspect_ratio()

2.4  定义参数

2.5  定义阈值

2.6  定义次数

2.7  创建检测器

2.8  获取左眼与右眼的起始点与终止点

2.9  读取视频

2.10  定义shape_to_np()

2.11  遍历每一帧

2.11.1  提取每一帧图像

2.11.2  图像预处理

2.11.3  检测人脸

2.11.4  遍历每一张检测的人脸

2.11.5  在图像上写字

2.11.6  展示图像


1  项目介绍

这个是我们上一章人脸检测的进阶版,还是使用之前的68个关键点,在这个项目中,我们通过计算双眼的举例来判断眨眼的次数,最终确认司机是否为疲劳状态

我们现在有这样一个开车的视频

我们在左上角将闭眼的次数Blinks和眼之间的横纵距离eye_ratio计算出来并写在视频的左上角

2  代码实现

2.1  导入库

scipy是做运算用的库,我们这里用它计算双眼之间的距离

2.2  定义68个关键点

2.3  定义eye_aspect_ratio()

这个函数是计算眼部高宽比例的

这个函数会传入眼部的七个关键点,我们先看一下这七个关键点

dist.euclidean()是计算两点之间欧式距离的,我们一共有三个距离

  • A 第1个点与第5个点的距离,也就是37与41点的距离
  • B 第2个点与第4个点的距离,也就是38与40点的距离
  • C 第0个点与第3个点的距离,也就是36与39点的距离

计算完A,B,C三个距离后,我们加AB距离加和之后除2(算出平均高度),然后再除宽度,计算眼镜的高宽比eye_ratio,之后返回eye_ratio

2.4  定义参数

2.5  定义阈值

如果高宽比小于0.3,我们认为视频中的人物闭了一次眼,如果人物多帧都在闭眼状态,我们定义3帧以内算一次闭眼

2.6  定义次数

counter是闭眼次数,total是总闭眼次数,区别的总闭眼次数连续3帧闭眼算一次,counter算三次

2.7  创建检测器

首先创建正脸检测器,然后创建关键点检测器

2.8  获取左眼与右眼的起始点与终止点

2.9  读取视频

2.10  定义shape_to_np()

这个在上一章提到过,不再赘述了

2.11  遍历每一帧

2.11.1  提取每一帧图像

2.11.2  图像预处理

2.11.3  检测人脸

2.11.4  遍历每一张检测的人脸

获取关键点坐标

提取左眼与右眼的关键点坐标,之后用它们计算眼镜的高宽比

计算两只眼镜平均的高宽比

计算左右眼凸包,然后把它们画出来

如果高宽比小于EYE_AR_THRESH,COUNTER自加1

如果连续几帧都是闭眼的,算作一次闭眼TOTAL自加1

2.11.5  在图像上写字

2.11.6  展示图像

展示图像,如果展示过程中按ESC则退出图像,之后释放视频流并关闭所有窗口

我们opencv的专栏到这就结束了,如果有兴趣的朋友可以看一下这个链接的课程视频,本专栏是依据这个视频做的课程笔记 Opencv计算机视觉实战(Python版) - 网易云课堂

  • 29
    点赞
  • 116
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值