基于YOLOv8/YOLOv9/YOLOv10的河道漂浮物检测识别系统

摘要: 河道漂浮物检测识别是指利用技术手段自动识别河流、湖泊等水体表面的漂浮垃圾或物体的过程。随着环境保护意识的增强和技术的进步,河道漂浮物检测已经成为水环境保护和管理的重要组成部分。这项技术的应用可以帮助及时发现污染源,采取措施清理漂浮物,从而保护水资源和生态环境。本文基于YOLOv10/v9/v8深度学习框架,通过2400张河道漂浮物的相关图片,进行河道漂浮物目标检测模型训练,可检测8种目标:[ball、grass、bottle、branch、milk-box、plastic-bag、plastic-garbage、leaf],同时对相关模型进行了对比,全面对比分析了YOLOv8、YOLOv9、YOLOv10这3种模型在验证集上的评估性能表现。最后基于训练好的模型制作了一款带UI界面的水面目标物检测识别系统,更便于功能演示,保存检测结果。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件可公众号获取。

一、研究背景

  河道漂浮物检测识别的研究旨在通过智能化手段提高识别效率和准确性,实现自动化监测和清理,从而保护水域生态环境‌。运用深度学习技术,YOLOV10\YOLOV9\YOLOV8深度学习框架训练河道漂浮物检测模型,系统可以高效、准确的识别河道漂浮物,河道漂浮物检测识别系统将更加智能化、精准化和高效。河道漂浮物检测识别系统是一项具有广泛应用前景和重要意义的技术系统,随着技术的不断进步和应用场景的不断拓展,该系统将在未来发挥更加重要的作用。

其主要应用场景包括:
- 环保监管‌:实时监测水质,为环保部门提供数据,加强对水污染企业的监管,评估水环境治理成效‌。
‌- 饮用水安全‌:在饮用水源地设置监测站,确保水源地水质安全,保障人类健康‌。
‌- 工业生产‌:监测工业用水系统中悬浮物浓度,提高生产效率和产品质量;在矿山工业中,监测废水排放,确保符合环保要求‌。
‌- 环境监测‌:用于监测湖泊、河流等水体中悬浮物浓度,帮助环保部门了解和评估水质情况‌。
- 农业灌溉‌:实时监测地下水水质状况,确保农业灌溉水量和水质符合要求‌

总的来说,河道漂浮物检测适用于需要实时监测水质悬浮物浓度的各种场景,为水体治理、饮用水安全、工业生产、矿山废水排放以及环境监测等领域提供重要的数据支持。

二、主要工作内容

  本文的主要内容包括以下几个方面:

  1. 搜集与整理数据集:搜集整理实际场景中河道漂浮物的相关数据图片,并进行相应的数据处理,为模型训练提供训练数据集;

  2. 训练模型: 基于整理的数据集,根据最前沿的YOLOv10/v9/v8目标检测技术 训练目标检测模型,实现对需要检测的对象进行实时检测功能;

  3. 模型性能对比: 对训练出的3种模型在验证集上进行了充分的结果评估和对比分析,主要目的是为了揭示每个模型在关键指标(如Precision、Recall、mAP50和mAP50-95等指标)上的优劣势。这不仅帮助我们在实际应用中选择最适合特定需求的模型,还能够指导后续模型优化和调优工作,以期获得更高的检测准确率和速度。最终,通过这种系统化的对比和分析,我们能更好地理解模型的鲁棒性、泛化能力以及在不同类别上的检测表现,为开发更高效的计算机视觉系统提供坚实的基础。

  4. 可视化系统制作: 基于训练出的目标检测模型,搭配Pyside6制作的UI界面,用python开发了一款界面简洁的水面目标物检测识别系统,可支持图片、视频以及摄像头检测,同时可以将图片或者视频检测结果进行保存。通过图形用户界面(GUI),用户可以轻松地在图片、视频和摄像头实时检测之间切换,无需掌握复杂的编程技能即可操作系统。这不仅提升了系统的可用性和用户体验,还使得检测过程更加直观透明,便于结果的实时观察和分析。此外,GUI还可以集成其他功能,如检测结果的保存与导出、检测参数的调整,从而为用户提供一个全面、综合的检测工作环境,促进智能检测技术的广泛应用。

