基于深度学习YOLOv8+PyQt5的水底海底垃圾生物探测器检测识别系统(源码+数据集+配置说明)

news/2024/4/27 11:33:31/文章来源:https://blog.csdn.net/m0_46653805/article/details/136975955

wx供重浩:创享日记
对话框发送:323海底
获取完整源码+7000张数据集+配置说明+文件说明+远程操作配置环境跑通程序


效果展示

基于深度学习YOLOv8+PyQt5的水底海底垃圾生物探测器检测识别系统设计(源码+数据集+配置文件)

在这里插入图片描述
在这里插入图片描述


各文件说明

在这里插入图片描述


程序运行说明

---------【第一步:安装python3.9】---------
方法一【推荐】:
先安装ananconda软件,官网地址:https://www.anaconda.com/download
安装完成后,在conda命令窗口,使用命令"conda create -n yolov8 python=3.9"创建3.9的虚拟环境
然后激活虚拟环境“conda activate py39”,然后再进行第二步依赖库的安装。
方法二:
直接在python官网下载pyhon3.9的exe文件,安装即可。

---------【第二步:安装软件所需的依赖库】---------
(注意:输入命令前,命令行需先进入项目目录的路径下,不然会提示找不到文件)
方法一:【推荐】
直接运行installPackages.py一键安装第三方库的脚本。命令为:python installPackages.py
方法二: 运行下方命令
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

---------【运行程序】---------
按照以上两步环境配置完成后,直接运行MainProgram.py文件即可打开程序。
命令为:python MainProgram.py


模型评价指标

mAP (mean Average Precision): 平均精度均值是目标检测领域中最常用的评价指标之一。它衡量的是模型在不同IoU(Intersection over Union,交集与并集的比值)阈值下的性能。mAP通常在0到1之间,值越高表示模型性能越好。mAP50-95是一个更严格的评价指标,它计算了在50-95%的IoU阈值范围内的mAP值,然后取平均,这能够更准确地评估模型在不同IoU阈值下的性能。

Precision (精度): 精度是评估模型预测正确的正样本的比例。它表示在所有被模型预测为正类的样本中,实际为正类的比例。

Recall (召回率): 召回率是评估模型对真实目标检测率的指标。它表示模型正确预测出的目标数量与真实目标数量的比例。

F1 Score (F1分数): F1分数综合了精度和召回率两个指标,用于评估模型的综合性能。它是精确率和召回率的调和平均值,适用于在不平衡类别分布的情况下评估模型性能。

IoU (Intersection over Union): 交集大于联合是量化预测边界框与地面实况边界框之间重叠程度的指标。IoU的值介于0和1之间,值越高表示预测边界框与实际边界框的重叠程度越高。

FPS (Frames Per Second): 每秒帧数是衡量模型实时性能的指标,特别是在视频处理或实时应用中。FPS越高,表示模型处理速度越快。

这些指标共同提供了对YOLO模型性能的全面评估,包括模型的准确性、效率和实用性。在实际应用中,根据具体需求和场景,可能会重点考虑某些指标。例如,在需要高实时性的应用中,FPS可能是一个关键指标;而在对准确性要求极高的场景中,mAP和精度可能是更重要的评价标准。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在海洋环境保护和水下生态研究领域,及时发现并处理水底生物垃圾是维护水下生态环境健康的重要任务。然而,由于水下环境的复杂性和多变性,传统的人工监测方法既耗时又效率低下。为了提高水下生物垃圾监测的效率和准确性,本文提出了一种基于YOLOv8(You Only Look Once version 8)和PyQt5的水底生物垃圾探测器检测系统。该系统结合了深度学习技术和图形用户界面框架,旨在实时监测并识别水下环境中的生物垃圾。

水底生物垃圾探测器检测系统的设计和实现如下:

系统设计
数据集准备
首先,需要收集和标注一个包含各种水下环境和生物垃圾的图像数据集。数据集应涵盖不同类型的生物垃圾,如塑料、渔网、玻璃瓶等,以及它们在不同水质、光照和深度条件下的外观。图像标注需要精确识别出生物垃圾的位置和类别,以便训练模型进行有效识别。

