基于yolov8的水面垃圾水面漂浮物检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】

基于YOLOv8的水面垃圾与漂浮物检测系统是一种高效、智能的监测解决方案。该系统利用YOLOv8这一前沿的深度学习模型,结合智能视频分析技术,对河道、湖泊等水面的垃圾漂浮物进行实时监测与识别。

YOLOv8作为YOLO系列的最新迭代,以其高准确度和实时检测能力著称。通过复杂的网络架构、优化的训练流程和强大的特征提取能力,YOLOv8能够在各种光照和水质条件下,准确识别包括生活垃圾、枯枝断木、水藻等在内的多种漂浮物。

该系统可以通过二次开发部署在河道或湖泊周边的监控摄像头,实现全天候、不间断的监测。一旦检测到水面有垃圾漂浮物,系统立即触发预警机制,并将抓拍到的图片或视频实时推送给后台管理人员,以便及时采取措施进行清理。

这种智能化的监测系统不仅大幅提升了河道治理的效率和效果,还显著降低了人工巡视的工作量。同时,它也促进了生态环境与水利环境的协调发展,为保障水质安全和水资源可持续利用提供了有力支持。

【效果展示】

【测试环境】

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

【模型可以检测出类别】

floating-trash

【训练信息】

参数
训练集图片数1827
验证集图片数128
训练map88.7%
训练精度(Precision)82.9%
训练召回率(Recall)83.8%

【训练数据集(数据集经过优化可能与下载数据集存在差异)】

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

【部分实现源码】

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

828华为云征文|华为云Flexus云服务器X实例部署Cockpit服务

828华为云征文|华为云Flexus云服务器X实例部署Cockpit笔记工具 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Cockpit介绍2.1 Cockpit简介2.2 Cockpit特点 三、本次实践介绍3.1 本次…

录屏软件电脑,精选5款录屏神器推荐

嘿,朋友们!想象一下,你正在与好友分享你最新的游戏成就,或是与同事展示你的最新项目进展,但却发现文字描述无法完美呈现你的精彩瞬间。别担心,在这个数字化的时代,我们有着无数种方式记录和分享…

计算机网络(一) —— 网络基础入门

目录 一,关于网络 二,协议 2.1 协议是什么,有什么用? 2.2 协议标准谁定的? 2.3 协议分层 2.4 OSI 七层模型 2.5 TCP/IP 四层模型 三,网络传输基本流程 3.1 局域网中两台主机通信* 3.2 报文的封装与…

Hadoop运行jps没有datanode节点【已解决】

1 原因: 格式化NameNode后,如果DataNode的clusterID与新的NameNode的clusterID不匹配,DataNode将无法加入集群,导致HDFS无法正常提供服务。 2 解决方式: 将新的NameNode的clusterID与DataNode的clusterID保持一致 &…

TCP/IP网络编程:Linux实现的web服务器

请求消息(Request Message) 的结构 这是客户端向服务端发送的请求消息的结构,Web服务器需要解析并响应客户端请求,从图中看出,请求信息包含请求行,消息头,消息体等三个部分,这里我们…

计算机网络 第1章 概述

文章目录 计算机网络概念计算机网络的组成计算机网络的功能三种数据交换技术电路交换(Circuit Switching)报文交换(message)分组交换 三种交换方式性能对比计算机网络的分类计算机网络的性能指标性能指标1:速率性能指标…

重磅!微信放开公众号注册限制!只要手机号,不用实名!

重磅!微信放开公众号注册限制!只要手机号,不用实名! 随着移动互联网的发展,微信公众号已经成为了许多个人与企业传递信息、分享内容的首选平台。就在近日,微信官方再次放出大招:公众号注册无需…

Seataf分布式事务的使用

一、事务的四大特征(面试题) 原子性:一个事务是不可分割的,要不都做,要不都不做一致性:事务必须是使数据库从一个一致性变成另一个一致性状态隔离性:一个事务的执行不被其他事务干扰&#xff0…

开放式耳机对耳朵伤害大吗?开放式耳机值不值得购买?

开放式耳机对耳朵的伤害相对较小。这是因为开放式耳机通常不需要将耳塞插入耳道,因此不会对耳道造成物理压力,也不会因为耳塞堵塞耳道而增加耳内压力,减少了使用耳机时可能对耳膜和耳道造成的损伤风险。同时,由于开放式耳机不会完…

