基于yolov8的DMS驾驶员抽烟打电话喝水吃东西检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

news2024/9/20 23:11:57

【算法介绍】

基于YOLOv8的DMS(驾驶员监控系统)驾驶员抽烟、打电话、喝水、吃东西检测系统是一种利用先进计算机视觉技术的实时监测系统。该系统通过YOLOv8算法,一种在速度和准确性上均表现优异的实时目标检测算法,实现对驾驶员行为的实时监测。

该系统能够自动接收视频或图像输入,通过单次神经网络前向传播,即可快速准确地检测并识别出驾驶员是否在抽烟、打电话、喝水或吃东西等分心行为。这些检测不仅基于图像中的物体识别,还结合了人脸和手部的位置关系、嘴部区域特征等多维度信息,以提高检测的准确性。

为了训练这一系统,研究人员构建了包含大量标注图像的数据集,这些图像覆盖了各种驾驶环境下的分心行为实例。通过深度学习和优化,系统能够在复杂环境中稳定工作,为驾驶安全提供有力保障。

此外,该系统还具备实时预警功能,当检测到分心行为时,会立即通过声音、震动或视觉警告提醒驾驶员,有效降低因分心驾驶导致的事故风险。该系统在交通安全监控领域具有广泛应用前景,有望成为未来智能车辆不可或缺的一部分。

【效果展示】

 

【测试环境】

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

【模型可以检测出类别】

Sleepy
Cigarette
Drinking
Phone
microsleep
HandsOnWheel
Eating
HandsNotOnWheel
Seatbelt

【训练数据集】

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

【训练信息】

参数
训练集图片数5168
验证集图片数575
训练map91.3%
训练精度(Precision)90.8%
训练召回率(Recall)84.8%

验证集map信息

Class

Images

Instances

P

R

mAP50

mAP50-95

all

575

646

0.901

0.848

0.913

0.665

Sleepy

133

133

0.938

0.97

0.985

0.729

Cigarette

77

77

0.914

0.714

0.846

0.523

Drinking

164

164

0.809

0.799

0.818

0.519

Phone

10

10

0.75

0.5

0.75

0.513

microsleep

45

45

0.89

0.903

0.959

0.745

HandsOnWheel

24

24

1

0.951

0.979

0.74

Eating

54

54

0.98

0.963

0.993

0.776

HandsNotOnWheel

38

38

0.926

0.99

0.987

0.792

Seatbelt

100

101

0.9

0.842

0.898

0.649

【部分实现源码】

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/89771349

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

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

相关文章

Spring Controller

服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器,也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成,服务器整体架构如下: Server: Tomcat…

达梦数据库配置SSL通信加密

相关概念: SSL通过在发送方和接收方之间建立加密通道,确保数据在传输过程中的安全性和完整性。 SSL的关键特点 加密通信:SSL使用对称和非对称加密技术来加密数据,确保数据在传输过程中不被窃听或篡改。 身份验证:通…

若依VUE项目安全kind-of postcss vite漏洞扫描和修复

npm install unplugin-auto-import0.16.7 npm install vite3.2.11 升级vite、unplugin-auto-import npm install 报错New major version of npm available! 8.5.5 -> 10.8.3,使用命令npm install --force npm install --force

源代码防泄密的危害有哪些?担心源代码泄露?教你五种方法彻底阻止源代码泄密问题!

在数字经济蓬勃发展的今天,源代码,这个企业的核心技术资产,其安全性直接关系到企业的竞争力与生存。 一旦源代码泄露,不仅可能导致巨大的经济损失,更可能让企业陷入法律纠纷与声誉危机。 那么,源代码防泄密…

SOMEIP_ETS_117: SD_Entry_references_options_of_same_kind

测试目的: 验证DUT能够处理一个包含两种相同类型选项的SubscribeEventgroup消息,DUT可以选择拒绝订阅尝试或忽略该请求。 描述 本测试用例旨在确保DUT遵循SOME/IP协议,当接收到一个包含重复相同类型选项的SubscribeEventgroup消息时&#…

Gitlab学习(009 gitlab冲突提交)

尚硅谷2024最新Git企业实战教程,全方位学习git与gitlab 总时长 5:42:00 共40P 此文章包含第30p-第p34的内容 文章目录 冲突提交不同人修改不同文件不同人修改同文件的不同区域不同人修改同文件的相同区域 同时变更文件名和文件内容gitLab功能拓展code review代码复…

