廊坊做网站找谁,营销型网站开发推荐,手机软件商城免费下载,福州做网站公司有哪些wx供重浩#xff1a;创享日记 对话框发送#xff1a;323海底 获取完整源码7000张数据集配置说明文件说明远程操作配置环境跑通程序 效果展示 基于深度学习YOLOv8PyQt5的水底海底垃圾生物探测器检测识别系统设计#xff08;源码数据集配置文件#xff09; 各文件说明 程序运…wx供重浩创享日记 对话框发送323海底 获取完整源码7000张数据集配置说明文件说明远程操作配置环境跑通程序 效果展示 基于深度学习YOLOv8PyQt5的水底海底垃圾生物探测器检测识别系统设计源码数据集配置文件 各文件说明 程序运行说明
---------【第一步安装python3.9】--------- 方法一【推荐】 先安装ananconda软件官网地址https://www.anaconda.com/download 安装完成后在conda命令窗口使用命令conda create -n yolov8 python3.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): 平均精度均值是目标检测领域中最常用的评价指标之一。它衡量的是模型在不同IoUIntersection 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和精度可能是更重要的评价标准。 在海洋环境保护和水下生态研究领域及时发现并处理水底生物垃圾是维护水下生态环境健康的重要任务。然而由于水下环境的复杂性和多变性传统的人工监测方法既耗时又效率低下。为了提高水下生物垃圾监测的效率和准确性本文提出了一种基于YOLOv8You 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, parentNone):super(QMainWindow, self).__init__(parent)self.ui Ui_MainWindow()self.ui.setupUi(self)self.initMain()self.signalconnect()# 加载css渲染效果style_file UIProgram/style.cssqssStyleSheet 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, taskdetect)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,pathself.org_path)if __name__ __main__:app QApplication(sys.argv)win MainWindow()win.show()sys.exit(app.exec_())