软件初始界面:

运行首页

运行首页

检测结果如下图:

运行结果

运行结果

三、软件功能介绍
软件主要功能
  1. 可用于实际场景中水面目标物检测,分为8类检测类别:ball、grass、bottle、branch、milk-box、plastic-bag、plastic-garbage、leaf

  2. 支持图片、视频及摄像头进行检测,同时支持图片的批量检测;

  3. 界面可实时显示目标位置、目标总数、置信度、用时等信息;

  4. 支持图片或者视频的检测结果保存;

界面参数说明

置信度阈值: 也就是目标检测时的conf参数,只有检测出的目标置信度大于该值,结果才会显示;

交并比阈值: 也就是目标检测时的iou参数,只有目标检测框的交并比大于该值,结果才会显示;

线宽: 表示在绘制结果时,绘制框的线宽;

Delay: 代表运行时展示的延长时间;

检测结果说明

标签名称与置信度: 表示检测图片上标签名称与置信度;

总目标数: 表示画面中检测出的目标数目;

目标选择: 可选择单个目标进行位置信息、置信度查看。

目标位置: 表示所选择目标的检测框,左上角与右下角的坐标位置。

主要功能说明

功能视频演示见视频,以下是简要的操作描述。

  • (1) 图片检测说明

  点击打开图片按钮,选择需要检测的图片,或者点击打开文件夹按钮,选择需要批量检测图片所在的文件夹,操作演示如下:点击目标下拉框后,可以选定指定目标的结果信息进行显示。点击保存按钮,会对检测结果进行保存,存储路径为:runs目录下。

  • (2)视频检测说明

  点击视频按钮,打开选择需要检测的视频,就会自动显示检测结果,再次点击可以关闭视频。点击保存按钮,会对视频检测结果进行保存,存储路径为:runs目录下。

  • (3)摄像头检测说明

  点击打开摄像头按钮,可以打开摄像头,可以实时进行检测,再次点击,可关闭摄像头。

  • (4)保存图片与视频检测说明

  点击保存按钮后,会将当前选择的图片【含批量图片】或者视频的检测结果进行保存,方便进行查看与后续使用。检测的图片与视频结果会存储在runs目录下。

四、数据集介绍、准备

  通过网络上搜集关于实际场景中水上目标物的相关图片,并使用Labelimg标注工具对每张图片进行标注,分8个检测类别,分别时[ball、grass、bottle、branch、milk-box、plastic-bag、plastic-garbage、leaf] 最终数据集一共包含2400张图片,其中训练集包含1920张图片,验证集包含240张图片,测试图片240张。部分图像及标注如下图所示:

数据集各类别数目分布如下:

五、YOLOv8/YOLOv9/YOLOv10简介

  YOLO(You Only Look Once)是一种流行的计算机视觉算法,用于实现实时对象检测。它由Joseph Redmon等人首次在2015年提出,并随后进行了多次改进。YOLO的核心思想是将整个图像划分为一个固定数量的格子(grid cells),然后在每个格子内同时预测多个边界框(bounding boxes)和类别概率。

  YOLOv8、YOLOv9、YOLOv10是YOLO系列中最前沿的3个系列版本,他们均是基于先前YOLO版本在目标检测任务上的成功,对模型结构进行不断地优化改进,从而不断提升了性能和灵活性,在精度和速度方面都具有尖端性能。

  上图是前沿的SOTA目标检测模型在经典的COCO数据集上的性能表现对比。从上图可以看出,YOLOv8、YOLOv9、YOLOv10都有较好的性能表现。下面详细介绍各个版本的相关信息。

YOLOv8的简介

源码地址:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite   Yolov8是一个SOTA模型,它建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性,使其成为实现目标检测、图像分割、姿态估计等任务的最佳选择。其具体创新点包括一个新的骨干网络、一个新的Ancher-Free检测头和一个新的损失函数,可在CPU到GPU的多种硬件平台上运行。

YOLOv8网络结构如下:

版本更新对比如下:

