26.疲劳检测

article/2025/9/23 21:15:29

目录

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版) - 网易云课堂


http://chatgpt.dhexx.cn/article/dlDE5okF.shtml

相关文章

Dlib模型之驾驶员疲劳检测一(眨眼)

目录 序目的技术背景 正文(1)环境搭建(2)下载开源数据集(3)视觉疲劳检测原理(4)主要代码思路(5)运行效果 序 目的 经查阅相关文献,疲劳在人体面…

Python人脸检测实战之疲劳检测

本文主要介绍了实现疲劳检测:如果眼睛已经闭上了一段时间,我们会认为他们开始打瞌睡并发出警报来唤醒他们并引起他们的注意,感兴趣的朋友可以了解一下。 今天我们实现疲劳检测。 如果眼睛已经闭上了一段时间,我们会认为他们开始打…

计算机视觉项目实战-驾驶员疲劳检测

😊😊😊欢迎来到本博客😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉作者简介:⭐️⭐️⭐️目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学…

【毕业设计】深度学习疲劳检测 驾驶行为检测 - python opencv cnn

文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目…

Pandas和Numpy:常见函数参数inplace的作用

1.inplace参数的作用 pandas中,包括numpy中很多方法都设置了inplace参数。该参数的主要作用是指示是否在本地数据上做更改,其只能接受bool型参数,即 True和False. 具体示例如下: data为原始数据。接下来用dataframe.drop()删除Ti…

编译inplace_abn

出现以上问题 1、检查pytorch版本,一般1.5以上 2、检查cuda版本,一般10.1以上 3、检查环境变量设置 linux:export -p 重点检查 PATH 、LD_LIBRARY_PATH 不能重复设置变量,将重复的删掉 unset LANG 是将LANG删掉 declare -x LANG是…

build_ext --inplace 是什么意思

如果是做目标检测类的任务,经常需要用到cocoapi python setup.py build_ext --inplacebuild_ext是指明python生成C/C的扩展模块(build C/C extensions (compile/link to build directory))--inplace指示 将编译后的扩展模块直接放在与test.py同级的目录中。 流程如…

Bug集和之3:set_index 设定索引——inplace参数

知识点:set_index() 问题发现: 需要设定索引,以获取特定行的数据 ,但最后结果运行的不理想 初始数据 index000056.OF…01998-3-27NaN……………70302023-1-132.573… 过程代码 result.set_index(index) df result.loc[20…

python distutils打包C/C++模块,执行python setup.py build_ext --inplace时报错cl

一、问题发生环境 python可以把C/C代码编译并打包为pyd模块,从而可以使python脚本直接调用C/C模块功能。 我在执行python setup.py build_ext --inplace时遇到了缺失cl.exe的错误提示,然后用pip安装了cl。 再次编译,提示cl: error: no such o…

inplace-operation-error 【已解决】

最近在搞CT医学图像分割模型的领域泛化优化,结果就出现了报错: 关于这个问题stackoverflow上有非常多的讨论,可以过去围观: 指路:中文版stackoverflow - 堆栈内存溢出 (stackoom.com) Stack Overflow - Where Develo…

pandas数据排序sort_values后面inplace=True与inplace=False的实例驱动理解

目 录 1 引子 2 inplace参数理论理解 3 inplace参数实例驱动理解 3.1 inplace True 3.2 inplace False 1 引子 Series 的排序:Series.sort_values(ascendingTrue, inplaceFalse) 参数说明: ascending:默认为True升序排序,为F…

Python中inplace参数

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 Python中inplace参数 [太阳]选择题 对于以下python代码表述错误的一项是? import pandas as pd df pd.DataFrame({c1:[11undefined22]}) print(【执行】print(df):\nundefineddf) print(【…

inplace=True (原地操作)

Pytorch的很多地方有inplace这个参数,最近遇到的是nn.ReLU(inplaceTrue)。还有torch.sigmoid_等 inplace默认是False inplace的含义是是否进行覆盖运算。即改变一个tensor的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值 比如&a…

Pytorch中inplace操作

文章目录 前言Inplace操作概述inplace操作的优缺点常见的inplace操作总结参考链接 前言 之前在写训练代码时,遇到了inplace operation导致的问题,所以就了解了一下pytorch的inplace operation,在此记录一下inplace操作的一些知识。报错信息如…

PyTorch的inplace的理解

inplace的理解 我们平时看到的 nn.ReLU(inplaceTrue)、nn.LeakyReLU(inplaceTrue),这些语句中的inplace是什么意思? inplaceTrue指的是进行原地操作,选择进行原地覆盖运算。 比如 x1则是对原值x进行操作,然后将得到的结果又直接覆…

mysql如何改连接端口号_MYSQL修改端口号

系统:Windows Server 2016 MYSQL版本:5.7.20 1、打开MYSQL根目录查看是否存在my.ini,若不存在,创建一个my.ini文件 复制下面的code到my.ini中 [client] port2512 default-character-setutf8 [mysqld] # 设置为自己MYSQL的安装目录…

Linux如何查询mysql的端口号

Linux如何查询mysql的端口号 如何查询mysql的端口号(使用root): netstat -anp|grep mysql netstat -anp|grep mysql

MAC:查看和更改Mysql端口号(保姆级解决方案)

MAC:查看和更改Mysql端口号 第零步: 进入终端,使用sudo su命令,并输入用户密码开启root高权限 sudo su第一步: 终端输入命令如下,输入密码后进入mysql mysql -u root -p第二步: 输入命令(…

查看 mysql端口 和进程_mysql 端口号(怎么查看mysql的端口号)

mysql 端口号(怎么查看mysql的端口号) 2020-05-07 21:54:58 共10个回答 如何查看mysql的端口号 --输入以下命令:SHOWVARIABLESWHEREVARIABLE_NAMEport就可以查看当前连接的端口号,--例如:mysql>SHOWVARIABLESWHEREVARIABLE_NAMEport; mysql的默认端口号是多少 mysql默认端口…

mysql有多少个端口号_mysql默认端口号(mysql端口号是多少)

mysql默认端口号(mysql端口号是多少) 2020-05-07 22:14:36 共10个回答 mysql的默认端口号是多少 mysql默认端口号为3306,修改端口号方法:修改配置文件/etc/my.cnf mysql使用的默认端口号是哪个端口 mysql的默认端口是3306,可以编辑用户目录下的.my.cnf文件进行修改.sqlserver默…