自动驾驶,被逼着上市?

上市了,然后呢? 转载:定焦(dingjiaoone)原创 作者 | 黎明 编辑 | 魏佳 很多人从来没体验过自动驾驶,但自动驾驶公司正在抢着上市。 今年以来,已有十多家自动驾驶相关公司启动上市流程。最新上…

halcon中的放射变换

放射变换原理 怎样计算放射变换 仿射变换affine是透视变换的子集 - 仿射矩阵 仿射变换矩阵为2*3的矩阵,第三列的元素起着平移的作用,前面两列的数字对角线上是缩放,其余为旋转或者斜切的作用 - 计算仿射矩阵只需要3对不共线的点 定义 指…

ozon买家网址是什么,跨境电商ozon买家网址

在网购的世界里,每一个平台都像是一座宝藏岛,等待着我们去探索、去发现。而提到跨境电商,不得不提的一个名字就是Ozon,它对于许多跨境购物爱好者来说,简直就是打开国际购物大门的金钥匙。那么,今天咱们就来…

米客方德SD NAND 掉电测试

SD NAND 异常上下电测试的作用 SD NAND 异常上下电测试是一项关键的测试步骤,对确保SD NAND在不同电源条件下的稳定性和可靠性至关重要。 通过模拟正常和异常电源情况,测试可以验证设备的电源管理功能、检测潜在错误和异常行为,并评估设备在…

巨人网络参展云栖大会,两款“游戏+AI”自研大模型应用首发

9月19日,2024云栖大会在杭州开幕,巨人网络携多项“游戏AI”新成果首次参展,两款自研大模型GiantGPT、BaiLing-TTS应用首发,巨人摹境、AI数字人等AI新技术亮相,全方位展示其作为中国“游戏AI”先行者在人工智能领域的前…

SAP付款和银行通信 预付款管理 集成场景

集成场景 用途 面向预付款管理的 SAP S/4HANA Cloud 提供与供给系统和转发系统的连接,以便输入和输出付款交易数据,作为其核心功能的一部分。 有关高级付款管理与外部供给系统和转发系统之间的通信的详细信息,请参阅文件处理器。 可以将预…

python基础(1)pyenv安装和对Django使用

pyenv安装 pyenv主要针对类 Unix 系统(如 Linux、macOS)用户,pyenv-win 是专为 Windows 开发的 pyenv 版本,允许您在不使用 WSL 的情况下管理多个 Python 版本和虚拟环境。 建议Git Bash: Powershell或Git Bash&…

如何使用ssm实现企业文档管理系统+vue

TOC ssm648企业文档管理系统vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。…

宠物空气净化器真的有必要买吗?哪款真的能吸毛?

这不是准备国庆小长假要来了吗,想带我家猫回家。但是我前一个月才告诉我妈我养了一只猫,她听到我养了猫之后,本来是没有任何波澜的,直到听到我说要把猫带回老家,还要和她一趟车回家的时候,她就开始骂我没良…

1.熟悉接口测试(Postman工具)

一、接口及其类型 API,应用编程接口,简称接口 通过接口,可以让程序和程序之间,能够互相交互。 接口分为两大类: 1)基于TCP全双工(适用于postman) 2)基于HTTP半双工 二、…

Flutter局域网广播(UDP通信)与TCP通信

前言 现在有一个需求,手机和ESP32通过WIFI进行通信。流程如下: 手机创建TCP服务器手机向192.168.0.255的1002端口广播自己的ip地址以及TCP服务器的端口号ESP32监听到1002的广播内容后,连接手机的TCP服务器。最后就是ESP32硬件和TCP服务器进…

C++速通LeetCode中等第2题-最长连续序列

方法一&#xff0c;排序后遍历&#xff0c;后减前1&#xff0c;计数&#xff0c; 相等跳过&#xff0c;后减前&#xff01;1就保存。 class Solution { public:int longestConsecutive(vector<int>& nums) {vector<int> ans;int count 1;sort(nums.begin(),n…

GPT代码记录

#include <iostream>// 基类模板 template<typename T> class Base { public:void func() {std::cout << "Base function" << std::endl;} };// 特化的子类 template<typename T> class Derived : public Base<T> { public:void…