YOLOv8创新点:

  Yolov8主要借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,其本身创新点不多,偏重在工程实践上,具体创新如下:

  • 提供了一个全新的SOTA模型(包括P5 640和P6 1280分辨率的目标检测网络和基于YOLACT的实例分割模型)。并且,基于缩放系数提供了N/S/M/L/X不同尺度的模型,以满足不同部署平台和应用场景的需求。

  • Backbone:同样借鉴了CSP模块思想,不过将Yolov5中的C3模块替换成了C2f模块,实现了进一步轻量化,同时沿用Yolov5中的SPPF模块,并对不同尺度的模型进行精心微调,不再是无脑式一套参数用于所有模型,大幅提升了模型性能。

  • Neck:继续使用PAN的思想,但是通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8移除了1*1降采样层。

  • Head部分相比YOLOv5改动较大,Yolov8换成了目前主流的解耦头结构(Decoupled-Head),将分类和检测头分离,同时也从Anchor-Based换成了Anchor-Free。

  • Loss计算:使用VFL Loss作为分类损失(实际训练中使用BCE Loss);使用DFL Loss+CIOU Loss作为回归损失。

  • 标签分配:Yolov8抛弃了以往的IoU分配或者单边比例的分配方式,而是采用Task-Aligned Assigner正负样本分配策略。

  YOLOv8不同模型尺寸信息:YOLOv8提供了5种不同大小的模型尺寸信息,详情如下:

Modelsize(pixels)mAPval 50-95params (M)FLOPs (B)
YOLOv8n64037.33.28.7
YOLOv8s64044.911.228.6
YOLOv8m64050.225.978.9
YOLOv8l64052.943.7165.2
YOLOv8x64053.968.2257.8

一般来说,选择模型大小的原则如下: 数据集小(几百张图片):使用yolov8n或yolov8s。过大模型会过拟合。数据集中等(几千张图片):yolov8s或yolov8m。能获得较高精度,不易过拟合。数据集大(几万张图片):yolov8l或yolov8x。模型容量大,充分拟合大数据量,能发挥模型效果。超大数据集(几十万张以上):首选yolov8x。超大模型才能处理海量数据并取得最优效果.

YOLOv9简介

论文地址:https://arxiv.org/abs/2402.13616

源码地址:GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information

  YOLOv9在YOLOv8的网络基础上做了进一步创新,其主要专注于解决深度神经网络中信息丢失带来的挑战。信息瓶颈原理和可逆函数的创新使用是其设计的核心,确保了 YOLOv9 保持高效率和准确性。YOLOv9引入了两项关键创新概念:可编程梯度信息 (PGI):PGI 是 YOLOv9 中引入的一个新概念,用于解决信息瓶颈问题,确保跨深度网络层保存基本数据。这样可以生成可靠的梯度,促进准确的模型更新并提高整体检测性能。

广义高效层聚合网络(GELAN): GELAN代表了架构的战略进步,使YOLOv9能够实现卓越的参数利用率和计算效率。它的设计允许灵活集成各种计算块,使 YOLOv9 在不牺牲速度或准确性的情况下适应广泛的应用。

YOLOv9架构创新点更强大的骨干网络: YOLOv9采用了一种新的骨干网络设计,该设计在保持计算效率的同时,增强了特征的提取能力。通过引入更深的网络层次和更复杂的连接方式,YOLOv9能够更有效地捕捉图像中的上下文信息,从而提高了对目标的识别和定位精度。

改进的检测头设计: 在检测头方面,YOLOv9进行了精心的设计和优化。它采用了多尺度特征融合的策略,使得模型能够同时关注不同大小的目标。此外,YOLOv9还引入了一种新的损失函数,以更好地平衡正负样本之间的权重,从而提高了模型的训练稳定性和检测性能。

可编程梯度信息利用: YOLOv9的一个显著创新点是它对梯度信息的利用方式。通过引入可编程的梯度信息学习策略,YOLOv9能够更有效地进行模型参数的更新和优化。这种方法不仅加速了模型的收敛速度,还有助于提高模型对复杂场景和多样化任务的适应性。

YOLOv9不同模型尺寸信息: YOLOv9同样提供了5种不同大小的模型尺寸信息,详情如下:

