基于OpenMV的疲劳驾驶检测系统的设计
一、前言
借助平台将毕业设计记录下来,方便以后查看以及与各位大佬朋友们交流学习。如有问题可以私信哦。
本文主要从两个方面介绍毕业设计:硬件,软件(算法)。以及对最后的实验结果进行分析。感兴趣的朋友们可以评论区留言~看到就会回复。有需要代码和模型等资料的可以加扣扣1287073476私聊哦。
本文所设计的疲劳驾驶检测系统的实现流程如下:
二、硬件要求
首先,最基本的硬件当然是主控系统OpenMV开发板,OpenMV我们选择OPENMV4 H7 PLUS版本,如下图所示,其他版本跑不了模型训练,会报错!!!
其他硬件:OV5640摄像头,稳压模块,蜂鸣器模块,LED模块等。
三、相关算法
1.人脸识别
Sirovich首先提出使用特征脸法进行人脸识别,它是一种将人脸特征低维化 的方法,本文采取基于Haar特征的Cascade级联分类器进行人脸识别,再对检测到的人脸进行疲劳驾驶判断。
基于Haar特征的Cascade级联分类器,是Paul Viola和Michael Jone2001年在论文“Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一有效的物品检测(object detect)方法,它是一种机器学习的方法,通过许多正负样例中训练得到cascade方程,然后将其应用于其他图片。
一个弱分类器就是一个决策树,最基本的弱分类器只包含一个Haar-like特征,也就是它的决策树只有一层,被称为树桩(stump)。在经过排序筛选后,选出最优弱分类器,并将最优弱分类器的特征量交给AdaBoost,让其进行训练。
级联分类器:将多个弱分类器进行加权组合就形成了强分类器,同样将多个强分类器进行简单组合就形成了级联分类器。
从该级联器的训练过程可以发现,当一个弱分类器能够正确识别出分类样本时,将会减少样本的权重;当一个弱分类器错误识别分类样本的时候,将会使得样本的权重增加。因此,后面的分类器在训练的时候会针对错分样本加强训练。最后,将的弱分类器合成强分类器,再将各弱分类器权重值与平均值进行比较,从而实现对图像的检测。如图通过加载人脸haar算子,基于Cascade级联器识别到人脸后,将人脸框起来,方便后续的疲劳检测。
2.疲劳检测
通过人脸识别后,确认为人脸,再进行疲劳检测,本文疲劳驾驶检测主要采用卷积神经网络算法,通过深度学习后,生成模型,将人脸特征与模型进行比对从而达到对驾驶人员的疲劳驾驶状态检测。本文模型训练主要通过EDGE IMPULSE网站进行云端在线训练,具体模型训练看这里。
四、结果分析
1、实验结果
本文所设计的疲劳驾驶检测系统实物如图所示。对检测人员进行实时监测,当检测到驾驶人员张嘴表现出“打哈欠”特征时,预警模块发出报警,蜂鸣器发声,LED模块亮红灯,来提示驾驶人员目前处于疲劳状态,达到提醒驾驶人员不要疲劳驾驶的目的。
本文首先进行人脸识别,,识别为人脸后,白框将人脸框起来。若检测不到人脸,则不进行疲劳检测。识别为人脸后,再进一步判断是否为疲劳驾驶。当驾驶员出现打哈欠或者闭眼等特征时,经过识别,检测为疲劳驾驶后,LED模块中指示灯亮红色,蜂鸣器发声,作为警告提醒驾驶人员疲劳驾驶。如图所示:
当驾驶员没有出现疲劳特征时,摄像头进行实时监测,LED模块不亮红灯,蜂鸣器不发声。判定为非疲劳驾驶。如图所示:
2、结果分析
在设计结果分析方面,可以从以下几个方面考虑:
准确性:系统的准确率是评价其性能好坏的重要指标之一。在测试中,应该对不同场景下的数据进行收集和分析,并根据实际情况进行调整和优化。如果系统的准确率较高,则说明其具有较强的稳定性和可靠性。经过多次实验发现,人脸识别的准确率高达98%,正确检测为疲劳驾驶的准确率高达99%以上。因此可以满足系统设计的基本需求。
实时性:由于疲劳驾驶是一个非常危险的行为,因此及时发现并提醒驾驶员非常关键。因此,在设计系统时需要考虑实时性,即对图像进行处理和判断的速度是否足够快。如果延迟过大,则可能会导致误判或漏判等问题。经过多次实验发现,该系统检测疲劳驾驶延时较短,也满足该系统的设计需求。
五、总结与展望
本文设计的基于OpenMV的疲劳驾驶检测系统在城市交通安全背景下应运而生,它可以实时监测驾驶员的状态,及时提醒他们注意休息,有效降低了交通事故的发生率。本文针对驾驶员疲劳驾驶出现的打哈欠特征,结合现状成熟的机器视觉,深度学习等人工智能技术设计出一种基于OpenMV的疲劳驾驶检测系统。利用OpenMV采集图像、预处理、识别分析等步骤,可以实现对驾驶员状态进行准确快速地判断,并发出提示或警告信号。主要通过haar特征算子进行人脸识别,当今人脸识别技术十分成熟,具有以下的特点:
(1)准确性高:通过本文的原理阐述以及实验验证,可以发现人脸识别的准确率很高,基本不会出现误判的现象。
(2)方便快捷:人脸识别的方法算法很多,很方便可靠,简单易学,程序运行没有延迟,一般的板载摄像头都可以对人脸进行识别,而且当今的图像处理,机器视觉相关开发板的出现,更是方便了人们进行项目测试,或者实验的开展,甚至是将其应用在生活当中。
(3)可靠性高:人脸识别技术也是一种十分安全并且可靠的技术,这是因为人的面部特征是不可篡改的,每一个独立的个体都拥有独一无二的面部特征。而且,识别系统通常采用了生物特征识别和密码学两个环节的复合方法来确保系统的安全性。
将该系统进行多次测试实验,表明该系统具有较高的准确性和可靠性。此外,该系统还具有快速响应,操作简单,易安装的特点。整个课题完成了基于OpenMV的疲劳驾驶检测系统的设计以及论文的撰写,已完成的工作总结如下:
(1)本文设计了一款基于深度学习的轨道交通驾驶员疲劳检测系统,系统由STM32H743单片机、摄像头模块、电源模块、蜂鸣器预警模块组成;
(2)疲劳检测系统采用双电源模式,可支持电池供电或USB供电;
(3)疲劳检测系统采用Haar算子进行人脸检测;
(4)收集了包含不同角度、不同光照条件下的人脸数据集;
(5)采用深度学习的方法判断驾驶员是否处于疲劳状态;
(6)对训练生成的模型进行测试优化,对其参数进行调整,生成最能满足设计需求的模型。
在本次课题遇到尚未解决的问题是OpenMV摄像头在进行人脸的实时监测当中对眨眼闭眼特征的识别不明显,当单独进行眼睛闭眼的特征识别时,需要对人脸区域中的人眼区域进行截取,这样就耗费了部分内存,增加了程序运行的延迟。随着未来人工智能的迅速发展,基于OpenMV的疲劳驾驶检测系统可以进一步发展和完善,具有以下展望:
(1)未来的疲劳驾驶检测系统可以进一步提高准确性和智能化水平,更加精确的检测驾驶员的疲劳驾驶状态,以及可以对驾驶员的疲劳状态进行预判。
(2)通过与车辆的其他传感器进行联动,可以实现更加全面和精准的疲劳驾驶检测功能。
(3)在实际应用当中,可以考虑将疲劳驾驶检测系统与车辆的自动驾驶功能结合,实现更加安全和智能化的驾驶体验。
相关文章:

