基于yolov8的驾驶员行为检测疲劳检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

news2024/9/23 3:22:33

【算法介绍】

基于YOLOv8的驾驶员行为检测疲劳检测系统是一种创新的驾驶安全解决方案。该系统利用YOLOv8这一先进的目标检测算法,结合驾驶员疲劳驾驶数据集,能够实时、准确地监测并分析驾驶员的面部表情和行为模式,从而快速识别疲劳状态。

YOLOv8以其高效性和准确性在多个领域得到了广泛应用。在驾驶员行为检测中,它能够捕捉并分析眨眼频率、打哈欠次数及头部姿态等疲劳特征,一旦检测到疲劳迹象,系统便会立即发出预警,有效预防因疲劳驾驶引发的交通事故。

该系统不仅具备强大的实时检测能力,还具备高环境适应性,能在不同光照条件下保持稳定的检测效果。同时,用户界面友好,易于与车辆现有监控系统集成,实现无缝的疲劳监测。此外,该系统还能辅助智能驾驶,集成于智能驾驶系统中时,能在检测到疲劳迹象时自动提醒或采取安全措施,进一步保障驾驶安全。

总的来说,基于YOLOv8的驾驶员行为检测疲劳检测系统是提升道路安全、优化车队运营的重要工具,具有广泛的应用前景。

【效果展示】

【测试环境】

windows10
anaconda3+python3.8
torch==1.9.0+cu111
ultralytics==8.2.70

【模型可以检测出类别】

drowsy
phone
seatbelt
smoking
yawning

【训练信息】

参数
训练集图片数6930
验证集图片数2027
训练map96.0%
训练精度(Precision)94.8%
训练召回率(Recall)94.7%

【相关数据集】

https://blog.csdn.net/FL1623863129/article/details/139321726

【部分实现源码】

class Ui_MainWindow(QtWidgets.QMainWindow):
    signal = QtCore.pyqtSignal(str, str)
 
    def setupUi(self):
        self.setObjectName("MainWindow")
        self.resize(1280, 728)
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
 
        self.weights_dir = './weights'
 
        self.picture = QtWidgets.QLabel(self.centralwidget)
        self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))
        self.picture.setStyleSheet("background:black")
        self.picture.setObjectName("picture")
        self.picture.setScaledContents(True)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 10, 81, 21))
        self.label_2.setObjectName("label_2")
        self.cb_weights = QtWidgets.QComboBox(self.centralwidget)
        self.cb_weights.setGeometry(QtCore.QRect(10, 40, 241, 21))
        self.cb_weights.setObjectName("cb_weights")
        self.cb_weights.currentIndexChanged.connect(self.cb_weights_changed)
 
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 70, 72, 21))
        self.label_3.setObjectName("label_3")
        self.hs_conf = QtWidgets.QSlider(self.centralwidget)
        self.hs_conf.setGeometry(QtCore.QRect(10, 100, 181, 22))
        self.hs_conf.setProperty("value", 25)
        self.hs_conf.setOrientation(QtCore.Qt.Horizontal)
        self.hs_conf.setObjectName("hs_conf")
        self.hs_conf.valueChanged.connect(self.conf_change)
        self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.dsb_conf.setGeometry(QtCore.QRect(200, 100, 51, 22))
        self.dsb_conf.setMaximum(1.0)
        self.dsb_conf.setSingleStep(0.01)
        self.dsb_conf.setProperty("value", 0.25)
        self.dsb_conf.setObjectName("dsb_conf")
        self.dsb_conf.valueChanged.connect(self.dsb_conf_change)
        self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.dsb_iou.setGeometry(QtCore.QRect(200, 160, 51, 22))
        self.dsb_iou.setMaximum(1.0)
        self.dsb_iou.setSingleStep(0.01)
        self.dsb_iou.setProperty("value", 0.45)
        self.dsb_iou.setObjectName("dsb_iou")
        self.dsb_iou.valueChanged.connect(self.dsb_iou_change)
        self.hs_iou = QtWidgets.QSlider(self.centralwidget)
        self.hs_iou.setGeometry(QtCore.QRect(10, 160, 181, 22))
        self.hs_iou.setProperty("value", 45)
        self.hs_iou.setOrientation(QtCore.Qt.Horizontal)
        self.hs_iou.setObjectName("hs_iou")
        self.hs_iou.valueChanged.connect(self.iou_change)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 130, 72, 21))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 210, 72, 21))
        self.label_5.setObjectName("label_5")
        self.le_res = QtWidgets.QTextEdit(self.centralwidget)
        self.le_res.setGeometry(QtCore.QRect(10, 240, 241, 400))
        self.le_res.setObjectName("le_res")
        self.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 30))
        self.menubar.setObjectName("menubar")
        self.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.toolBar = QtWidgets.QToolBar(self)
        self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        self.toolBar.setObjectName("toolBar")
        self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        self.actionopenpic = QtWidgets.QAction(self)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/images/1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionopenpic.setIcon(icon)
        self.actionopenpic.setObjectName("actionopenpic")
        self.actionopenpic.triggered.connect(self.open_image)
        self.action = QtWidgets.QAction(self)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/images/2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.action.setIcon(icon1)
        self.action.setObjectName("action")
        self.action.triggered.connect(self.open_video)
        self.action_2 = QtWidgets.QAction(self)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/images/3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.action_2.setIcon(icon2)
        self.action_2.setObjectName("action_2")
        self.action_2.triggered.connect(self.open_camera)
 
        self.actionexit = QtWidgets.QAction(self)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/images/4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionexit.setIcon(icon3)
        self.actionexit.setObjectName("actionexit")
        self.actionexit.triggered.connect(self.exit)
 
        self.toolBar.addAction(self.actionopenpic)
        self.toolBar.addAction(self.action)
        self.toolBar.addAction(self.action_2)
        self.toolBar.addAction(self.actionexit)
 
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
        self.init_all()