Modelsize (pixels)mAPval 50-95mAPval 50params (M)FLOPs (B)
YOLOv9t64038.353.12.07.7
YOLOv9s64046.863.47.226.7
YOLOv9m64051.468.120.176.8
YOLOv9c64053.070.225.5102.8
YOLOv9e64055.672.858.1192.5
YOLOv10介绍

论文地址:https://arxiv.org/abs/2405.14458

源码地址:GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection

  YOLOv10 的架构建立在以前 YOLO 模型的优势之上,通过消除非最大抑制 (NMS) 和优化各种模型组件, 实现了最先进的性能,并显著降低了计算开销。

模型网络结构由以下组件组成: 主干网:YOLOv10 中的主干网负责特征提取,使用增强版的 CSPNet(Cross Stage Partial Network)来改善梯度流并减少计算冗余。颈部:颈部被设计成聚合来自不同尺度的特征,并将它们传递到头部。它包括 PAN(路径聚合网络)层,用于有效的多尺度特征融合。一对多头:在训练过程中为每个对象生成多个预测,以提供丰富的监督信号,提高学习准确性。一对一头:在推理过程中为每个对象生成一个最佳预测,消除对 NMS 的需求,从而减少延迟并提高效率。YOLOv10创新点如下无 NMS 训练: 利用一致的双重分配来消除对 NMS 的需求,从而减少推理延迟。整体模型设计: 从效率和精度两个角度对各种组件进行全面优化,包括轻量级分类头、空间通道解耦下采样和秩引导块设计。增强的模型功能: 整合大核卷积和部分自注意力模块,可在不增加大量计算成本的情况下提高性能。

YOLOv10不同模型尺寸信息:

  YOLOv10 提供6种不同的型号规模模型,以满足不同的应用需求:

ModelInput SizeAPvalparams (M)FLOPs (G)
YOLOv10-N64038.52.76.7
YOLOv10-S64046.37.221.6
YOLOv10-M64051.115.459.1
YOLOv10-B64052.519.192.0
YOLOv10-L64053.224.4120.3
YOLOv10-X64054.429.5160.4

YOLOv10-N:Nano 版本,适用于资源极度受限的环境。YOLOv10-S:平衡速度和精度的小型版本。YOLOv10-M:通用的中型版本。YOLOv10-B:平衡版本,宽度增加,精度更高。YOLOv10-L:大版本,以增加计算资源为代价,实现更高的精度。YOLOv10-X:超大版本,可实现最大的精度和性能。

六、模型训练、评估与推理

  本文主要基于YOLOv8n、YOLOv9t、YOLOv10n这3种模型进行模型的训练,训练完成后对3种模型在验证集上的表现进行全面的性能评估及对比分析。模型训练和评估流程基本一致,包括:数据集准备、模型训练、模型评估。下面主要以YOLOv8为例进行训练过程的详细讲解,YOLOv9与YOLOv10的训练过程类似。

1. 模型训练

  准备好数据集后,将图片数据以如下格式放置在项目目录中。在项目目录中新建datasets目录

同时我们需要新建一个data.yaml文件,用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时,会读取该文件的信息,用于进行模型的训练与验证。data.yaml的具体内容如下:

注:train与val后面表示需要训练图片的路径,建议直接写自己文件的绝对路径。数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

  模型常用训练超参数参数说明:YOLOv8 模型的训练设置包括训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。关键的训练设置包括批量大小、学习率、动量和权重衰减。此外,优化器、损失函数和训练数据集组成的选择也会影响训练过程。对这些设置进行仔细的调整和实验对于优化性能至关重要。以下是一些常用的模型训练参数和说明:

ArgumentDefaultDescription
modelNone模型或者模型配置文件
dataNone数据集配置文件
epochs100训练的轮次
patience100准确率为提升停止的轮次
batch16训练的批次大小
imgsz640图像的尺寸
saveTrue是否需要保存训练的结果与模型
deviceNone训练设备
workers8多线程数据集加载
projectNone项目名称
exist_okFalse是否覆盖现有试验
pretrainedTrue是否使用预训练模型
optimizer'auto'优化器选择
verboseFalse是否详细输出
seed0种子数
deterministicTrue是否启动确定性模式
rectFalse单类别模型训练
cos_lrFalse是否使用余弦学习率调度器
resumeFalse是否从最近的训练断掉权重继续训练
ampTrue是否开启混合精度训练
2.训练结果评估

  在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:

各损失函数作用说明:

定位损失box_loss: 预测框与标定框之间的误差(GIoU),越小定位得越准;

分类损失cls_loss: 计算锚框与对应的标定分类是否正确,越小分类得越准;

动态特征损失(dfl_loss): DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。 主要工作内容

本文训练结果如下:

  我们通常用PR曲线来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型目标检测的mAP@0.5值为0.849,结果还是很不错的。

3.模型推理

  模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/train/weights目录下。我们可以使用该文件进行后续的推理检测。图片检测代码如下:

#coding:utf-8
from ultralytics import YOLO
import cv2# 所需加载的模型目录
path = 'models/best.pt'
# 需要检测的图片地址
img_path = "TestFiles/Burr16_png_jpg.rf.75fc417fe0f65aa2ff850971806cddd7.jpg"# 加载预训练模型
model = YOLO(path, task='detect')# 检测图片
results = model(img_path)
print(results)
res = results[0].plot()
# res = cv2.resize(res,dsize=None,fx=2,fy=2,interpolation=cv2.INTER_LINEAR)
cv2.imshow("YOLOv8 Detection", res)
cv2.waitKey(0)

检测结果如下:

七、YOLOv8/YOLOv9/YOLOv10性能对比分析

  本文在介绍的数据集上分别训练了YOLOv8n、YOLOv9t、YOLOv10n这3种模型用于对比分析,训练轮数为150个epoch。主要分析这3种模型的训练结果在Precision(精确度)、Recall(召回率)、mAP50、mAP50-95、F1-score等性能指标上的表现,以选出更适合本数据集的最优模型。3种模型基本信息如下:

Modelsize (pixels)mAPval 50-95params (M)FLOPs (B)
YOLOv8n64037.33.28.7
YOLOv9t64038.32.07.7
YOLOv10n64038.52.76.7

FlOPs(floating point operations):浮点运算次数,用于衡量算法/模型的复杂度。params (M):表示模型的参数量

  1. 各模型性能评估

  在YOLOv8、YOLOv9、YOLOv10这3种模型训练完成后,我们可以通过验证集对各个模型分别进行性能评估。YOLOv8模型在验证集上的性能评估结果如下:

    Class     Images  Instances      Box(P          R      mAP50  mAP50-95) all        746       2154      0.832      0.805      0.831      0.471bridge        746        190      0.926      0.984      0.971      0.735ship        746        376       0.92      0.928      0.953      0.695boat        746        754      0.895      0.859      0.908      0.549ball        746        341      0.869      0.501      0.715      0.316rubbish        746         65      0.779      0.708      0.759      0.415rock        746        226      0.856      0.757      0.828      0.382buoy        746         14      0.733      0.786      0.679      0.383platform        746         52      0.738      0.865      0.821      0.557mast        746         31      0.914      0.935      0.977      0.619tree        746         17      0.737      0.882      0.785      0.425animal        746          6      0.842      0.891      0.948       0.24grass        746          6      0.794      0.667      0.669       0.38person        746         76      0.816      0.701      0.789      0.431
Speed: 0.3ms preprocess, 5.6ms inference, 0.0ms loss, 4.1ms postprocess per image
Results saved to runs/detect/val3
💡 Learn more at https://docs.ultralytics.com/modes/val

Class:表示模型的检测类别名称;Images:表示验证集图片数目;Instances:表示在所有图片中目标数;P:表示精确度Precison; R:表示召回率Recall; mAP50:表示IoU(交并比)阈值为0.5时的平均精度。mAP50-95:表示从IoU为0.5到0.95的范围内【间隔0.05】,模型的平均精度。