模型训练
利用准备好的数据集,对YOLOv8模型进行训练。在训练过程中,需要调整超参数,如学习率、批大小和训练周期,以优化模型在水下环境中的检测性能。同时,采用数据增强技术,如随机调整亮度、对比度和水波纹模拟,以提高模型对水下复杂环境的适应性。

系统实现
系统核心是YOLOv8模型,负责从水下摄像头捕获的实时图像中检测生物垃圾。系统还包括一个基于PyQt5的用户界面,用于展示检测结果和发出警报。当检测到生物垃圾时,系统会通过声音或视觉信号通知研究人员或清洁人员。

实时检测
为了实现实时监测,系统必须能够在低延迟下处理图像数据。这意味着模型不仅要准确,还要具备高效的推理能力。在实际部署时,可能需要在专用的水下无人机或自动化监测设备上运行模型,以实现自主监测和快速响应。

结果与讨论
在测试集上,YOLOv8模型显示出了较高的水底生物垃圾检测准确率。模型能够在多种水下环境和光照条件下稳定识别不同类型的生物垃圾。尽管如此,在处理水下生物垃圾被水流移动或与其他物体混合的情况下,模型的性能仍有待提高。

结论
本文提出的基于YOLOv8和PyQt5的水底生物垃圾探测器检测系统,能够有效地提升水下环境监测的自动化水平。通过实时监测和即时反馈,该系统有助于及时发现并处理水底生物垃圾,保护海洋生态环境。未来的工作将致力于进一步提升模型的鲁棒性,并探索更加高效的模型部署方案,以适应更多样化的水下环境。


部分PyQt5可视化代码