基于OpenMV的疲劳驾驶检测系统的设计
一、前言 借助平台将毕业设计记录下来,方便以后查看以及与各位大佬朋友们交流学习。如有问题可以私信哦。 本文主要从两个方面介绍毕业设计:硬件,软件(算法)。以及对最后的实验结果进行分析。感兴趣的朋友们可以评论区…...

chatgpt赋能python:使用Python来寻找两个列表不同元素的方法
使用Python来寻找两个列表不同元素的方法 在编写Python程序时,我们经常需要比较两个列表的元素,找出它们之间的不同之处。在搜索引擎优化(SEO)方面,这种比较对于找出两个网站内容的差异也非常有用。在这篇文章中&…...

简单学生管理系统
简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501 转载请注明出处,尊重作者劳动成果。 目录 前期准备: 数据库的连接: 用户账号类:…...

图像金字塔
图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。下图是一个图像金子塔的示例。从图中可以看到,图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低…...

Springboot整合Camunda工作流引擎实现审批流程实例
环境:Spingboot2.6.14 camunda-spring-boot-starter7.18.0 环境配置 依赖配置 <camunda.version>7.18.0</camunda.version> <dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boo…...

PHP设计模式21-工厂模式的讲解及应用
文章目录 前言基础知识简单工厂模式工厂方法模式抽象工厂模式 详解工厂模式普通的实现更加优雅的实现 总结 前言 本文已收录于PHP全栈系列专栏:PHP快速入门与实战 学会好设计模式,能够对我们的技术水平得到非常大的提升。同时也会让我们的代码写的非常…...