YOLOv9模型在验证集上的性能评估结果如下:

                 Class     Images  Instances          P          R      mAP50   mAP50-95: 100%|██████████| 24/24 00:13all        746       2154      0.848      0.798      0.851      0.498bridge        746        190      0.923      0.984      0.978      0.736ship        746        376      0.933      0.934      0.959      0.705boat        746        754      0.882      0.874      0.915      0.567ball        746        341       0.83      0.531       0.74      0.336rubbish        746         65      0.812      0.729      0.842      0.441rock        746        226      0.871      0.783      0.847      0.418buoy        746         14      0.623      0.786      0.821      0.417platform        746         52      0.791      0.799      0.821      0.571mast        746         31      0.936      0.936      0.989      0.669tree        746         17      0.869      0.882       0.91      0.566animal        746          6      0.812      0.728      0.734      0.187grass        746          6      0.908      0.667      0.668      0.414person        746         76      0.836       0.74      0.844      0.447

YOLOv10n模型在验证集上的性能评估结果如下:

                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|█████████all        746       2154        0.8      0.758      0.818      0.457bridge        746        190      0.876      0.969      0.977      0.705ship        746        376       0.91      0.911      0.951      0.676boat        746        754      0.875      0.861        0.9      0.545ball        746        341      0.807      0.514        0.7      0.299rubbish        746         65      0.746      0.646      0.749      0.369rock        746        226      0.877      0.758      0.829      0.378buoy        746         14      0.655       0.68      0.731      0.288platform        746         52      0.745      0.787      0.793      0.521mast        746         31       0.87      0.903      0.957      0.614tree        746         17      0.595      0.647      0.803      0.543animal        746          6      0.829      0.812       0.77       0.23grass        746          6       0.77      0.667      0.689      0.377person        746         76      0.842      0.697      0.781      0.391
Speed: 1.0ms preprocess, 1.5ms inference, 0.0ms loss, 0.0ms postprocess per image

  整体来看,在此数据集上YOLOv8n在各个指标方面都表现略微比YOLOv9t与YOLOv10n要好一点。因此推荐使用YOLOv8n训练的模型进行此类的检测任务。

八、可视化系统制作

  基于上述训练出的目标检测模型,为了给此检测系统提供一个用户友好的操作平台,使用户能够便捷、高效地进行检测任务。博主基于Pyside6开发了一个可视化的系统界面,通过图形用户界面(GUI),用户可以轻松地在图片、视频和摄像头实时检测之间切换,无需掌握复杂的编程技能即可操作系统。

1. Pyside6简介

  PySide6是一个用于创建跨平台GUI(图形用户界面)应用程序的库,它是Qt for Python的官方库。Qt本身是一个跨平台的C++应用程序框架,广泛用于开发具有图形用户界面(GUI)的应用程序。PySide6允许开发者使用Python语言访问Qt的功能,从而简化了开发过程

下面对Pyside6 的基本原理进行详细介绍:

1.基本架构

  PySide6是用于Qt应用程序的Python绑定。基于Qt框架,它提供了一套强大的GUI工具集,适用于开发跨平台的桌面应用程序。一个基本的PySide6应用程序通常包含以下组件:导入QtWidgets模块,它是创建用户界面的基本模块;创建一个应用程序对象;创建窗口部件,如按钮、标签等;通过信号和槽机制连接窗口部件的事件;显示并运行应用程序。

2.事件驱动编程

  Pyside6基于事件驱动编程模型,主要通过信号(signals)和槽(slots)机制实现用户与应用程序之间的交互。当用户与 GUI 进行交互(如点击按钮、调整滑块等)时,会触发信号,这些信号可以连接到槽函数或方法,以执行特定操作。

3.Qt对象模型

  Pyside6的核心是 Qt 对象模型,所有的控件和窗口部件都是从 QObject 类派生而来的。它们拥有复杂的父子关系,确保父对象在销毁时自动销毁所有子对象,避免内存泄漏。

4.部件(Widgets)

  Pyside6提供了丰富的内置部件,如按钮、标签、文本框、表格、树、标签页等,几乎涵盖了所有常见的 GUI 控件。这些部件可以直接使用,也可以通过继承进行自定义。

5.布局管理器

  提供了强大的布局管理功能,可以通过 QLayout 和其子类(如 QHBoxLayout, QVBoxLayout, QGridLayout)来控制部件在窗口内的摆放方式。这使得界面的设计变得灵活且易于维护。

