当前位置: 首页 > news >正文

基于Dlib的疲劳检测系统

需要源码的朋友可以私信我

基于Dlib的疲劳检测系统

  • 1、设计背景及要求
  • 2、系统分析
  • 3、系统设计
    • 3.1功能结构图
    • 3.2基于EAR、MAR和HPE算法的疲劳检测
      • 3.2.1基于EAR算法的眨眼检测
      • 3.2.2基于MAR算法的哈欠检测
      • 3.3.3基于HPE算法的点头检测
  • 4、系统实现与调试
    • 4.1初步实现
    • 4.2具体实现过程
  • 5、系统实现与调试

1、设计背景及要求

随着经济的飞速发展,货运行业的发展趋势愈加迅猛,货车驾驶员24h都留在车上的现象已成为行业常态。据国家统计局数据显示,近几年的特大事故中,有超40%的事故是由于驾驶员疲劳驾驶造成的。为了减少疲劳驾驶导致的交通安全问题,本系统旨在设计一款可以自动实时检测驾驶员是否疲劳驾驶并发出警报的系统。
设计要求
(1) 设计并实现一个软件界面,能够实时获取人脸视频;
(2) 使用OpenCV或Dlib库实现人脸检测和特征点标定;
(3) 定义并提取与疲劳驾驶相关的人脸特征;
(4) 合理设计算法,实现驾驶员疲劳状态检测,检测到疲劳时发出预警;
(5) 测试系统性能,并分析

2、系统分析

通过摄像头实时采集驾驶员的行为表情状态,判断驾驶员的头部姿态,眼睛闭合频率和单位时间打哈欠的次数来判断驾驶员的疲劳程度。

3、系统设计

3.1功能结构图

功能结构图设计:
在这里插入图片描述
本系统通过收集人脸朝向、人脸位置、瞳孔朝向、眼睛开合度、眨眼频率等数据,提取驾驶员面部68个特征点及其坐标,准确定位驾驶员人脸的位置,并利用眼部的12个特征点计算眼部长宽比EAR,根据嘴部的6个特征点计算嘴巴的MAR,利用其他坐标结合HPE算法计算头部转动的欧拉角。将这些数据分别与对应的阈值比较,从而统计出驾驶员眨眼、打哈欠和点头的次数。通过对驾驶员眨眼、打哈欠、点头次数的统计,可实时判断驾驶员的注意力集中程度,分析驾驶员是否疲劳驾驶,并及时作出安全提示。

3.2基于EAR、MAR和HPE算法的疲劳检测

3.2.1基于EAR算法的眨眼检测

当人眼睁开时,EAR在某个值域范围内波动,当人眼闭合时,EAR迅速下降,理论上接近于0。当EAR低于某个阈值时,眼睛处于闭合状态;当EAR由某个值迅速下降至小于该阈值,再迅速上升至大于该阈值,则判断为一次眨眼。为检测眨眼次数,需要设置同一次眨眼的连续帧数。眨眼速度较快,一般1~3帧即可完成眨眼动作。
在这里插入图片描述
在这里插入图片描述
 Dlib库68个特征点模型

3.2.2基于MAR算法的哈欠检测

基于MAR算法的哈欠检测,利用Dlib提取嘴部的6个特征点,通过这6个特征点的坐标(51、59、53、57的纵坐标和49、55的横坐标)来计算打哈欠时嘴巴的张开程度。当一个人说话时,点51、59、53、57的纵坐标差值增大,从而使MAR值迅速增大,反之,当一个人闭上嘴巴时,MAR值迅速减小。
在这里插入图片描述

3.3.3基于HPE算法的点头检测

HPE(Head Pose Estimation, HPE)算法步骤 :2D人脸关键点检测,3D人脸模型匹配,求解 3D点和对应2D点的转换关系,根据旋转矩阵求解欧拉角。检测过程中需要使用世界坐标系(UVW)、相机坐标系(XYZ)、图像中心坐标系(uv)和像素坐标系(xy)。
世界坐标系转换到相机坐标系:
在这里插入图片描述
相机坐标系转换到像素坐标系:
在这里插入图片描述
像素坐标系与世界坐标系的关系为:
在这里插入图片描述
图像中心坐标系转换到像素坐标系:
在这里插入图片描述

4、系统实现与调试

4.1初步实现

