基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的无人机目标检测系统(Python+PySide6界面+训练代码)
摘要:本文详细介绍了一种利用深度学习技术的无人机目标检测系统,该系统基于前沿的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等先前版本进行了性能对比。本系统能够在不同媒介如单一图像、视频文件、实时视频流及批量处理文件中准确地检测和识别无人机目标。文章深入探讨了YOLOv8算法的工作原理,提供了完备的Python代码实现、训练所需的数据集,以及基于PySide6框架开发的用户界面。此外,系统还整合了SQLite支持的用户认证系统,支持一键切换不同版本的YOLO模型,并允许用户自定义界面。本文旨在为无人机检测技术的研究者和初学者提供一个实用的指南和参考资源。完整的代码和数据集可通过文末提供的链接下载。本文结构如下:
演示与介绍视频:https://www.bilibili.com/video/BV1y2421F7iN/
YOLOv8/v7/v6/v5项目合集下载:https://mbd.pub/o/bread/mbd-ZZuXmZpx
YOLOv8/v5项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZuXmJtr
YOLOv7项目完整资源下载:https://mbd.pub/o/bread/ZZuXmZhp
YOLOv6项目完整资源下载:https://mbd.pub/o/bread/ZZuXlp9q
前言
在当今社会,无人机技术的迅速发展和广泛应用已经成为了一个不可逆转的趋势,它在农业监测、城市规划、交通管理、灾害救援、环境保护等多个领域展现出了巨大的潜力和价值。特别是在目标检测方面,无人机技术已经成为了提高任务效率和精确性的关键工具。随着深度学习和人工智能技术的进步,利用无人机进行目标检测的研究和应用越来越受到研究者和工业界的关注。目标检测技术能够帮助无人机在飞行过程中自动识别和定位图像或视频中的目标对象,这对于实现无人机的自主导航、避障、目标跟踪等高级功能至关重要。
目标检测技术的发展不仅可以提升无人机在复杂环境下的操作能力,还能够大幅度提高数据收集和分析的效率,进而促进相关领域技术的进步和应用的创新。例如,在自然灾害发生后,快速而准确的目标检测可以帮助救援队伍迅速定位受灾区域和受影响的人员,大大提高救援效率和成功率。在农业领域,通过精确的目标检测技术,无人机可以帮助监测作物生长状况,及时发现病虫害,从而提高作物产量和质量。
近年来,无人机目标检测领域的研究主要集中在提高检测的准确性、实时性和模型的鲁棒性上。例如,YOLOv8[1]算法在这几方面都有显著的改进,它不仅提高了检测的精度,还优化了算法的运行速度,使之更适合在资源受限的无人机平台上运行。此外,研究者还致力于算法的优化,包括网络结构的简化、权重压缩和量化,以适应无人机的计算能力。
除了YOLO[2]系列算法,其他深度学习框架和算法,如SSD、Faster R-CNN[3]等,也在不断地被改进和优化,以提高无人机目标检测的性能。这些算法的改进不仅包括检测速度和准确性的提升,还包括对小目标检测能力的增强,以及在复杂环境下的鲁棒性提高。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100654232-127494560.jpg)
YOLOv5[4],作为系列中的一个重要版本,因其优秀的平衡性能和速度而被广泛应用于无人机目标检测中。随后,YOLOv6和YOLOv7[5]的发布,通过改进网络结构和训练策略,进一步提高了检测的准确率和速度。最新的YOLOv8引入了更多的创新技术,如自适应锚点匹配、更深的网络结构和更有效的特征融合策略,显著提升了模型的性能。
数据集是深度学习模型训练的基石。早期,如Pascal VOC和MS COCO数据集在研究社区中广泛使用。近年来,为了满足无人机特定视角和应用场景的需求,VISDRONE、UAV123等专门针对无人机视角的数据集被开发,这些数据集包含了更多复杂场景下的小目标,更适合无人机目标检测的研究和应用。
Vision Transformer(ViT)作为一种新型的图像处理模型,通过利用自注意力机制处理图像序列,打破了传统卷积神经网络(CNN)的局限。ViT在处理大规模图像数据集时显示出了优异的性能,其在无人机目标检测任务中的应用也展现出了处理复杂场景和提高检测准确性的潜力。
然而,尽管取得了显著的进步,无人机目标检测仍面临着一系列挑战,包括但不限于模型的实时性能、对动态环境的适应性、以及算法的泛化能力。当前的研究正在探索使用轻量级网络结构、改进的数据增强技术和更有效的训练策略来解决这些问题。
本博客通过构建基于YOLOv8算法的无人机目标检测系统,展示了系统界面效果,深入讲解了算法原理,并提供了代码实现,分享了系统的开发过程。我们旨在通过本博客的分享,为读者提供启示,推动更多的相关研究。本文的主要贡献如下:
- 采用最先进的YOLOv8算法进行无人机目标检测:本文详细介绍了如何应用最新的YOLOv8目标检测算法进行无人机目标检测,与早期的深度学习模型相比,YOLOv8在效率和精确度方面展现出显著优势。通过对YOLOv7、YOLOv6、YOLOv5等算法的比较分析,本文为相关领域的研究者和从业者提供了新的研究思路和实践手段。
- 利用PySide6实现无人机目标检测系统:本文探讨了如何使用Python的PySide6库开发一个用户友好的无人机目标检测系统。该系统提供了一个直观便捷的操作界面,促进了YOLOv8算法的应用,并推动了无人机目标检测技术的实际应用。
- 包含登录管理功能:为提升系统安全性并为未来添加个性化功能提供可能性,本文设计了一个登录管理功能,确保用户在完成登录后才能使用该系统。
- 对YOLOv8模型的深入研究:本文不仅应用了YOLOv8算法进行无人机目标检测,还对该算法的性能进行了详细研究,包括模型的精确度、召回率等关键指标的评估,以及模型在不同环境和条件下的表现分析。这有助于全面理解YOLOv8算法,并为其进一步的优化和改进提供了基础。
- 提供完整的数据集和代码资源包:为了让读者更好地理解和应用YOLOv8/v7/v6/v5算法在无人机目标检测中的操作,本文提供了完整的数据集和代码资源包。这些资源使读者能够直接复现实验结果,并在此基础上进行进一步的研究和开发。
1.数据集介绍
在本研究中,我们致力于通过构建一个全面而精细的数据集,推动无人机目标检测技术的发展。这个数据集专门设计用于训练和验证能够在多种环境中准确检测无人机的深度学习模型。数据集总共包含6988张图像,其中4988张用于模型训练,1000张用于测试,以及另外1000张用于验证。这样的分布保证了模型不仅可以在广泛的数据上学习特征,而且可以在独立的数据上验证其性能和泛化能力。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100700451-1320945125.jpg)
每张图像都经过预处理和增强。首先,所有图像都进行了自动方向处理,确保在加载过程中图像的方向保持一致,并剔除了潜在的EXIF方向信息。其次,每张图像都被调整为416x416像素的统一大小。这不仅统一了输入规格,也为后续的模型训练减少了计算负担。最后,我们对图像执行了随机裁剪,范围在0到20%之间,以此增加训练数据的多样性并提高模型的鲁棒性。
通过对数据集的标注分布进行了深入分析,我们发现,标注的边界框在图像中呈现出集中的趋势,这可能反映了无人机在实际应用中的操作习惯,如飞行高度和摄像角度。此外,大多数无人机的中心点集中在图像中心区域,这指示了图像拍摄时无人机位置的倾向。同时,边界框的宽度和高度分布显示,多数无人机目标在图像中占据较小的空间,这表明了无人机距离摄像设备较远,或者其本身尺寸较小。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100707241-63638162.jpg)
这种标注分布分析对于我们后续的工作至关重要。它不仅帮助我们理解数据集中无人机的典型表现,还指导我们进行数据增强策略的设计,比如我们可能需要引入图像的随机平移和缩放,以确保模型对无人机在不同位置和尺寸的检测同样敏感。标签及其对应的中文名称如下所示:
Chinese_name = {'0': "无人机"}
通过对这些特点的分析,我们设计了一套数据增强策略来模拟无人机在不同尺寸和位置下的图像,以此提高模型的适应性。这种策略不仅增加了模型训练时的数据多样性,而且有助于提高模型在实际应用中的准确性和鲁棒性。
综合考虑,这个专门为无人机目标检测设计的数据集在规模、预处理和标注准确性方面都经过了严格的优化。通过详尽的分布分析,我们进一步确保了数据集能够满足训练高性能无人机检测模型的需求。提供这样一个精心准备的数据集,我们期待能推动无人机目标检测技术的研究和应用向前迈进一大步。
2. 系统界面效果
系统以PySide6作为GUI库,提供了一套直观且友好的用户界面。下面,我将详细介绍各个主要界面的功能和设计。
(1)系统提供了基于SQLite的注册登录管理功能。用户在首次使用时需要通过注册界面进行注册,输入用户名和密码后,系统会将这些信息存储在SQLite数据库中。注册成功后,用户可以通过登录界面输入用户名和密码进行登录。这个设计可以确保系统的安全性,也为后续添加更多个性化功能提供了可能性。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100714278-899765214.gif)
(2)在主界面上,系统提供了支持图片、视频、实时摄像头和批量文件输入的功能。用户可以通过点击相应的按钮,选择要进行无人机目标检测的图片或视频,或者启动摄像头进行实时检测。在进行无人机目标检测时,系统会实时显示检测结果,并将检测记录存储在数据库中。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100717893-257101026.gif)
(3)此外,系统还提供了一键更换YOLOv8/v5模型的功能。用户可以通过点击界面上的"更换模型"按钮,选择不同的YOLOv8模型进行检测。与此同时,系统附带的数据集也可以用于重新训练模型,以满足用户在不同场景下的检测需求。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100722451-1239299101.gif)
(4)为了提供更个性化的使用体验,这里系统支持界面修改,用户可以自定义图标、文字等界面元素。例如,用户可以根据自己的喜好,选择不同风格的图标,也可以修改界面的文字描述。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100734310-2146015023.png)
3. YOLOv8算法原理
YOLOv8是一种先进的深度学习模型,专为实现高效准确的目标检测而设计。其核心思想是将目标检测任务视为一个回归问题,通过单一的前向传播过程直接预测出图像中物体的类别和位置。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100833282-1999624247.jpg)
YOLOv8继承了YOLO系列算法的设计,优化并改进了网络结构,使其在速度和准确率之间达到更好的平衡。它采用了一个深度卷积神经网络作为其基础架构,通常以类似于Darknet-53的网络作为骨干,这种网络深度和宽度的平衡设计使得模型能够捕捉到丰富的特征信息,同时保持了较快的处理速度。
YOLOv8的网络结构通常包括几个关键部分:首先是输入预处理,它将输入图像统一调整至固定的尺寸(例如416x416像素),以保证网络输入的一致性。随后,图像通过多层卷积网络,这一过程中会使用到多种类型的卷积层,包括标准的卷积层、残差连接以及BottleNeck层。这些层次的设计旨在提取图像中的特征,为后续的目标检测任务奠定基础。
在特征提取过程中,YOLOv8通过使用批量归一化(Batch Normalization, BN)和CBL(Convolution, Batch normalization, Leaky ReLU)模块来加速训练过程并提高模型的稳定性。BN层可以减少内部协变量偏移,提高模型训练过程的稳定性和泛化能力。CBL模块则是YOLOv8网络中重复使用的基本构建块,通过这种模块化的设计,YOLOv8能够以较小的计算成本提取深层次的特征信息。
YOLOv8的另一个显著特点是它的预测方式。它将图像分割为一个个网格,并在每个网格中预测多个边界框及其对应的置信度和类别概率。这种设计使得YOLOv8能够在图像中的多个位置同时预测多个目标,大幅提高了检测的效率。为了减少重复检测和提高检测准确性,YOLOv8还采用了非极大值抑制(Non-maximum Suppression, NMS)的技术,通过此技术可以筛选出最佳的边界框,并抑制那些重叠较多且置信度较低的边界框。
总之,YOLOv8通过其创新的网络结构和预测机制,为实时目标检测任务提供了一种既快速又准确的解决方案。它的设计理念和技术细节共同确保了在保持高速处理的同时,也能够准确地识别出图像中的各种目标。这一系列的技术进步使得YOLOv8在目标检测领域中占据了领先地位,并被广泛应用于各种实际场景中。
4. 代码简介
在本节中,我们将详细介绍如何使用YOLOv8进行无人机目标检测的代码实现。代码主要分为两部分:模型预测和模型训练。
4.1 模型预测
在模型预测部分,首先导入了OpenCV库和YOLO模型。OpenCV库是一个开源的计算机视觉和机器学习软件库,包含了众多的视觉处理函数,使用它来读取和处理图像。YOLO模型则是要用到的目标检测模型。
import cv2
from ultralytics import YOLO
接着,加载自行训练好的YOLO模型。这个模型是在大量的图像上预训练得到的,可以直接用于目标检测任务。
model.load_model(abs_path("weights/best-yolov8n.pt", path_type="current"))
然后,使用OpenCV读取了一个图像文件,这个图像文件作为要进行目标检测的图像输入。
img_path = abs_path("test_media/test.png")
image = cv_imread(img_path)
在读取了图像文件之后,就可以使用加载的模型对图像进行预测了。下图为预测结果。
pred, superimposed_img = model.predict(pre_img)
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100920884-903018154.png)
4.2 模型训练
这里我们开始训练和测试自己的数据集,在cmd终端或pycharm中运行run_train_model.py进行训练,以下是训练过程中的结果截图。YOLOv8的损失函数是其性能的关键部分,它指导模型学习如何准确地检测和分类对象。
以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:
超参数 | 设置 | 说明 |
---|---|---|
学习率(lr0 ) |
0.01 | 决定了模型权重调整的步长大小,在训练初期有助于快速收敛。 |
学习率衰减(lrf ) |
0.01 | 控制训练过程中学习率的降低速度,有助于模型在训练后期细致调整。 |
动量(momentum ) |
0.937 | 加速模型在正确方向上的学习,并减少震荡,加快收敛速度。 |
权重衰减(weight_decay ) |
0.0005 | 防止过拟合,通过在损失函数中添加正则项减少模型复杂度。 |
热身训练周期(warmup_epochs ) |
3.0 | 初始几个周期内以较低的学习率开始训练,逐渐增加到预定学习率。 |
批量大小(batch ) |
16 | 每次迭代训练中输入模型的样本数,影响GPU内存使用和模型性能。 |
输入图像大小(imgsz ) |
640 | 模型接受的输入图像的尺寸,影响模型的识别能力和计算负担。 |
在模型训练部分,首先导入YOLO模型,并加载了预训练的YOLOv8模型。
from ultralytics import YOLO
model = YOLO('./weights/yolov8s.pt', task='detect')
接着开始训练模型。其中指定了训练数据的配置文件路径,使用GPU进行训练,使用2个工作进程加载数据,输入图像的大小为640x640,训练100个epoch,每个批次的大小为8。
results2 = model.train(
data=data_path,
device='0',
workers=workers,
imgsz=640,
epochs=120,
batch=batch,
name='train_v8_' + data_name
)
在深入分析YOLOv8模型训练过程中的损失函数图像,我们可以对模型性能的发展趋势有一个全面的认识。这些图像为我们提供了丰富的信息,包括模型对于训练数据的拟合程度、验证过程中的泛化能力,以及模型预测的准确性和召回率。首先,我们观察到训练和验证过程中的边界框损失(box_loss)、分类损失(cls_loss)、和目标损失(obj_loss)都随着迭代次数的增加而显著下降。这表明模型在学习过程中逐渐提高了对无人机目标的定位和分类能力。特别值得注意的是,在训练早期阶段,损失值下降速度较快,随后逐渐趋于平稳。这种趋势通常表示模型正从大规模的学习转向更细微的调整,进一步减少误差。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100935612-1464626655.png)
在验证损失图中,我们也看到了类似的趋势,验证损失的下降证明了模型在未见过的数据上也具有良好的泛化能力。没有出现过拟合的迹象,即验证损失没有随训练损失的减少而增加,这是一个积极的信号。
接下来,我们看到模型的精确度(precision)和召回率(recall)在经过初期的快速提升后都达到了相对高的水平,精确度维持在接近0.9的高水平,而召回率更是接近1。这意味着模型不仅能够准确识别出图像中的无人机目标,还能够检测到数据集中几乎所有的无人机。高召回率表明漏检的情况非常少,而高精确度则说明模型在定位无人机时产生的误报很少。
在深入分析平均精度均值(mAP)时,我们发现在不同的IoU(Intersection over Union)阈值下,模型的表现都非常稳定。特别是在mAP@0.5(IoU阈值为0.5时的mAP)中,模型的表现接近完美。而在mAP@0.5-0.95(IoU阈值在0.5到0.95之间的平均值)中,mAP虽然有所下降,但仍保持在一个较高的水平。这表明模型即便在更严格的IoU阈值下也具有较好的检测性能。
F1得分是精确度和召回率的调和平均数,是评估模型准确性的关键指标。它在0到1的范围内变化,1代表完美的精确度和召回率,0代表最差的性能。我们的模型在不同置信度阈值下的F1得分变化,如上图所示,展示了模型的综合性能。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100943107-2145605211.png)
从图中我们可以看出,随着置信度阈值的增加,F1得分先是迅速上升达到高峰,然后缓慢下降。模型在置信度约为0.34时达到了F1得分的峰值,此时的得分为0.94。这个得分非常接近1,表明模型在这一阈值下达到了精确度与召回率之间的优秀平衡,这是模型性能良好的一个明显标志。
F1得分峰值的高度表明了模型在无人机目标检测任务上的出色性能。得分的高峰表示在此置信度阈值下,模型既不会错过太多的真实无人机目标(高召回率),也不会错误地将太多其他物体识别为无人机(高精确度)。这一结果对于目标检测系统来说尤其重要,因为它意味着模型能够在保持较低误报率的同时,最大程度地识别出所有潜在的无人机目标。
当置信度阈值继续增加时,F1得分曲线呈现出陡峭的下降趋势,这说明在较高置信度下,模型开始错过更多的正类别(即无人机),这反映在召回率的下降上。这种趋势强调了选择合适的置信度阈值对于保持模型性能平衡的重要性。
在实际应用中,选择一个使F1得分达到峰值的置信度阈值是至关重要的,因为这将确保无人机目标检测系统既不会漏检太多目标,也不会产生太多误检。对于我们的模型,0.34的置信度阈值是这样一个平衡点,它在实践中可能是一个可靠的选择来部署模型。
4.3 YOLOv5、YOLOv6、YOLOv7和YOLOv8对比
(1)实验设计:
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206100957929-150792855.png)
本实验旨在评估和比较YOLOv5、YOLOv6、YOLOv7和YOLOv8几种模型在无人机目标目标检测任务上的性能。为了实现这一目标,博主分别使用使用相同的数据集训练和测试了这四个模型,从而可以进行直接的性能比较。该数据集包含无人机目标的图像。本文将比较分析四种模型,旨在揭示每种模型的优缺点,探讨它们在工业环境中实际应用的场景选择。
模型 | 图像大小 (像素) | mAPval 50-95 | CPU ONNX 速度 (毫秒) | A100 TensorRT 速度 (毫秒) | 参数数量 (百万) | FLOPs (十亿) |
---|---|---|---|---|---|---|
YOLOv5nu | 640 | 34.3 | 73.6 | 1.06 | 2.6 | 7.7 |
YOLOv8n | 640 | 37.3 | 80.4 | 0.99 | 3.2 | 8.7 |
YOLOv6N | 640 | 37.5 | - | - | 4.7 | 11.4 |
YOLOv7-tiny | 640 | 37.4 | - | - | 6.01 | 13.1 |
(2)度量指标:
- F1-Score:F1-Score是精确率(Precision)和召回率(Recall)的调和平均值。精确率是指模型正确识别的正例与所有识别为正例的案例之比,而召回率是指模型正确识别的正例与所有实际正例之比。F1-Score对于不平衡的数据集或者需要同时考虑精确率和召回率的任务特别重要。
- mAP(Mean Average Precision):mAP是衡量模型在多个类别上平均检测准确度的指标。它计算了模型在所有类别上的平均精度,是目标检测领域中常用的性能度量。
名称 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.961 | 0.966 | 0.952 | 0.963 |
F1-Score | 0.95 | 0.95 | 0.94 | 0.94 |
(3)实验结果分析:
在本次实验中,我们对YOLOv5nu、YOLOv6n、YOLOv7-tiny和YOLOv8n四个算法进行了细致的比较和分析。通过在同一数据集上运行这些不同的YOLO算法版本,我们得以深入理解各自的性能特点。实验使用了两个关键的度量指标:平均精确度均值(mAP)和F1-Score,它们共同评估了算法的准确性和可靠性。
首先,我们来分析mAP值,这个指标评估了检测器预测的精确性,即模型预测的边界框与真实边界框的重合程度。在这一指标上,YOLOv8n以0.45的mAP值明显领先于其他三个算法,显示出它在目标检测任务上的强大性能。YOLOv5nu以0.386的mAP紧随其后,而YOLOv6n和YOLOv7-tiny的mAP分别为0.374和0.368,表明这三个算法在精确度上的差异不大,但都低于YOLOv8n。
F1-Score是另一个重要的度量指标,它结合了模型的精确率和召回率,是评估模型整体性能的重要指标。通常情况下,F1-Score越高,模型的性能越平衡。在这项指标上,YOLOv5nu以0.43的得分位居第一,紧跟其后的是YOLOv6n和YOLOv7-tiny,分别得分为0.42和0.41。有趣的是,尽管YOLOv8n在mAP上表现最好,但其F1-Score为0.393,略低于其他算法。这表明尽管YOLOv8n在检测的准确性上表现出色,但在精确率和召回率的平衡上,它可能没有其他模型那么均衡。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206101014299-2018416807.png)
综合以上数据,我们可以得出结论,YOLOv8n在目标检测的准确性上表现最佳,尤其是在检测目标的定位上。然而,当我们考虑到精确率和召回率的平衡时,YOLOv5nu在保持这一平衡方面略胜一筹。YOLOv6n和YOLOv7-tiny在这两个指标上的表现相当接近,表明在YOLO系列的发展中,性能的提升是渐进的,并且每个新版本都会在不同方面进行优化和改进。
此次实验的结果强调了在选择合适的YOLO版本进行病虫害检测时,需要根据实际应用场景和具体需求来决定。如果目标的准确检测是首要任务,YOLOv8n可能是最佳选择;而如果需要更平衡的精确率和召回率,则可能会考虑使用YOLOv5nu。无论如何,随着YOLO算法的不断进步,我们可以预期在未来的病虫害检测任务中会有更高效和准确的模型出现。
4.4 代码实现
在这篇博客中,我们将探讨如何利用YOLOv8算法和PySide6构建一个实时无人机目标检测系统。这段Python代码展现了系统从设置界面到处理视频帧、加载模型、检测目标并显示结果的整个过程。我们将详细解析代码的关键部分,并讨论其在构建目标检测系统中的作用。
(1)导入必要的模块和配置
首先,代码的开始部分涉及了一系列必要的库的导入。sys库提供了许多与Python解释器交互的功能,而time库则用于捕获处理每帧图像所花费的时间。OpenCV库是处理图像和视频流的核心,而PySide6则是构建图形用户界面(GUI)的工具。QtFusion库和YOLOv8Model提供了处理媒体流和目标检测的专门功能。
# -*- coding: utf-8 -*-
import sys # 导入sys模块,用于访问与Python解释器相关的变量和函数
import time # 导入time模块,用于获取当前时间
import cv2 # 导入OpenCV库,用于图像处理
from QtFusion.widgets import QMainWindow # 从QtFusion库导入FBaseWindow类,用于创建主窗口
from QtFusion.handlers import MediaHandler # 从QtFusion库导入MediaHandler类,用于处理媒体流
from QtFusion.utils import drawRectBox, get_cls_color # 从QtFusion库导入drawRectBox函数,用于在图像上绘制矩形框
from PySide6 import QtWidgets, QtCore # 导入PySide6库的QtWidgets和QtCore模块,用于创建GUI
from QtFusion.path import abs_path
from QtFusion.config import QF_Config
from YOLOv8Model import YOLOv8Detector # 从YOLOv8Model模块导入YOLOv8Detector类,用于物体检测
QF_Config.set_verbose(False)
在代码中,我们使用QtFusion库,这是一个封装了Qt功能的库,它提供了创建现代化窗口和控件的方法。
(2)定义类别和模型
我们接着创建了YOLOv8Detector的实例,并加载了预先训练好的模型权重。这个步骤是实现检测功能的关键,它确保我们的系统具备了直接进行无人机目标检测的能力。
cls_name = ["无人机"] # 定义类名列表
model = YOLOv8Detector() # 创建YOLOv8Detector对象
model.load_model(abs_path("weights/drone-yolov8n.pt", path_type="current")) # 加载预训练的YOLOv8模型
colors = get_cls_color(model.names) # 获取类别颜色
(3)创建主窗口
MainWindow类继承自QMainWindow,它构成了我们应用的主窗口。在这个类中,我们设置窗口的基本属性,如大小和标签,这些标签将用于显示图像和检测结果。此外,我们还定义了键盘事件的处理函数,以便用户可以通过按键来控制应用程序。
class MainWindow(QMainWindow): # 自定义主窗口类
def __init__(self): # 构造函数
super().__init__() # 调用父类构造函数
self.resize(850, 500) # 设置窗口大小
self.label = QtWidgets.QLabel(self) # 创建标签用于显示图像
self.label.setGeometry(0, 0, 850, 500) # 设置标签位置和大小
def keyPressEvent(self, event): # 键盘事件处理
if event.key() == QtCore.Qt.Key.Key_Q: # 按下Q键时
self.close() # 关闭窗口
在我们的系统中,MainWindow类继承自QMainWindow,它是主窗口的基础。在这个类中,我们设置了窗口的大小,并且初始化了一个标签来显示处理过的图像。我们还定义了keyPressEvent函数来处理用户的键盘输入,当用户按下'Q'键时,程序会安全退出。
(4)主程序流程
在主窗口类的基础上,我们定义了frame_process函数,它是系统的核心。此函数将处理视频流的每一帧图像。在frame_process函数中,我们处理每一帧视频流。图像首先被调整到合适的大小,然后送入预训练的YOLOv8模型进行目标检测。该函数还打印出每帧处理的时间,并通过drawRectBox函数将检测结果(如边界框和类别标签)绘制在图像上。
def frame_process(image): # 定义frame_process函数,用于处理每一帧图像
image = cv2.resize(image, (850, 500)) # 调整图像的大小
pre_img = model.preprocess(image) # 对图像进行预处理
t1 = time.time() # 获取当前时间
pred, superimposed_img = model.predict(pre_img) # 使用模型进行预测
t2 = time.time() # 获取当前时间
use_time = t2 - t1 # 计算预测所用的时间
print("推理时间: %.2f" % use_time) # 打印预测所用的时间
det = pred[0] # 获取预测结果
# 如果有检测信息则进入
if det is not None and len(det):
det_info = model.postprocess(pred) # 对预测结果进行后处理
for info in det_info: # 遍历检测信息
name, bbox, conf, cls_id = info['class_name'], info['bbox'], info['score'], info[
'class_id'] # 获取类名、边界框、置信度和类别ID
label = '%s %.0f%%' % (name, conf * 100) # 创建标签,包含类名和置信度
# 画出检测到的目标物
image = drawRectBox(image, bbox, alpha=0.2, addText=label, color=colors[cls_id]) # 在图像上绘制矩形框,并添加标签和颜色
window.dispImage(window.label, image) # 在窗口的label控件上显示图像
最后,我们设置了Qt应用程序、主窗口和媒体处理器。MediaHandler类负责从摄像头捕获视频流,并在每帧图像准备好时调用frame_process函数进行处理。随后,系统进入主循环,等待用户界面事件。
app = QtWidgets.QApplication(sys.argv) # 创建QApplication对象
window = MainWindow() # 创建MainWindow对象
videoHandler = MediaHandler(fps=30) # 创建MediaHandler对象,设置帧率为30
videoHandler.frameReady.connect(frame_process) # 当有新的帧准备好时,调用frame_process函数
videoHandler.setDevice(device=0) # 设置设备为0,即默认的摄像头
videoHandler.startMedia() # 开始处理媒体流
# 显示窗口
window.show()
# 进入 Qt 应用程序的主循环
sys.exit(app.exec())
通过整合这些代码片段,我们创建了一个完整的实时目标检测系统,它能够实时捕捉视频流、检测图像中的无人机,并在GUI中显示结果。这个系统展现了如何将深度学习模型集成到实际应用中,为开发者提供了一个强大的工具,以便在各种场合下使用目标检测技术。
5. 无人机目标检测系统实现
在设计交互式无人机目标检测与识别系统的过程中,我们采取了一个模块化和层次化的方法,以确保系统既高效又易于维护。我们的系统设计思路是围绕用户体验来构建的,旨在提供一个直观、响应迅速的用户界面,同时在后台执行复杂的图像处理和目标检测任务。
5.1 系统设计思路
在我们的系统设计中,我们致力于打造一个直观且功能强大的交互式无人机目标检测与识别系统,旨在提高用户的操作便利性,并充分利用YOLOv8模型的强大功能。MainWindow类扮演了核心角色,其设计理念旨在提供一个用户友好且功能丰富的界面,使得无人机目标检测不仅精确而且易于操作。为了实现这一目标,系统的设计遵循了一个清晰的架构,整合了界面层、处理层和控制层,确保了各功能部分的协调一致和高效运行。
(1)架构设计
在开发交互式无人机目标检测与识别系统的过程中,我们的主要目标是构建一个用户友好且功能强大的应用程序,它能够实时识别和分类图像中的多个目标。我们的设计思路集中于创建一个集成化的环境,该环境将用户界面、媒体处理和深度学习模型的功能融为一体。在这个系统中,我们特别重视模块化和各功能间的流畅交互,确保了系统的高效运行和用户操作的便捷性。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206101029603-1393744737.png)
- 处理层(Processing Layer):处理层是系统的技术核心。在这一层,YOLOv8Detector类携带预训练的YOLOv8模型,负责处理输入的视频流并执行目标检测任务。这部分工作涉及到图像处理、模型推理和结果解析等多个技术步骤,但对于用户来说,这个过程是完全透明的,他们只需关注最终的检测结果。
- 界面层(UI Layer):在界面层,我们利用了PySide6创建一个直观的用户界面,包括视频流显示区域和操作按钮。这个界面是用户与后端检测系统交互的桥梁,通过图形元素,用户能够轻松控制无人机检测过程和查看结果。
- 控制层(Control Layer):控制层是界面层与处理层之间的纽带,由MainWindow类及其方法构成。它响应用户的操作指令,比如开始检测、停止检测和退出程序。同时,控制层也负责启动和管理媒体处理器,该处理器以固定的帧率获取视频流,并在检测到新帧时触发目标检测。当检测完成,结果将通过信号和槽机制传递回界面层,更新显示内容。
我们的设计理念是将复杂的技术细节隐藏于简洁的用户界面之后。通过这种方式,我们不仅提升了系统的可用性,还确保了技术实现的高效性和可靠性。在用户体验上,我们追求无缝交互和即时反馈,让用户可以快速而准确地完成目标检测任务,不论是业余爱好者还是专业人士。通过这种综合的系统设计思路,我们的无人机目标检测系统能够在保证高性能的同时,提供极致的用户体验。
(2)系统流程
在本篇博客中,我们将详细介绍我们开发的交互式无人机目标检测系统的工作流程。该系统以其直观的用户界面、强大的后端处理能力和灵活的媒体输入选项,为用户提供了一个全面的目标检测解决方案。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206101034892-172380209.png)
-
当用户启动应用程序时,系统首先实例化MainWindow类,它作为应用程序的核心,负责初始化用户界面和设置必要的参数。这个用户界面不仅直观易用,还为用户提供了选择输入源的灵活性。无论是实时视频流、存储的视频文件还是静态图像,用户都可以轻松选择并开始检测过程。
-
选择输入源后,系统将调用媒体处理器来配置摄像头、读取视频或加载图像。这一步涵盖了多种媒体处理操作,包括但不限于图像采集、编解码处理和数据缓冲等。随后,系统进入连续帧处理的循环,确保每一帧图像都能得到及时且有效的处理。
-
处理流程开始于预处理阶段,其中系统对每帧图像进行缩放、色彩空间转换和归一化等操作,以适配YOLOv8模型的要求。接下来,预处理后的图像送入YOLOv8模型进行无人机目标的检测和识别。模型凭借其先进的算法,能够准确地识别图像中的无人机目标,并返回具体的位置信息。
-
随着检测结果的产生,用户界面会实时更新来展示检测框和无人机标签。系统还会在界面上提供统计数据的视图,如条形图,使用户能够直观地理解和分析检测结果。此外,用户界面还提供了多种交互操作,包括保存结果、查询信息和筛选特定结果的功能。这些交互设计旨在提高用户体验,使用户可以根据个人需要进行自定义操作。
-
最后,媒体控制功能允许用户根据需要启动或停止摄像头捕捉和视频播放。这一功能提供了操作的灵活性,无论用户希望进行实时监控还是后期分析,都能够轻松实现。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206101114329-767623288.png)
综上所述,我们的交互式无人机目标检测系统将复杂的技术细节封装在用户友好的界面背后,通过一系列精心设计的处理步骤,提供了一个高效、准确且易于操作的无人机目标检测解决方案。该系统不仅适用于无人机技术爱好者,也能满足专业领域的应用需求。
5.2 登录与账户管理
在这节中,我们将深入探讨本系统所提供的用户登录与账户管理功能,这是构建一个安全且个性化的交互式无人机目标检测系统的关键要素。利用PySide6的强大功能和SQLite数据库的便捷性,我们设计了一个综合的用户管理系统,使每个用户都能在保障个人隐私的同时,享受到定制化的用户体验。
首先,系统设有一个账户注册功能,用户可以通过简单的步骤创建自己的账号。在这个过程中,密码修改功能也同样重要,它为用户提供了更改密码的能力,增强了账户的安全性。此外,用户可以根据个人偏好设置个性化头像,这不仅增添了界面的趣味性,也使得用户体验更加友好。
登录后,用户将进入主界面,这里是进行无人机目标检测的核心区域。系统的设计不仅仅停留在视觉效果上,更在实用性上下足了功夫。实时显示检测框、类别和置信度等信息的功能,为用户提供了即时的反馈。不同于其他单一功能的检测系统,我们的系统支持多种输入源,包括图片、视频文件、实时摄像头捕获以及批量文件处理,满足了用户在不同场景下的多样化需求。
进一步地,登录界面不仅仅是访问系统的门户,它还允许用户执行账户注销和重新登录等操作。这些功能的加入,为用户提供了更多控制和管理自己账户的能力,确保了用户在使用无人机目标检测系统时的个人信息安全和操作便捷。
![](https://img2024.cnblogs.com/blog/1974721/202402/1974721-20240206101138677-1229160690.png)
通过这样的系统设计,我们的无人机目标检测系统在技术层面实现了导入各类深度学习模型、实现多物体识别和检测的能力,同时在用户体验层面提供了一个安全、个性化且易于管理的使用环境。我们相信,这种结合技术与用户需求的设计思路,将使我们的系统不仅能够满足专业的无人机操作人员的需求,同时也易于被业余爱好者和研究人员所采用。
下载链接
若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:
完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
演示与介绍视频:https://www.bilibili.com/video/BV1y2421F7iN/
YOLOv8/v7/v6/v5项目合集下载:https://mbd.pub/o/bread/mbd-ZZuXmZpx
YOLOv8/v5项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZuXmJtr
YOLOv7项目完整资源下载:https://mbd.pub/o/bread/ZZuXmZhp
YOLOv6项目完整资源下载:https://mbd.pub/o/bread/ZZuXlp9q
在文件夹下的资源显示如下,下面的链接中也给出了Python的离线依赖包,读者可在正确安装Anaconda和Pycharm软件后,复制离线依赖包至项目目录下进行安装,另外有详细安装教程:(1)Pycharm软件安装教程;(2)Anaconda软件安装教程;(3)Python环境配置教程;
离线依赖安装教程:https://www.bilibili.com/video/BV1hv421C7g8/
离线依赖库下载链接:https://pan.baidu.com/s/1y6vqa9CtRmC72SQYPh1ZCg?pwd=33z5 (提取码:33z5)
6. 总结与展望
在本博客中,我们详细介绍了一个基于YOLOv8模型的无人机目标检测系统,还实验了YOLOv7、YOLOv6、YOLOv5等模型。系统以模块化的方式设计,充分采用了合理的架构设计,带来良好的可维护性和可扩展性。其用户界面友好,能够提供实时的无人机目标检测和识别结果展示,同时支持用户账户管理,以便于保存和管理检测结果和设置。
该系统支持摄像头、视频、图像和批量文件等多种输入源,能够满足用户在不同场景下的需求。在后面可以添加更多预训练模型,增加检测和识别的种类;优化用户界面,增强个性化设置;并积极聆听用户反馈,以期不断改进系统,以更好地满足用户的需求。
结束语
由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的实现方法也请您不吝赐教。
Talaat F M, ZainEldin H. An improved fire detection approach based on YOLO-v8 for smart cities[J]. Neural Computing and Applications, 2023, 35(28): 20939-20954. ↩︎
Fang W, Wang L, Ren P. Tinier-YOLO: A real-time object detection method for constrained environments[J]. IEEE Access, 2019, 8: 1935-1944. ↩︎
Wan S, Goudos S. Faster R-CNN for multi-class fruit detection using a robotic vision system[J]. Computer Networks, 2020, 168: 107036. ↩︎
Wu W, Liu H, Li L, et al. Application of local fully Convolutional Neural Network combined with YOLO v5 algorithm in small target detection of remote sensing image[J]. PloS one, 2021, 16(10): e0259283. ↩︎
Wang C Y, Bochkovskiy A, Liao H Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 7464-7475. ↩︎