# -*- coding: utf-8 -*-
import time
from PyQt5.QtWidgets import QApplication , QMainWindow, QFileDialog, \QMessageBox,QWidget,QHeaderView,QTableWidgetItem, QAbstractItemView
import sys
import os
from PIL import ImageFont
from ultralytics import YOLO
sys.path.append('UIProgram')
from UIProgram.UiMain import Ui_MainWindow
import sys
from PyQt5.QtCore import QTimer, Qt, QThread, pyqtSignal,QCoreApplication
import detect_tools as tools
import cv2
import Config
from UIProgram.QssLoader import QSSLoader
from UIProgram.precess_bar import ProgressBar
import numpy as np
# import torchclass MainWindow(QMainWindow):def __init__(self, parent=None):super(QMainWindow, self).__init__(parent)self.ui = Ui_MainWindow()self.ui.setupUi(self)self.initMain()self.signalconnect()# 加载css渲染效果style_file = 'UIProgram/style.css'qssStyleSheet = QSSLoader.read_qss_file(style_file)self.setStyleSheet(qssStyleSheet)def signalconnect(self):self.ui.PicBtn.clicked.connect(self.open_img)self.ui.comboBox.activated.connect(self.combox_change)self.ui.VideoBtn.clicked.connect(self.vedio_show)self.ui.CapBtn.clicked.connect(self.camera_show)self.ui.SaveBtn.clicked.connect(self.save_detect_video)self.ui.ExitBtn.clicked.connect(QCoreApplication.quit)self.ui.FilesBtn.clicked.connect(self.detact_batch_imgs)def initMain(self):self.show_width = 770self.show_height = 480self.org_path = Noneself.is_camera_open = Falseself.cap = None# self.device = 0 if torch.cuda.is_available() else 'cpu'# 加载检测模型self.model = YOLO(Config.model_path, task='detect')self.model(np.zeros((48, 48, 3)))  #预先加载推理模型self.fontC = ImageFont.truetype("Font/platech.ttf", 25, 0)# 用于绘制不同颜色矩形框self.colors = tools.Colors()# 更新视频图像self.timer_camera = QTimer()# 更新检测信息表格# self.timer_info = QTimer()# 保存视频self.timer_save_video = QTimer()# 表格self.ui.tableWidget.verticalHeader().setSectionResizeMode(QHeaderView.Fixed)self.ui.tableWidget.verticalHeader().setDefaultSectionSize(40)self.ui.tableWidget.setColumnWidth(0, 80)  # 设置列宽self.ui.tableWidget.setColumnWidth(1, 200)self.ui.tableWidget.setColumnWidth(2, 150)self.ui.tableWidget.setColumnWidth(3, 90)self.ui.tableWidget.setColumnWidth(4, 230)# self.ui.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)  # 表格铺满# self.ui.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.Interactive)# self.ui.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 设置表格不可编辑self.ui.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)  # 设置表格整行选中self.ui.tableWidget.verticalHeader().setVisible(False)  # 隐藏列标题self.ui.tableWidget.setAlternatingRowColors(True)  # 表格背景交替# 设置主页背景图片border-image: url(:/icons/ui_imgs/icons/camera.png)# self.setStyleSheet("#MainWindow{background-image:url(:/bgs/ui_imgs/bg3.jpg)}")def open_img(self):if self.cap:# 打开图片前关闭摄像头self.video_stop()self.is_camera_open = Falseself.ui.CaplineEdit.setText('摄像头未开启')self.cap = None# 弹出的窗口名称:'打开图片'# 默认打开的目录:'./'# 只能打开.jpg与.gif结尾的图片文件# file_path, _ = QFileDialog.getOpenFileName(self.ui.centralwidget, '打开图片', './', "Image files (*.jpg *.gif)")file_path, _ = QFileDialog.getOpenFileName(None, '打开图片', './', "Image files (*.jpg *.jepg *.png)")if not file_path:returnself.ui.comboBox.setDisabled(False)self.org_path = file_pathself.org_img = tools.img_cvread(self.org_path)# 目标检测t1 = time.time()self.results = self.model(self.org_path)[0]t2 = time.time()take_time_str = '{:.3f} s'.format(t2 - t1)self.ui.time_lb.setText(take_time_str)location_list = self.results.boxes.xyxy.tolist()self.location_list = [list(map(int, e)) for e in location_list]cls_list = self.results.boxes.cls.tolist()self.cls_list = [int(i) for i in cls_list]self.conf_list = self.results.boxes.conf.tolist()self.conf_list = ['%.2f %%' % (each*100) for each in self.conf_list]# now_img = self.cv_img.copy()# for loacation, type_id, conf in zip(self.location_list, self.cls_list, self.conf_list):#     type_id = int(type_id)#     color = self.colors(int(type_id), True)#     # cv2.rectangle(now_img, (int(x1), int(y1)), (int(x2), int(y2)), colors(int(type_id), True), 3)#     now_img = tools.drawRectBox(now_img, loacation, Config.CH_names[type_id], self.fontC, color)now_img = self.results.plot()self.draw_img = now_img# 获取缩放后的图片尺寸self.img_width, self.img_height = self.get_resize_size(now_img)resize_cvimg = cv2.resize(now_img,(self.img_width, self.img_height))pix_img = tools.cvimg_to_qpiximg(resize_cvimg)self.ui.label_show.setPixmap(pix_img)self.ui.label_show.setAlignment(Qt.AlignCenter)# 设置路径显示self.ui.PiclineEdit.setText(self.org_path)# 目标数目target_nums = len(self.cls_list)self.ui.label_nums.setText(str(target_nums))# 设置目标选择下拉框choose_list = ['全部']target_names = [Config.names[id]+ '_'+ str(index) for index,id in enumerate(self.cls_list)]# object_list = sorted(set(self.cls_list))# for each in object_list:#     choose_list.append(Config.CH_names[each])choose_list = choose_list + target_namesself.ui.comboBox.clear()self.ui.comboBox.addItems(choose_list)if target_nums >= 1:self.ui.type_lb.setText(Config.CH_names[self.cls_list[0]])self.ui.label_conf.setText(str(self.conf_list[0]))#   默认显示第一个目标框坐标#   设置坐标位置值self.ui.label_xmin.setText(str(self.location_list[0][0]))self.ui.label_ymin.setText(str(self.location_list[0][1]))self.ui.label_xmax.setText(str(self.location_list[0][2]))self.ui.label_ymax.setText(str(self.location_list[0][3]))else:self.ui.type_lb.setText('')self.ui.label_conf.setText('')self.ui.label_xmin.setText('')self.ui.label_ymin.setText('')self.ui.label_xmax.setText('')self.ui.label_ymax.setText('')# # 删除表格所有行self.ui.tableWidget.setRowCount(0)self.ui.tableWidget.clearContents()self.tabel_info_show(self.location_list, self.cls_list, self.conf_list,path=self.org_path)if __name__ == "__main__":app = QApplication(sys.argv)win = MainWindow()win.show()sys.exit(app.exec_())

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

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