【使用步骤】

使用步骤:
(1)首先根据官方框架https://github.com/ultralytics/ultralytics安装教程安装好yolov8环境,并安装好pyqt5
(2)切换到自己安装的yolov8环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可

【提供文件】

python源码
yolov8n.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)

【源码下载地址】

https://download.csdn.net/download/FL1623863129/89700616

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

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

相关文章

关于分布式数据库缓存设计的那点事和实践

目录 案例 【题目】 【问题 1】(9 分) 【问题 2】(8 分) 【问题 3】(8 分) 【答案】 【问题 1】答案 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于分布式数据库缓存设计的叙述,在答题纸上回答问题 1 至问题 3。 【题目】 某企业是为城市高…

【网络协议】精讲OSI七层模型、TCP/IP四层、五层模型区别!图解超赞超详细!!!

目录 1. OSI与TCP/IP模型的网络协议层次结构差异 1.1 OSI模型的七层结构 1.2 TCP/IP模型的四层结构 1.3 TCP/IP模型的五层结构 2. OSI七层模型和TCP/IP协议模型的区别 2.1 区别总结: 3. 网络协议分层的优点 1. OSI与TCP/IP模型的网络协议层次结构差异 协议分…

拥抱开源拥护国产|暴雨打造最强AI的服务器操作系统!

8月30日,主题为“进化重构赴未来”的2024龙蜥操作系统大会(OpenAnolis Conference)在北京举办。龙蜥社区作为国内领先的开源操作系统根社区,推出的Anolis OS及衍生版装机量已突破800万套,实现了从开源到商业化的良性循环发展。 2024 龙蜥操作…

【惊天BUG】select * from 表 where value = 0;查询结果让大师兄都傻眼了

前言 🍊缘由 线上问题把我坑,一查数据让我蒙 🐣闪亮主角 大家好,我是JavaDog程序狗 今天跟大家分享一个本狗造成的线上事故, 一个简单的SQL查询语句导致的bug 😈你想听的故事 最近狗哥有点飘&#xf…

MCU1.51单片机介绍