【玩转Docker小鲸鱼叭】理解Docker的核心概念
Docker核心概念 Docker有三大核心概念:镜像(Image)、容器(Container)、仓库(Repository) 1、镜像(Image) Docker镜像 是我们创建和运行Docker容器的基础,它…...
Eureka 心跳和服务续约源码探秘——图解、源码级解析
🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月25日 🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力! 文章目录 分布式系统的心跳机制心跳机制的实…...
代码随想录二刷 530 二叉搜索树的最小绝对差 98. 验证二叉搜索树 700. 二叉搜索树中的搜索
530 二叉搜索树的最小绝对差 代码如下 func getMinimumDifference(root *TreeNode) int { var pre *TreeNode res : math.MaxInt var traverse func(root * TreeNode) traverse func(root * TreeNode) { if root nil { return } traverse(root.Left) …...

Docker安装——CentOS7.6(详细版)
ps:docker官网 在 CentOS 上安装 Docker 引擎 |官方文档 () 一、确定版本(必须是7以上版本) cat /etc/redhat-release 二、卸载旧版本(或者之前装过,没有安装过就不用管了) (root用…...
论信息系统项目的整体管理(范文)
论信息系统项目的整体管理(范文) 【摘要】 2016年10月,XX省卫生健康委启动了XX省分级转诊服务平台建设项目,我在项目中担任项目经理,负责项目的全面管理工作。该平台作为全省上下级医院转诊的信息化通道,…...

【音视频处理】音频编码AAC详解,低码率提高音质?
大家好,欢迎来到停止重构的频道。 本期我们介绍音频编码格式AAC。 AAC是音频最常用的编码格式之一,几乎所有的播放器都支持这个编码格式。 其他音频编码格式都是类似的,只是某些细节存在差别,如压缩算法、某些音频参数存在限制…...
逆函数学习
逆函数 给定关系 R ⊆ X Y R\subseteq X\times Y R⊆XY,颠倒 R R R的所有有序偶可以得到 R R R的逆关系 R ~ ⊆ Y X \tilde{R}\subseteq Y\times X R~⊆YX 但是对于函数 f : X → Y f:X\to Y f:X→Y而言,其逆关系 f ~ \tilde{f} f~可能不是 Y Y Y到…...

代码审计——SSRF详解
为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 服务端请求伪造攻击(SSRF)也成为跨站点端口攻击,是由于一些应用在向第三方主机请求资源时提…...

搭建Scala开发环境
一、Windows上安装Scala 1、到Scala官网下载Scala Scala2.13.10下载网址:https://www.scala-lang.org/download/2.13.10.html 单击【scala-2.13.10.msi】超链接,将scala安装程序下载到本地 2、安装Scala 双击安装程序图标,进入安装向导&…...

BLIP和BLIP2
文章主要是对BLIP2 (使用冻结图像编码器和大型语言模型的Bootstrapping语言图像预训练)论文的阅读笔记,也对BLIP(用于统一视觉语言理解和生成的Bootstrapping语言图像预训练)算法进行了简单的介绍。 文章:…...

微信小程序开发实战 ⑨(TabBar)
作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 Ǵ…...

微前端探秘:初始微前端、现有方案和未来趋势
初识微前端 微前端是什么 概念: 微前端是指存在于浏览器中的微服务。 微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为把多个小型前端应用聚合为一体的应用。这就意味着前端应用…...

运维(SRE)成长之路-第2天 文本编辑工具之神VIM
vi和vim简介 在Linux中我们经常编辑修改文本文件,即由ASCII, Unicode 或其它编码的纯文字的文件。之前介绍过nano,实际工作中我们会使用更为专业,功能强大的工具 文本编辑种类: 全屏编辑器:nano(字符工具…...
45从零开始学Java之详解static修饰符、静态变量和静态方法
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在前一篇文章中,壹哥给大家讲解了abstract关键字,从而我们掌握了抽象类与抽象…...

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> …...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...