基于OpenMV的疲劳驾驶检测系统的设计

news2024/11/24 5:17:30

一、前言

        借助平台将毕业设计记录下来,方便以后查看以及与各位大佬朋友们交流学习。如有问题可以私信哦。

        本文主要从两个方面介绍毕业设计:硬件,软件(算法)。以及对最后的实验结果进行分析。感兴趣的朋友们可以评论区留言~看到就会回复。有需要代码和模型等资料的可以加扣扣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)在实际应用当中,可以考虑将疲劳驾驶检测系统与车辆的自动驾驶功能结合,实现更加安全和智能化的驾驶体验。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创新案例|专注在线 协作平台 设计产品中国首家PLG独角兽企业蓝湖如何实现98%的头部企业渗透率

蓝湖起步于2015年,是一款服务于产品经理、设计师、工程师的产品设计研发在线协作工具, 2021年10月,蓝湖宣布完成C轮融资,融资额高达10亿人民币,称为中国2B市场中首家采用PLG发展的独角兽企业,并实现了从100…

conda虚拟环境列表错误module ‘attr‘ has no attribute ‘s‘的解决方法

列出虚拟环境列表命令:conda info -e 或者conda env listconda info -e 这个可以正常显示,conda env list却报错了,以前是没有问题的,因为这个命令我更习惯使用,所以这个小问题必须解决掉,或许其他读者可能…

undetected_chromedriver解决网页被检测

一、问题分析 selenium打开浏览器模仿人工操作是诸多爬虫工作者最万能的网页数据获取方式,但是在做自动化爬虫时,经常被检测到是selenium驱动。比如前段时间selenium打开维普高级搜索时得到的页面是空白页,懂车帝对selenium反爬也很厉害。 二…

【React】setState原理,SCU,不可变对象,Ref,受控组件,高阶组件,封装轮播图组件

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 setState原理setState异步更新 SCU不可变对象RefRef获取DOMRef获取组件 非受控组件受控组件高阶…

word目录怎么自动生成,3个步骤轻松搞定!

案例:我在做策划案的时候,需要制作目录。我觉得自己手动制作目录很困难,通过word的可以自动生成目录,但是我不知道具体的操作方法。有没有小伙伴可以分享一下? 在制作任务书、书写论文的时候,经常需要添加…

vue+java+springboot企业办公人事oa办公管理系统2142g

本企业OA管理系统有管理员和用户。管理员功能有个人中心,用户管理,公告信息管理,客户关系管理,通讯录管理,日程安排管理,车辆信息管理,文件信息管理,工作日志管理,上班考…

0基础学习VR全景平台篇第42篇:编辑器底部菜单-分组管理

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,底部菜单—分组管理功能操作。 功能位置示意 一、本功能将用在哪里? 分组管理,指观看者可点击不同分组,查看不同类型全景内容…

learn C++ NO.9——string(2)

引言: 现在是北京时间的2023年6月15日早上的10点14分。时间过得飞快,现在已经大一的最后一个星期了。明天也是大一最后一次课,线下的实训课。线下实训内容为c语言二级的内容,对我来说跟学校的课效率太低下了,我还是比…

初识网络之再看udp协议

目录 一、端口号 1. 五元组 2. 端口号范围划分 3. 一些知名端口号 4. 进程与端口号 5. 两个常用网络工具 5.1 netstat 5.2 pidof 二、UDP协议 1. udp协议格式 2. udp报文解包 3. udp报文分用 4. udp的特点 5. 缓冲区 5.1 tcp缓冲区 5.2 udp缓冲区 6. 一些常见…

函数重载异常的常见原因

函数重载异常的常见原因 使用重载函数时,如果数据类型不匹配,C尝试使用类型转换与形参进行匹配,如果转换后有多个函数能匹配上,编译将报错。引用可以作为函数重载的条件,但是,调用重载函数的时候&#xff0…

Linux:端口

端口是设备与外界进行通讯的出入口,端口可以分为物理端口和虚拟端口 物理端口:又叫接口,是可见的端口,比如HDMI端口、USB接口虚拟端口:是指计算机内部的端口,用来操作系统和外部进行交互使用 通过IP地址只能…

6.python高频函数-处理缺失值isnull()、fillna()、dropna()

前言 如何判断pandas.DataFrame、Series是否包含缺失值NaN以及如何处理缺失值NaN。 Part.1 isnull() 函数 使用 isnull()、isna() 确定每个元素的缺失值 如果值为 NaN,则值为 True,如果不是,则值为 False。 读取数据集 panel_data pd.r…

从C语言到C++_19(容器适配器+stack和queue模拟实现+优先级队列priority_queue)

目录 1. 容器适配器 1.1 什么是适配器 1.2 STL标准库中stack和queue的底层结构 2. stack和queue的模拟实现 2.1 stack模拟实现 2.2 queue的模拟实现 3. deque的介绍(了解) 3.1 deque的实现原理 3.2 deque的缺陷和使用场景 4. 优先级队列 priority_queue 4.1 priorit…

编码规范、Git分支整理

代码命名规范 包命名规范 采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名kl(为公司名称,可以简写),三级包名pos(根据应用进行命名),四级包名activity或…

芳禾数据CTO李明:数据分类分级与治理驱动下的应用革命丨数据猿专访

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 我们进入数字化时代,数据已经变得比任何时候都更加关键。每天,我们都在生成、处理和存储海量的数据,这些数据在企业决策、市场研究、产品开发等方面扮演着重要的角色。然而,数…

Qt编写精美输入法(历时十年迭代/可换肤/支持Qt4/5/6/win/linux/mac/嵌入式等)

一、前言 大概是从2012年就开始研究用Qt写输入法,因为项目需要,嵌入式板子上,没有对应的输入法,当初使用过很多NVR,里面也是鼠标按下弹出输入法面板进行输入,可以切换数字和字母及中文,于是借鉴…

5大趋势与10大应用场景!未来的智能工厂要这么建...

在经济下行压力、人口红利消失、消费结构升级、疫情冲击等多种因素推动下,制造企业加快转型步伐,工厂正向高效化、智能化、绿色化方向跃迁升级,不断涌现出技术创新、应用领先、成效显著的智能工厂。 近日,中国信息通信研究院发布…

常见的台账在线、可视化数据看板工具

目前已知和常见的一些在线可视化数据看板工具: Trello:Trello 是一种流行且直观的看板工具,可让创建看板、列表和卡片来管理任务和项目。它提供了一个可视化界面,可以在其中跨工作流程的不同阶段拖放卡片。还可以添加截止日期、标…

cesium调用celestrak接口获取卫星数据

celestrak是一家免费开源提供卫星空间数据的非营利性组织 接口调用 import axios from "axios";const BASE_URL "https://celestrak.org";function getTleDataFromExternal(path "") {let uri ${BASE_URL}/NORAD/elements/gp.php?GROUP${…

复习并发编程的基础知识之线程池

并发编程中,线程池是很重要的一块内容。 线程池是一种池化技术,线程池、字符串常量池和数据库链接池都属于池化技术。 使用线程池的好处: 1.提高了线程的利用率(想一想,我们不可能每打一个电话,就去买一部手…