系统的关键就是对驾驶员的面部进行识别,然后计算并统计出疲劳值,通过显示屏把数据显示在屏幕上给驾驶员看,如果驾驶员被判定为疲劳驾驶或者危险驾驶系统就会立即进行语音提醒。想要成功获得人脸面部的68个特征点,就必须先检测到人脸的存在。调用Dlib中的正向人脸检测器API,如果没有检测到人脸就会在屏幕上显示“No Face”,控制台输出“没有检测到人脸”,这里用手遮住脸、脸转向左右两边的幅度太大、人脸不在摄像头的摄像范围里,人脸距离摄像头太远都算没有检测到人脸。
在这里插入图片描述
从视频流进行循环,读取图片,并对图片做维度扩大,并进灰度化,使用dlib获得脸部位置以及脸部特征位置,将脸部特征信息转换为数组array的格式,从而提取左眼和右眼坐标。构造函数计算左右眼的EAR值,使用平均值作为最终的EAR。类似的,获得嘴部MAR值。分别计算左眼、右眼和嘴部的评分求平均作为最终的评分,如果小于阈值,则加1,如果连续3次都小于阈值,则表示进行了一次眨眼活动;如果嘴部评分大于阈值,则表示一次打哈欠。
在这里插入图片描述
在这里插入图片描述

4.2具体实现过程

在这里插入图片描述
基于上述程序基础,添加可视化界面,增加系统交互性。利用wx进行界面搭建,设置视频源,可选择摄像头或视频文件导入,提供实时检测和文件检测功能;添加疲劳检测参数设置,可自行勾选检测参数以及疲劳时间调整,检测条件更加灵活;状态输出栏可查看历史状态,追溯用户历史数据,为事故调查提供条件。如图7为 UI界面。
后添加点头检测增加系统精度,本系统根据计算欧拉角判断驾驶员的点头次数,这里涉及欧拉角的三个角,分别是 Pitch(绕X轴旋转),Yaw(绕Y轴旋转),Roll(绕Z轴旋转),一个物体对于相机的姿态可以用旋转矩阵(R)和平移矩阵(T)来表示。人脸2D与3D之间的仿射变换矩阵包含了头部旋转和平移信息,可以直接调用OpenCV的solvePnp()函数求解得出旋转和平移向量,最终利用得到的旋转矩阵来求解欧拉角。当在某一个时间段10s内,驾驶员的|Pitch|≥20或者|Roll|≥20的时间占比超过0.3时,则判定驾驶员处于疲劳状态。
在这里插入图片描述

5、系统实现与调试

本系统采用人脸追踪和图像处理相结合的方式采集面部图像处理疲劳信息,利用面部疲劳特征判断疲劳状态,以采集到的人脸图像信息作为输入,通过检测算法输出判断结果,判断为疲劳状态后,系统发出警告。
在这里插入图片描述
本系统通过Dlib库中的人脸识别和dat模型中的68个关键点,结合EAR、MAR和HPE算法,判断驾驶员是否眨眼、打哈欠、点头,不仅实现了检测指标多样化,还实现了实时检测驾驶员疲劳状态的目的,可用于货车、汽车、出租车等机动车辆,为驾驶员的生命安全增加一份保障。本系统的不足之处在于当驾驶员面部有部分遮挡时就无法准确判断驾驶员是否处于疲劳驾驶状态,只会发出提示,提醒驾驶员“您已脱离摄像范围”。因此,下一步的工作重点是如何解决在有遮挡情况下也能正确识别驾驶员精神状态的问题。

相关文章:

基于Dlib的疲劳检测系统

需要源码的朋友可以私信我 基于Dlib的疲劳检测系统 1、设计背景及要求2、系统分析3、系统设计3.1功能结构图3.2基于EAR、MAR和HPE算法的疲劳检测3.2.1基于EAR算法的眨眼检测3.2.2基于MAR算法的哈欠检测3.3.3基于HPE算法的点头检测 4、系统实现与调试4.1初步实现4.2具体实现过程…...

three.js通过CubeTexture加载环境贴图,和RGBELoader加载器加载hdr环境贴图

一、使用CubeTexture进行环境贴图 1.CubeTexture使用介绍 Three.js中可以通过使用CubeTexture进行环境贴图,CubeTexture需要将6张图片(正面、反面、上下左右)包装成一个立方体纹理。下面是一个简单的例子: 首先需要加载六张贴图…...

pycharm中Terminal输入sqlite3,出现无法将sqlite项识别为cmdlet**的解决方法

前提:本机上已安装sqlite3,安装详见:pycharm社区版中安装配置sqlite3_Sunshine_0426的博客-CSDN博客 问题: cmd命令行中或pycharm中Terminal行输入sqlite3 db.sqlite3命令后,出现“无法将“sqlite3”项识别为 cmdlet…...

VSCode 安装配置教程详解包含c++环境配置方法

vscode安装教程及c环境配置详解 vscode下载安装下载C扩展插件VScode C环境配置配置环境变量检查 MinGW 安装配置编译器:配置构建任务检查是否安装了编译器配置完毕 vscode下载安装 地址:官网下载地址 直接打开下载好的.exe文件进行安装即可&#xff0…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#)