1.单片机(MCU 全称 Mirco Controller Unit 意为微小控制器的集合) 相当于一台迷你电脑(集成了很多硬件) 2.作用 传感(采集信息),处理(CPU Central Processing Unit 中央处理器&am…

智能的瓶颈在于事物表征的弥散与聚合性(弥聚性)

动态“弥散与聚合性”(弥聚性)是智能系统面临的一个重要挑战。这个概念涉及如何在处理信息时平衡广度和深度,以及如何有效地表征和组织知识。 (1)弥散性 弥散性指的是信息或知识的分散性和多样性。智能系统需要处理来自…

非对称RAID破解SSD异构存储难题

上一篇文章(Kioxia的NVMe RAID卸载有何亮点?)介绍了NVMe RAID卸载方案内容。本文我们结合一篇学术论文,学习一下新的非对称RAID架构~ 随着大数据时代的到来,全闪存阵列(All-Flash Arrays, AFAs&…

校园一卡通|基于SprinBoot+vue的校园一卡通系统(源码+数据库+文档)

校园一卡通系统 基于SprinBootvue的校园一卡通系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员功能实现 学生功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍…

linux驱动 -- PWM配置和SysFs操作方法

1:PWM介绍 PWM的定义为:可调节脉冲调节器,换句话来说就是一个总周期不变,占空比可调节的方波。 2:PWM的总周期和占空比、有效点平 方波:在信号领域一般分为数字信号和模拟信号,数字信号就两种状态&#…

UML类图中的依赖,继承,和实现关系

依赖关系 依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关系。在代码中,某个类通过局部变量,方法的参数或者对静态方法的调用来访问另外一个类的方法。 依赖关系通过带箭头的虚线表示,箭头从使用类指向被依赖的类 继承关…

中仕公考怎么样?函授大专可以考公吗?

函授大专学历,作为成人高等教育的一种形式,是被认证的,所以在绝大多数情况下,持有函授大专学历的个人符合公务员及事业单位岗位的报考资格。只有招聘公告中明确要求考生必须持有全日制或统招学历时,才不符合条件。 在…

【STM32开发指南】STM32最小系统板详解

【前言】 在单片机项目开发中,STM32系列微控制器因其高性能、低功耗和丰富的外设资源而备受青睐。其中,STM32最小系统板作为STMicroelectronics STM32系列微控制器的基础硬件平台,不仅简化了硬件设计,还极大地促进了软件开发的便…

用ChatGPT提升论文质量:改进语法、用词和行文的有效方法

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在学术写作中,语法、用词和行文的质量直接影响论文的可读性和学术价值。今天我们将介绍如何利用ChatGPT优化论文的语法结构、改进用词精准度以及提升行文流畅性。帮助写作者…

多线程篇(锁相关类- StampedLock(改进的读写锁)(JDK8新增))(持续更新迭代)

目录 一、前言 二、StampedLock提供的三种读写模式的锁分别如下 写锁writeLock 悲观读锁 readLock 乐观读锁 tryOptimisticRead 三、StampedLock支持这三种锁在一定条件下进行相互转换 四、案例介绍 五、知识小结 一、前言 StampedLock 是并发包里面 JDK8 版本新增的一…

线性代数 第二讲 矩阵_逆矩阵_伴随矩阵_分块矩阵_初等矩阵_矩阵的秩

矩阵 文章目录 矩阵1.矩阵的定义2.矩阵的运算法则3.特殊矩阵3.1 伴随矩阵3.2 可逆矩阵3.2.1 定义3.2.2 可逆矩阵的一些定理3.2.3 可逆矩阵公式与转置矩阵公式3.2.4 求逆矩阵 3.3 分块矩阵3.3.1 分块矩阵的运算3.3.2 分块矩阵的初等行变换(超纲内容但要了解&#xff…

YOLOv9输出模型每一层的耗时和GFLOPs

在做一些比较实验中,如何更精确的查看和对比我们的改进模块时候有效,是否有提升,特别是在模型轻量化时,这时候我们就可以打印改进模型每一层的耗时和GFLOPS来比较不同模块的占用量。在YOLOv9中,打印模型每一层的耗时和…

食堂线上预约点餐系统小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,菜品分类管理,菜品管理,关于我们管理,意见反馈,系统管理 微信端账号功能包括:系统首页,菜品,购…

TPH-YOLOv5:基于Transformer预测头的改进YOLOv5,用于无人机捕获场景的目标检测

摘要 提出了TPH-YOLOv5。在YOLOv5的基础上,增加了一个预测头来检测不同尺度的目标。然后用Transformer Prediction Heads(TPH)代替原有的预测头,探索自注意机制的预测潜力。还集成了卷积块注意力模型(CBAM)…

2D 智慧水务厂:引领水资源数字化管理

图扑 2D 智慧水务厂通过数字监控和数据分析,实现高效水资源管理与优化,显著提升运营效率。

【开发心得】筑梦上海:项目风云录(2)

特别声明 这个长篇终于开了头,工作的节奏也不能耽搁,暂时也不知道何时才能收尾。人生漫漫,即使没有雷军们的成功,但是也有自己的一些小确幸。 特别声明一下,虽然这个长篇是基于真实经历,但其中有些内容纯…