前端请求的路径baseURL怎么来的 ?nodejs解决cors问题的一种方法

背景:后端使用node.js搭建,用的是express 前端请求的路径baseURL怎么来的 ? 前后端都在同一台电脑上运行,后端的域名就是localhost,如果使用的是http协议,后端监听的端口号为3000,那么前端请求…

欧科云链OKLink受邀参与WebX ,旗下EaaS助力项目方“弯道超车”

8 月 27 日,作为亚洲顶级区块链行业盛会 WebX 的 side event 之一的 OKJ Night 在东京盛大拉开帷幕,会上正式宣布 OKCoin Japan 升级为 OKJ,进一步以合规的形式推动区块链产业在日蓬勃发展。日本首相为本次活动发来贺电。 OKLink 非常荣幸作为…

Java学习中如何分辨 = 和 == 及其使用方法

在学习Java编程语言时, 和 是两个非常基础的运算符,虽然它们看起来相似,但在语义和应用场景上却有明显的区别。理解并正确使用这两个符号对于编写正确且高效的Java代码至关重要。 1. 运算符:赋值运算符 在Java中是赋值运算符&a…

网恋照妖镜源码搭建教程

文章目录 前言创建网站1.打开网站设置 配置ssl2.要打开强制HTTPS,用宝塔免费的ssl证书即可,也可以使用其他证书,必须是与域名匹配的3.上传文件至根目录进行解压4.解压后,修改文件 sc.php 里面的内容5.其余探索 前言 前俩年很火的…

编写Dockerfile第二版

目标 更快的构建速度 更小的Docker镜像大小 更少的Docker镜像层 充分利用镜像缓存 增加Dockerfile可读性 让Docker容器使用起来更简单 总结 编写.dockerignore文件 容器只运行单个应用 将多个RUN指令合并为一个 基础镜像的标签不要用latest 每个RUN指令后删除多余文…

JAVA毕业设计167—基于Java+Springboot+vue3+小程序的物业管理系统小程序(源代码+数据库+万字论文+文献综述)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的物业管理系统小程序(源代码数据库万字论文文献综述)167 一、系统介绍 本项目前后端分离带小程序(可以改为ssm版本),分为用户、管理员两…

8千多古诗词唐诗宋词鉴赏ACCESS\EXCEL数据

虽然已经有很多诗词类的数据库,最近又再次找了一下古诗词类的数据,又发现了一些,可是真的是各有各的优点,各有各的特色,之后不再重找诗词类的数据了。 今天这个诗词鉴赏数据也不错,有分类TAG,也…

在 Ubuntu 环境下使用 VSCode 和 PlatformIO 下载程序到 Arduino Uno

安装 VSCode 访问 VSCode 官网 下载 .deb 包使用以下命令安装&#xff1a;sudo dpkg -i <下载的文件名>.deb sudo apt-get install -f安装 PlatformIO 扩展 在 VSCode 中&#xff0c;转到扩展市场&#xff08;CtrlShiftX&#xff09;搜索 “PlatformIO IDE”点击 “安装”…

Meta:大语言模型可以通过自我批判取得大幅提升!

夕小瑶科技说 原创 作者 | 谢年年 论文的审稿模式想必大家都不会陌生&#xff0c;一篇论文除了分配多个评审&#xff0c;最后还将由PC综合评估各位审稿人的reviews撰写meta-review。 最近&#xff0c;来自Meta的研究团队将这一模式引进到大模型的对齐训练中。模型同时扮演 执…

springboot名著阅读网站

基于 springbootvue实现的名著阅读网站&#xff08;源码L文ppt&#xff09;4-035 4 系统设计 4.1 系统概述 名著阅读网站的设计与开发是指对该系统的各个功能模块进行详细设计&#xff0c;力求每个模块都能够满足用户的要求&#xff0c;系统开发完成后还需对系统进行单元…

如何搭建RGBD GS-ICP SLAM环境以及如何与自己编的pcl并存

0. 简介 最近深度学习SLAM又出来一个分支&#xff0c;3D gaussion splatting做slam的操作&#xff0c;之前我们给读者讲过如何使用C做3D高斯溅射。这里最近受到优刻得的使用邀请&#xff0c;正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的Compshare的…