6.资源管理

  Pyside6支持资源文件管理,可以将图像、图标、样式表等资源打包进应用程序中。资源文件通常以 .qrc 格式存储,并通过资源管理器集成到应用程序中。

7.信号与槽机制

  Pyside6信号与槽机制是 Qt 框架的核心特性之一,它允许对象之间进行松耦合通信。通过信号可以触发槽函数来处理各种事件,使代码逻辑更加清晰和模块化。

8.跨平台性

  Pyside6是跨平台的,支持 Windows、Mac 和 Linux 等操作系统,编写一次代码即可运行在多个平台上。

关于该系统涉及到的完整源码、UI界面代码、数据集、训练代码、训练好的模型、测试图片视频等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。

演示视频(https://www.bilibili.com/video/BV1RseMetE11)

注意:该代码基于Python3.8开发,运行界面的主程序为Main.py,其他测试脚本说明见上图。为确保程序顺利运行,请按照程序运行说明文档txt配置软件运行所需环境。

获取方式 关注下方公众号:【AI算法爱好者角落】,查询即可获取下载方式

知乎解析:AI探索先锋

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

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

相关文章

响应式监听localStorage存储?封装个自定义Hook不就好了!

背景 项目上有个更改时区的全局组件,同时还有一个可以更改时区的局部组件,想让更改时区的时候能联动起来,实时响应起来。 其实每次设置完时区的数据之后是存在了前端的 localStorage 里边,时��&#xfff…

SaltStack的state定义主机状态及Jinja模版的使用

在前面我们学习了远程执行模块,这些模块的执行类似语段 she11 脚本,每次执行都会触发一次相同的功能,在大量的 minion 上运行远程命令当然是重要的,但是对于 minion 的环境控制,使用状态进行管理更为合适,转…

从零开始制作AI无人直播插件!

AI无人直播插件应运而生,它利用人工智能技术,实现了直播内容的自动化生成与播放,极大地降低了直播的人力成本和时间成本,本文将带你从零开始,探索如何制作一个AI无人直播插件,并分享五段关键的源代码。 AI…

谷歌深度学习研究揭示OpenAI O1模型优化策略:比规模更重要的计算效率

引言 近年来,大型语言模型(LLMs)如OpenAI的GPT-4和Google DeepMind的Palm 2已成为自然语言处理领域的佼佼者,它们通过生成类人文本、回答复杂问题、编写代码等能力,改变了许多行业的工作方式。然而,随着这…

IO流体系(FiletOutputStream)

书写步骤: 1.创建字节输出流对象 细节1:参数是字符串表示的路径或者是File对象都是可以的 细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。 细节3:如果文件已经存在,则会清空文件 2.写数据 细节:write方法的参数…

大白话解读末日期权是什么意思?末日期权与黑天鹅!

今天带你了解大白话解读末日期权是什么意思?末日期权与黑天鹅!末日期权与黑天鹅事件的关系主要体现在风险和波动性管理上,交易者需要谨慎对待这两者的互动。 末日期权和期权黑天鹅事件之间的关系主要体现在风险管理和市场波动性上。 末日期…

没有那个文件或目录 #include <bits/libc-header-start.h>

Ubuntu 18.04 编译需要编译32位系统 gcc -ggdb -m32 -c -o exploit.o exploit.c gcc -m32 -L/usr/lib32 exploit.o -o exploit 报错: 解决方法: sudo apt-get install libc6-dev-i386sudo apt-get install gcc-multilib

【C++】哈希表:字母异位词分组(体会泛型编程的强大)

1.题目 2.思路 利用map的特性&#xff0c;第一个值存排好序的string&#xff0c;第二个值存vector<string>。这样就可以很好的将异位词分组。 3.代码 class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {un…

25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】

&#x1f496;&#x1f525;作者主页&#xff1a;毕设木哥 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; 实战项目 文章目录 实战项目 一、基于python的二手电子设备交…

六西格玛绿带培训多少钱?从授“鱼”到授“渔”

六西格玛作为一种全球公认的质量管理方法&#xff0c;其影响力日益扩大&#xff0c;而六西格玛绿带培训作为这一体系中的关键环节&#xff0c;更是吸引了众多希望在职场上脱颖而出的专业人士。本文&#xff0c;深圳天行健企业管理咨询公司将从多个维度深入探讨“六西格玛绿带培…

【大模型】初识大模型(非常详细)零基础入门到精通,收藏这一篇就够了_大模型入门

大模型的定义 大模型是指具有数千万甚至数亿参数的深度学习模型。近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果&#xff0c;如自然语言处理&#xff0c;图片生成&#xff0c;工业数字化等。为了提高模型的性能&#xf…

游戏如何应对云手机刷量问题

云手机的实现原理是依托公有云和 ARM 虚拟化技术&#xff0c;为用户在云端提供一个安卓实例&#xff0c;用户可以将手机上的应用上传至云端&#xff0c;再通过视频流的方式&#xff0c;远程实时控制云手机。 市面上常见的几款云手机 原本需要手机提供的计算、存储等能力都改由…

在校三个月备考软考中项顺利拿证,经验分享

作为一名在校生&#xff0c;我在三个月的备考软考中项后成功拿到证书&#xff0c;对于软考中项的考试技巧有着丰富的经验。首先&#xff0c;我给你分享一些备考技巧&#xff1a; 1. 不要死记硬背&#xff01;最好是结合跟班学习和教材双管齐下。先过一遍所有知识点&#xff08…

如何查看Android设备的dpi

adb shell getprop ro.sf.lcd_density adb shell cat /system/build.prop > build_prop.txt shell cat system/build.prop 结果&#xff1a;参考&#xff1a; 如何查看Android设备的dpi_安卓 查看手机dpi-CSDN博客

【里程碑】轻空间SPIKE AIRDOME项目落地印尼雅加达

在经过半年的激烈角逐与严苛考量后&#xff0c;轻空间凭借其卓越的气承式球幕技术&#xff0c;成功赢得印尼最大城市建设商的青睐&#xff0c;正式签约 SPIKE AIRDOME 项目。该项目将落地印尼首都雅加达CBD&#xff0c;成为这一繁华商业中心的全新地标。轻空间技术负责人亲切地…

一些线上常用排查问题的命令

排查CPU过高时使用到的一些命令 top free df top命令 top 命令是一个动态的实时视图&#xff0c;显示系统的整体运行状况&#xff0c;包括 CPU 使用率、内存使用情况、进程信息等。 free 命令 free 命令用于显示系统中物理内存和交换内存的使用情况。 df 命令 df 命令用…

如何从 Nutanix 迁移至 SmartX 超融合?解读 4 类迁移方案和 2 例迁移实践

2022 年底&#xff0c;Nutanix&#xff08;路坦力&#xff09;正式宣布将中国市场交由合作伙伴&#xff08;联想&#xff09;主导销售&#xff0c;并于 2023 年 8 月完成全面转型。转型后&#xff0c;虽然中国用户依旧可以使用 Nutanix 产品&#xff0c;但在软件的续保和维保方…

基于flask+vue框架的传染病防控酒店信息系统zvt93(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;患者,服务人员,病房类型,病房信息,病房分配,需求箱,商品分类,商品信息,购买商品,分配反馈,健康上报,患者信息,患者分配 开题报告内容 基于flaskvue框架的传染病防控酒店信息系统开题报告 一、项目背景 在全球公共卫生事件频发的背景下…

鸿蒙应用生态构建的核心目标

保护开发者和用户利益的同时维护整体系统的安全性&#xff0c;对生态构建者是至关重要的。以开发者为中心&#xff0c;构建端到端应用安全能力&#xff0c;保护应用自身安全、运行时安全&#xff0c;保障开发者权益&#xff0c;是鸿蒙应用生态构建的核心目标。 应用生命周期主要…

汽车焊机数据通信:Profinet转Canopen网关的神奇连接

在汽车制造领域&#xff0c;汽车焊机的高效、稳定运行对于整车质量至关重要。而Profinet转Canopen网关在汽车焊机的数据通信中发挥着关键作用。 Profinet是一种广泛应用于工业自动化领域的通信协议&#xff0c;具有高速、实时、可靠等特点。Canopen则在汽车电子等领域有着广泛…