基于MATLAB人脸检测的汽车疲劳驾驶检测

  • 课题介绍

疲劳驾驶导致汽车交通事故逐年增加,为了提升驾车的安全性,需对驾驶员疲劳状态实时监测并及时提醒. 为了提高疲劳驾驶判断效率及准确率,本文运用Viola-Jones 框架特征矩阵进行人脸预判断;预判断过程中为了减少Haar 值计算量并提高人脸识别速度,采用Adaboost 算法和级联分析,剔除非人脸的Haar 特征值,实现快速人脸识别;根据色彩空间转化实现眼部分割处理,根据PERCLOS 值评估驾驶员是否处于疲劳状态并提前予以警示;通过MATLAB 仿真软件实现疲劳驾驶检测算法的仿真分析. 在多个样本的测试过程中,该方法有效识别出人脸,并能够准确监测驾驶员的疲劳状态.

  • 背景

随着交通工具的飞速发展,交通隐患也成为威胁人类安全的杀手之一,每年全世界至少有50 万人死于交通事故. 欧美各国的研究报告指出,交通事故的起因有接近90% 的因素是人为造成,其中在驾驶过程中由于疲劳引发的交通事故就有10 万多例. 由此得知,驾驶员的疲劳驾驶已经成为道路交通事故的主要原因之一. 因此,对疲劳驾驶实时监测的研究对安全行车以及驾驶员的生命财产安全具有一定的意义.

汽车疲劳驾驶的表现特征有很多方面,较为突出的特征就是驾驶员的面部特征,如嘴部和眼部的开度、头部偏移等直观现象可作为疲劳的判断条件. 利用图像处理手段对图像进行增强处理,消除因周围光线不佳造成的疲劳驾驶特征识别的干扰. 采用AdaBoost 的人脸检测算法对人脸关键部位进行跟踪, 根据人眼变化并结合 PER‐ CLOS 准则进行疲劳判定,仿真结果能准确实现对人脸关键部位的检测. 文献[5]对疲劳驾驶的判断考虑了人脸部位的变化和驾驶状态数据两个因素. 根据Dlib 库的人脸轮廓点提取计算眼部和嘴部开度比值,获取正常及疲劳状态特征,再采用改进后的随机森林模型对疲劳状态进行判断,结果表明疲劳驾驶检测结果准确率达到92.06%. 文献[6]根据驾驶员的眼睛开度以及颅骨位置变化设计了基于驾驶人眼睛开度信息和头部姿态信息的驾驶疲劳检测系统. 采用Camshift 算法对人脸跟踪检测,并用二阶HOG 特征和随机森林回归算法对头部角度实时检测. 其仿真结果表明在各种驾驶姿态下都可以实时快速检测疲劳情况. 有研究指出,人疲劳和正常时其心率数据会存在微小区别,故有部分研究人员以心率区别来判断是否属于疲劳驾驶. 如文献[7]为了解决疲劳驾驶检测系统实用性和准确率低等问题,基于空间聚类心率检测算法实现了疲劳驾驶实时检测系统. 通过手环采集驾驶员心率值,利用该值与疲劳度之间相关程度,经空间聚类算法分析判断驾驶员是否为疲劳状态.

为了简单快速判断出人脸,并进行疲劳驾驶的判断,本文先用Viola-Jones 框架人脸检测算法对人脸进行检测;针对检测速度以及特征Haar 值累加计算量大等问题,采用图像积分、级联分析方法快速对拍摄图像进行人脸筛查,提高人脸判断速度和效率;采用PERCLOS 值判断驾驶员是否属于疲劳状态. 实验结果表明,该检测方法有一定的实用性和有效性.

流程图

  • 算法流程原理

1、眼睛部位提取及疲劳判定

在人脸的面部特征中,眼睛、鼻子、嘴巴可以最为直观地体现人在当前情况下大脑的疲劳程度. 在人脸的研究中发现人的肤色呈现出聚类性, 如果将人脸中非特征区域的部分去除,保留眼睛、鼻子、嘴巴等明显特征区域,对人脸疲劳特征识别和提取有很大帮助. 此外,人脸千变万化,在实际应用中整张面部识别存在一些问题,如人脸模板不能通用于任意拍摄图像,即人在驾驶时的姿势、位置的微量变化都会对人脸识别产生影响. 这需要多模板、多尺度、多角度的匹配,很难做到把所有人脸模板都囊括. 因此,需将眼睛和嘴巴单独分割建模,对其开度、张度进行单独匹配且其限值也是随着人脸比例进行动态调节设定.