相关文章

申请免费域名证书

目录 背景: 域名证书是什么: 域名证书有哪些: 部署域名证书有什么用: 免费的域名证书在哪里申请: 背景: 域名是一个IP地址上的“面具” 。一个域名的目的是便于记忆和沟通的一组服务器的地址(网站&…

分页功能制作

使用HTML,css,js和json假数据制作分页功能。 以下为分页功能结构,下面可以点击上一页,下一页及数字,还可以自己输入想要跳转的页面点击跳转。下面每页显示的内容也会跟着改变。还可以选择不同的每页显示数据的条数。默…

python数据实时传给unity工程并绘制出来

python # 服务器端代码 import socket import random import struct import time# 创建一个服务器Socket server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 监听的地址和端口 host 127.0.0.1 port 12345# 绑定地址和端口 server_socket.bind((host, port…

C语言中常用的文件操作

本文将介绍常用的关于文件操作函数,如fopen,fclose,fread,fwrite,feek,ftell,rewind以及feof和ferror等文件操作操作函数,还介绍一些用于所有输入输出流的函数如fgetc,fputc,fgets,fputs,fprintf,fscanf等函数,还介绍了sscanf,sprintf函数,fe…

主流电商平台淘宝/1688/京东电商数据实时采集监测|电商API接口接入

电商大数据平台基于网络主流电商平台淘宝/1688/京东电商数据进行搭建,全面监测了包含淘宝、京东、苏宁、美团、大众点评等共计100余个主流电商交易平台,并凭借多年的电子商务数据分析挖掘经验积累形成的电商数据清洗体系和挖掘模型,能高效完成…

DashVector - 阿里云向量检索服务

DashVector 文章目录 DashVector一、关于 DashVector二、使用 DashVector 前提准备1、创建Cluster:2、获得API-KEY3、安装最新版SDK 三、快速使用 DashVector1. 创建Client2. 创建Collection3、插入Doc4、相似性检索5、删除Doc6. 查看Collection统计信息7. 删除Coll…

Flask 与小程序 的图片数据交互 过程及探讨研究学习

今天不知道怎么的&#xff0c;之前拿编程浪子地作品抄过来粘上用好好的&#xff0c;昨天开始照片突的就不显示了。 今天不妨再耐味地细细探究一下微信小程序wxml 和flask服务器端是怎么jpg图片数据交互的。 mina/pages/food/index.wxml <!--index.wxml--> <!--1px …

Python程序设计 循环结构(二)

1.斐波那契数列 编写一个能计算斐波那契数列中第x个数的小程序。斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列、 因数学家莱昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为…

日本EPSON 爱普生HUD汽车抬头显示系统芯片

目前HUD产品在新车上的配装率逐年上升&#xff0c;预计在2025年将达到30%。那么在介绍爱普生HUD整合方案之前&#xff0c;让我们先了解一下什么叫HUD。 HUD&#xff08;Head Up Display&#xff09;中文叫抬头显示系统&#xff0c;又被叫做平行显示系统。早被应用在飞机辅助…

Linux系统——硬件命令

目录 一.网卡带宽 1.查看网卡速率——ethtool 网卡名 2.查看mac地址——ethtool -P 网卡名 二、内存相关 1.显示系统中内存使用情况——free -h 2.显示内存模块的详细信息——dmidecode -t memory 三、CPU相关 1.查看CPU架构信息——lscpu 2.性能模式 四、其他硬件命…

C语言例4-37:输出10~100的全部素数

素数是指除1和它本身之外不能被其他任何整数整除。 自己思考的基础代码如下&#xff1a; //输出10~100的全部素数 //素数是指除1和它本身之外不能被其他任何整数整除 //自己思考的基础代码 #include<stdio.h> int main(void) {int n10,i2,m,counter0; // n10~100;for(n…

如何用Flask中的Blueprints构建大型Web应用

本文分享自华为云社区《构建大型Web应用Flask中的Blueprints指南》&#xff0c;作者&#xff1a; 柠檬味拥抱。 什么是Blueprints&#xff1f; 什么是Blueprints&#xff1f; Blueprints是Flask中的一种模式&#xff0c;用于将应用程序分解为可重用的模块。每个蓝图实际上是…

IDEA | 资源文件中文乱码问题解决

问题 IDEA打开资源文件&#xff0c;显示乱码问题。 解决方案 1、电脑是mac&#xff0c;点击IDEA->【Preferences】->【Editor】->【File Encodings】 2、选择【Properties Files】中的UTF-8&#xff0c;并勾选Transparent native-to-ascii conversion。 3、最后点击…

蓝桥杯算法赛(二进制王国)

问题描述 二进制王国是一个非常特殊的国家&#xff0c;因为该国家的居民仅由 0 和 1 组成。 在这个国家中&#xff0c;每个家庭都可以用一个由 0 和 1 组成的字符串 S 来表示&#xff0c;例如 101、 000、 111 等。 现在&#xff0c;国王选了出 N 户家庭参加邻国的庆典…

Karmada 管理有状态应用 Xline 的早期探索与实践

背景与动机 目前随着云原生技术和云市场的不断成熟&#xff0c;越来越多的 IT 厂商开始投入到跨云多集群的怀抱当中。以下是 flexera 在 2023 年中关于云原生市场对多云多集群管理的接受程度的调查报告&#xff08;http://info.flexera.com&#xff09; 从 flexera 的报告中可…

python_1

要求&#xff1a; 代码&#xff1a; # 先将分钟数转化成年数&#xff0c;再将余数做为天数 minute float(input("请输入分钟数&#xff1a;")) year_1 (minute / 60 / 24) // 365 day_1 (minute / 60 / 24) % 365 now f"{minute}分钟{year_1}年{day_1}天&q…

Polkadot、Kusama 和六大领先平行链现已上线 Dune 数据分析平台!

3 月 19 日对于波卡社区来说是一个关键性的时刻&#xff0c;因为 Polkadot 数据首次在领先的区块链数据开源分析平台 Dune 上可以被访问和使用。这是 Colorful Notion 和 Dune 之间战略合作的结果&#xff0c;这次的合作与集成将使 Polkadot 生态系统的可见性大幅增强&#xff…

力扣面试150 阶乘后的零 数论 找规律 质因数

Problem: 172. 阶乘后的零 思路 &#x1f468;‍&#x1f3eb; 大佬神解 一个数末尾有多少个 0 &#xff0c;取决于这个数 有多少个因子 10而 10 可以分解出质因子 2 和 5而在阶乘种&#xff0c;2 的倍数会比 5 的倍数多&#xff0c;换而言之&#xff0c;每一个 5 都会找到一…

HTML 常用标签总结

本篇文章总结了一些我在学习html时所记录的标签&#xff0c;虽然总结并不是非常全面&#xff0c;但都是一些比较常用的。 html元素标签 首先一个html界面是由无数个元素标签组成的&#xff0c;每个元素具有它的属性 1.input 单行文本框 标签type属性——text <input ty…

机器学习周记(第三十一周:文献阅读-GGNN)2024.3.18~2024.3.24

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文模型 1.2.1 数据处理 1.2.2 门控图神经网络 1.2.3 掩码操作 2 相关知识 2.1 图神经网络&#xff08;GNN&#xff09; 2.2 图卷积神经网络&#xff08;GCN&#xff09; 3 相关代码 摘要 本周阅读了一篇利用图神…