Baumer工业相机堡盟工业相机如何通过BGAPISDK将图像放大缩小显示(C#) Baumer工业相机Baumer工业相机BGAPISDK和图像放大缩小的技术背景Baumer工业相机通过BGAPISDK将相机图像图像放大缩小功能1.引用合适的类文件2.通过BGAPISDK将相机图像图像放大缩小功能…...

8.1 PowerBI系列之DAX函数专题-进阶-解决列排序对计算的影响

需求 下列矩阵中,在月份列不按照原始数据的month_no排列时,能正确计算销售额占比,但是当月份按照month_no排序时就会出错,需要解决这个问题。 实现 month % divide([amount],calculate([amount],all(date[month desc]))) //排…...

Java的第十二篇文章——集合

目录 第十二章 集合 学习目标 1. 集合框架的由来 2. 集合框架的继承体系 3. Collection接口 3.1 Collection接口的常用方法 4. Iterator接口 4.1 Iterator接口的抽象方法 4.2 获取迭代器接口实现类 4.3 迭代器的实现原理 4.4 并发修改异常 4.5 集合存储自定义对象并…...

docker 镜像制作 与 CI/CD

目录 镜像到底是什么? 使用docker创建镜像 步骤: 1、编辑Dockerfile(Dockerfile是docker制作镜像的配方文件) 2、编辑requirements.txt文件 3、编辑app.py文件,我们的程序文件 4、生成镜像文件 5、查看生成的镜…...

Spring Boot 异常报告器解析

基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建Spring Boot 框架整体启动流程详解Spring Boot 系统初始化器详解Spring Boot 监听器详解Spring Boot banner详解Spring Boot 属性配置解析Spring Boot 属性加载原理解析Spring Boot 异常报告器解析 创建自定…...

瑞亚太空活动公司RSA与英国国防与安全加速器达成量子项目合作

​ (图片来源:网络) 瑞亚太空活动公司(RSA)与英国国防与安全加速器(DASA)签署了合作协议,主要开发名为“无限交换”的可操纵量子真空的技术项目。这是RSA在英国签订的第一份合同&…...

Shapley值法介绍及实例计算

Shapley值法介绍及实例计算 为解决多个局中人在合作过程中因利益分配而产生矛盾的问题,属于合作博弈领域。应用 Shapley 值的一大优势是按照成员对联盟的边际贡献率将利益进行分配,即成员 i 所分得的利益等于该成员为他所参与联盟创造的边际利益的平均值…...

不用手动改 package.json 的版本号

“为什么package.json 里的版本还是原来的,有没有更新?”,这个时候我意识到,我们完全没有必要在每次发布的时候还特意去关注这个仓库的版本号,只要在发布打tag的时候同步一下即可 node.js 部分,我们得有一个…...

gitlab Can‘t update,dev has no tracked branch

代码仓库迁移到gitlab后本地更改仓库地址后 拉取代码报错: Can’t update,dev has no tracked branch: 解决办法: 在当前项目的目录下运行命令: git branch -u git dev --set-upstream-toorigin/dev第一个dev是本地分支名字&…...

sql批量操作

SQl: 1,在某一字段后批量增加内容:UPDATE 表名 SET 字段 CONCAT(字段,要增加的内容) 例:UPDATE b8_niuniu_permission SET game_ids CONCAT(game_ids,,3) (或者后面可以加where条件) 2,批量修改某一字段…...

数据库监控与调优【九】—— 索引数据结构

索引数据结构-B-Tree索引、Hash索引、空间索引、全文索引 二叉树查找 对于相同深度的节点,左侧的节点总是比右侧的节点小。在搜索时,如果要搜索的值key大于根节点(图中6),就会在右侧子树里查找;key小于根…...

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议 哈工大计算机网络课程传输层协议详解之:可靠数据传输的基本原理哈工大计算机网络课程传输层协议详解之:TCP协议哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖析 …...

Unity Mac最新打苹果包流程

作者介绍:铸梦xy。IT公司技术合伙人,IT高级讲师,资深Unity架构师,铸梦之路系列课程创始人。 IOS详细打包流程1.申请APPID2.申请开发证书3.创建描述文件 IOS详细打包流程 1.申请AppID 2.创建证书 3.申请配置文件(又名描…...

【MySQL数据库 | 第二十篇】explain执行计划

目录 前言: explain: 语法: 总结: 前言: 上一篇我们介绍了从时间角度分析MySQL语句执行效率的三大工具:SQL执行频率,慢日志查询,profile。但是这三个方法也只是在时间角度粗略的…...

学Python能做哪些副业?我一般不告诉别人!建议存好

前两天一个朋友找到我吐槽,说工资一发交完房租水电,啥也不剩,搞不懂朋友圈里那些天天吃喝玩乐的同龄人钱都是哪来的?确实如此,刚毕业的大学生工资起薪都很低,在高消费、高租金的城市,别说存钱&a…...

简化 Hello World:Java 新写法要来了

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” ,希望 Java 的学习过程能更平滑,让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释:现在的 Java 语言非常…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...