对于关键部位的提取采用 Matlab 软件自带的级联对象检测器对眼睛位置进行定位.

    1. 眼睛状态的提取

眼睛疲劳判断是根据人眼开度不同时眼部轮廓会随之变化,故所提取的边缘会稍微不同. 而眼睛边缘检测准确度不高但速度快,考虑到疲劳检测速度及准确度,对于眼睛部位状态的提取采用组合算法,即模板匹配及水平灰度投影算法相结合;用检测器确定眼部位置后,运用模板匹配法对样本进行粗略检测,将样本进行分类,如睁眼、闭眼和可疑闭眼;再通过水平灰度投影法对闭眼和可疑闭眼样本进行判断,进一步确定其状态, 故该组合方法判断眼睛开闭状态的准确度较高.

    1. 疲劳的判定

在进行眼部分割时,首先提取眼睛特征. 根据卡内基梅隆实验[15],在一定时间内眼睛的内瞳孔占整个眼部比例达到一定数值即为眼睛闭合状态. 实验中将眼睑遮住瞳孔的面积超过 70%80%50% 3 个不同百分比计为眼睛闭合,并分别用P70P80 EM 符号来表示. 故在一定时间内,提取眼部参数进行眼部闭合百分比匹配,当达到眼睛闭合程度并满足一定频率时可判断为疲劳驾驶状态, 该频率用PERCLOS 值表示. 相关研究表明,P80 实验数据对驾驶员疲劳驾驶过程中的描述较为准确, 其 PERCLOS 值与疲劳状态的关联性很强[4]. PERCLOS 值计算如下:

PERCLOS  眼睛闭合帧数 % 

检测时间段总帧数

  • 运行效果示例

测试视频ID

实际眨眼次数

算法检测眨眼次数

眼部检测准确度/%

实际PERCLOS

算法PERCLOS

实际疲劳判断

算法疲劳判断

1

152

140

92.3

0.25

0.23

2

257

236

91.8

0.42

0.39

3

245

230

94.2

0.41

0.38

4

231

210

90.9

0.38

0.35

5

296

281

95.1

0.49

0.46

6

308

288

93.7

0.51

0.48

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/907753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读(三十二):EGNet: Edge Guidance Network for Salient Object Detection

文章目录 1.Introduction2.Related Works3.Salient Edge Guidance Network3.1Complementary information modeling3.1.1Progressive salient object features extraction3.1.2Non-local salient edge features extraction 3.2One-to-one guidance module 4.Experiments4.1Imple…

MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题

1. limit 100000,10 和 limit 10区别 LIMIT 100000, 10: 这个语句的意思是,从查询结果中跳过前100000条记录,然后返回接下来的10条记录。这通常用于分页查询中,当你需要跳过大量的记录以获取后续的记录时。例如,如果你…

源码侦探:理解 numpy 中的 tile 方法

文章目录 pre :先来一张源码的切片1. 参数和基本定义:2. 将 reps 转换为元组:3. 提升数组维度:4. 特殊情况检查:5. 处理数组维度的不同情况:6. 计算输出数组的形状:7. 通过重复构造数组&#xf…

单链表OJ题(3):合并两个有序链表、链表分割、链表的回文结构

目录 一、合并两个有序链表 二、链表分割 三、链表的回文结构 u解题的总体思路: 合并两个有序链表:首先创建新链表的头节点(哨兵位:本质上是占位子),为了减少一些判断情况,简化操作。然后我们…

Qt6 CMake 中引入 Qt Linguist 翻译功能

qt cmake 使用自带翻译工具配置步骤 创建Qt CMake 程序配置项目 CMake 及 代码使用流程最终CMake 如下最终工程链接为:参考 创建Qt CMake 程序 配置项目 CMake 及 代码 在CMake 中添加如下代码, 导入相关的翻译库 find_package(QT NAMES Qt6 Qt5 REQUIRED COMPON…

Android IPC机制(一)多进程模式

1. 什么是进程? 进程是操作系统分配资源(如 CPU、内存等)的基本单位。简单来说,进程是一个正在执行的程序的实例。每个进程都有自己的内存空间、数据栈和其他辅助数据,用于跟踪进程的执行状态。在 Android 中&#xff…

SQL,力扣题目1767,寻找没有被执行的任务对【递归】

一、力扣链接 LeetCode_1767 二、题目描述 表:Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

《JVM第3课》运行时数据区

无痛快速学习入门JVM,欢迎订阅本免费专栏 运行时数据区结构图如下: 可分为 5 个区域,分别是方法区、堆区、虚拟机栈、本地方法栈、程序计数器。这里大概介绍一下各个模块的作用,会在后面的文章展开讲。 类加载子系统会把类信息…

[ 问题解决篇 ] 解决远程桌面安全登录框的问题

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件

Vue+element-ui实现网页右侧快捷导航栏 Vue实现全局右侧快捷菜单功能组件 可视区域没超过当前屏幕高度时候只显示三个菜单效果 可视区域超过当前屏幕高度时,显示可回到顶部菜单的,当然这个菜单显示条件可以自定义,根据需求设置 然后将这个整体功能创建为一个全局组件 代…

苏州金龙新V系客车创新引领旅游出行未来

10月25日,为期三天的“2024第六届旅游出行大会”在风景秀丽的云南省丽江市落下帷幕。本次大会由中国旅游车船协会主办,全面展示了中国旅游出行行业最新发展动态和发展成就,为旅游行业带来全新发展动力。 在大会期间,备受瞩目的展车…

看门狗电路原理与应用

看门狗的原理与应用 看门狗基本原理 看门狗,英文简称为“Watchdog Timer ”或者“Watchdog”; 本质上就是一个定时器的作用,简单理解就是 MCU发出一个周期性的信号,这个信号是满足看门狗芯片内部计时器的时间限制,则…

Caché/IRIS file2Xml 一个将文件转换成Studio导出的xml格式的工具

file2Xml 一个将文件转换成Studio导出的xml格式的工具 通过此工具可以将本地文件转换成xml格式文件,然后通过Studio导入到服务器中,而不再需要其他工具将文件传至服务器。 下面以为ensemble2016自带的一个示例界面增加背景图为例。 http://localhos…

java项目之教师工作量管理系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教师工作量管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 教师工作量管理系统的…

外贸平台开发多语言处理的三种方式

随着全球贸易的不断增长,外贸平台的多语言处理已成为提升用户体验和市场竞争力的重要因素。在开发外贸平台时,有多种方法可以实现多语言支持。本文将探讨三种主要的多语言处理方式:数据库级多语言支持、前端国际化框架以及内容管理系统&#…

《Python网络安全项目实战》项目2 Python基础练习_总复习(1)

《Python网络安全项目实战》项目2 Python基础练习 总复习(1) 班级: 姓名: 实训成绩: 任务单成绩 : 输入用户名密码并将其输出打印。 userName _____________________ passWord ______________________ #输…

Linux——Ubuntu环境C编程

配置vim编辑器 设置一个tab键为4个空格 打开/etc/vim/vimrc文件,此文件为只读,所以要用sudo访问boot权限: set ts4(设置一个tab键为4空格) set nu(vim编辑器下显示行号) gcc编译器 gcc命令…

Java毕业设计-基于微信小程序的校园二手物品交易系统的实现(V2.0)

博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…

WPF+MVVM案例实战(十九)- 自定义字体图标按钮的封装与实现(EF类)

文章目录 1、案例效果1、按钮分类2、E类按钮功能实现与封装1.文件创建与代码实现2、样式引用与封装 3、F类按钮功能实现与封装1、文件创建与代码实现2、样式引用与封装 3、按钮案例演示1、页面实现与文件创建2、运行效果如下 4、源代码获取 1、案例效果 1、按钮分类 在WPF开发…

各地级市能源消耗量数据-基于灯光数据的反演(2000-2022年)

今天带来的数据是的全国各省市能源消耗量数据,省级的能源消耗量数据可以在统计年鉴之中查到,但市级的数据却暂无统计。但今天我们基于一篇论文提供的思路,通过夜间灯光与省级能源消耗量对更小尺度的地区能源消耗量进行反算。原文提供1995-200…