【AI加持】基于PyQt5+YOLOv8+DeepSeek的输电隐患检测系统(详细介绍)

文章目录


本系统功能强大!支持对输电隐患(气球、鸟巢、风筝、垃圾)进行目标检测,支持多种数据数据源输入并且接入了AI实现了对当前分析结果的评估,欢迎了解!

一.前言

随着电力输送网络的不断扩展,输电线路的安全运行成为电网稳定的重要保障。然而,输电线路容易受到外界因素的干扰,尤其是一些人类活动或自然现象造成的潜在隐患。例如:

鸟巢:鸟类在输电塔或导线上筑巢,容易引起短路、设备损坏,甚至导致停电事故。

气球与风筝:在节假日或娱乐活动中,漂浮的气球或放飞的风筝可能接触高压线路,引发线路击穿或机械损伤。

垃圾:随风飘落或人为抛弃的塑料袋、纸屑等杂物落入线路设施附近,可能阻碍巡视或造成局部短路。

传统的输电线路巡检主要依赖人工巡查或定期无人机巡检,这不仅效率低、成本高,而且容易出现漏检或误判。随着人工智能和深度学习技术的发展,基于计算机视觉的自动化检测系统逐渐成为智能电网的重要组成部分。

本项目基于 PyQt5 构建可视化操作界面,结合 YOLOv8 的目标检测能力以及 DeepSeek 的图像检索与定位功能,实现对输电线路潜在危险物体的自动识别与报警。通过实时检测鸟巢、气球、风筝和垃圾,系统可以:

提升巡检效率:无人值守即可监控大量线路。

降低安全风险:及时发现隐患,减少电力事故发生。

数据可视化管理:检测结果可在界面中直观呈现,便于后续分析和维护决策。

二.核心技术&知识

在这章我将要介绍本系统的核心技术。

1.PyQt5

PyQt5 是一套用于创建跨平台桌面应用程序的 Python GUI 工具包,它是 Qt 应用框架的 Python 绑定。通过 PyQt5,开发者可以使用 Python 编写具有现代图形界面的应用程序,支持丰富的控件、信号与槽机制、窗口管理、事件处理等功能。它兼容主流操作系统(如 Windows、macOS 和 Linux),适用于开发各种规模的桌面软件,常与 Qt Designer 配合使用以加快开发效率。

2.YOLOv8

YOLOv8(You Only Look Once version 8)是由 Ultralytics 推出的最新一代实时目标检测模型,属于 YOLO 系列的改进版本。相比前代模型,YOLOv8 在精度、速度和灵活性上都有显著提升,支持目标检测、图像分割、姿态估计等多任务处理。它采用了更加高效的网络结构和训练策略,并提供开箱即用的 Python 接口和命令行工具,适用于边缘设备和云端部署,广泛应用于安防监控、自动驾驶、工业检测等场景。

3.DeepSeek

DeepSeek是由深度求索公司开发的AI大模型助手,作为纯文本模型,我擅长自然语言处理、文档分析和智能对话。当与YOLO(You Only Look Once)实时目标检测系统结合时,可以形成强大的多模态应用架构------YOLO系统负责实时视觉识别和目标检测,快速准确地识别图像或视频流中的物体;而我则对YOLO检测到的结果进行深度语义分析和上下文理解,提供物体属性的详细解读、场景描述、行为分析以及决策建议。这种结合使得计算机视觉的"看到"与AI的"理解"完美融合,可广泛应用于智能监控、自动驾驶、工业质检等领域,实现从视觉感知到智能决策的完整闭环。

4.CSV

本系统使用CSV进行数据的存储与数据导出。

CSV(Comma-Separated Values)是一种简单通用的文本文件格式,以纯文本形式存储表格数据。它用逗号分隔不同的字段,每行代表一个数据记录,类似于电子表格或数据库中的行。由于其格式简单、易于读写且兼容性强,CSV被广泛应用于数据交换、导出和存储,支持几乎所有常见的办公软件和编程语言处理,是数据分析和系统间传输结构化信息时最常用的轻量级格式之一。

5.多线程

QThread 是 PyQt5 提供的线程类,用于在界面程序中安全地执行耗时任务,从而避免界面阻塞和卡顿。它允许将数据处理、模型推理、文件读写等操作放到独立线程中运行,并通过信号与槽机制与主线程进行通信,确保界面更新的稳定性与线程之间的安全交互。使用 QThread 可以显著提升应用程序的响应速度,使界面在后台任务执行期间依旧保持流畅,同时具备良好的扩展性与可维护性,在复杂的桌面端应用开发中尤为常用。

6.影像输电的因素

1.鸟巢(nest)

鸟巢对输电线路的影响主要体现在安全稳定性与运维成本两个方面。从物理特性看,鸟类在塔架横梁、绝缘子串顶部或跳线附近筑巢,会改变局部电场分布,使绝缘距离被缩短。当巢材含有潮湿枝叶、金属丝或塑料条等导电、半导电物质时,更容易在潮湿、污闪条件下引发放电,造成相间闪络或接地短路。此外,大型鸟巢的重量可能导致引流板、金具受力异常,长期累积会带来机械隐患。鸟类活动还会产生大量粪污,使绝缘表面形成覆盖层,进一步提升污闪风险。运维方面,鸟巢增加巡视难度,需要定期清理与安装驱鸟装置,不仅提高成本,也可能影响线路停电检修计划。综上,鸟巢虽与自然生态相关,但其在输电线路上形成的电气与机械耦合问题不可忽视,需要通过结构防护、驱鸟技术和智能监测共同管理,以维持输电连续性与供电可靠性。

2.风筝(kite)

风筝对输电线路的影响同样主要集中在电气安全、机械负荷及运维处置等方面。首先,风筝线常由棉线、尼龙线或涂覆金属粉的线材组成,在受潮或出现损伤暴露金属丝时,会显著降低导线与地之间的绝缘水平,诱发放电或接地短路。若风筝骨架使用金属杆件,被风吹挂到导线上,会形成明显的异物短接风险。其次,持续受风力牵引的风筝线可能在导线上缠绕打结,使局部受力集中,导致导线疲劳、股线断裂,甚至形成跳线振动隐患。对于高压线路,风筝在跨越点或城市密集区被卷入,更可能造成跳闸、大面积停电与公共安全事件。运维层面,清除高空异物常需停电作业或动用绝缘斗臂车、无人机,增加处理时间与成本。为降低风险,需要加强公众教育、在重点区域设置警示标识,并辅以输电线路异物监测系统,实现早发现、快处置,从而保障输电系统的稳定与安全。

3.气球(balloon)

气球对输电线路的影响常被公众低估,但在城市与近城乡交界区域却是造成线路跳闸的常见因素之一。普通橡胶气球若放飞后被风带入线路,多在接触导线时爆裂,影响相对较小,但仍可能在瞬间形成局部电场畸变,引发轻微放电。而金属箔气球(如铝膜气球)危害显著更高,其外层具有良好导电性,一旦触碰不同相导线或导线与金具,即可能造成相间短路、电弧放电甚至点燃气球材料,引发导线烧伤与绝缘子损坏。气球的丝带和绑线若缠绕在导线上,会在风力作用下产生摆动与拉拽,导致局部机械应力增加,加速导线磨损。对于高电压等级线路,气球异物可能引起跳闸,影响区域供电可靠性。运维人员通常需通过无人机巡检或停电清除缠绕气球,增加维护成本。为减轻风险,应在重要通道附近加强宣传禁止放飞金属箔气球,并配合建设异物监测系统与防护结构,提高输电线路的运行安全性。

4.垃圾(trash)

垃圾对输电线路的影响主要来自被风卷起或人类活动遗留的轻质杂物,它们往往在恶劣天气下成为潜在异物侵入源。塑料袋、薄膜、旧布条等轻飘物易被气流带上高空,附着在导线、绝缘子或金具上,改变局部电场分布,使绝缘裕度下降,在潮湿、污秽条件下更易出现沿面放电甚至闪络跳闸。若垃圾中含有金属片、金属丝或含炭成分的材料,其导电性会显著提高短路风险。部分体积较大的废弃物,如包装箱、碎泡沫、纸板等,被卷至导线间隙时可能造成相间距离不足,引发瞬时接触或电弧放电,损害导线和绝缘子。机械方面,绳状、丝状垃圾缠绕在导线上,会在风致摆动中对线芯造成局部磨损,长期可能导致股线断裂隐患。运维上,垃圾异物增大巡检和清理成本,尤其在城乡结合部、风口地带更为突出。为降低影响,需要加强线路走廊环境治理、增设防风网或挡护结构,并结合无人机与智能感知系统,实现对异物的快速识别与处置,从而保障输电线路的可靠运行。

三.核心功能

1.登录注册

1.登录

软件启动后首先进入登录页面,用户需要输入正确的用户名和密码才能使用本系统的正式功能,登录页面整体采用了垂直布局,局部采用了水平布局,登录界面简约不简单,登录功能后端采用CSV本地文件存储用户信息,每次登录都是通过查库进行验证的,实现了流程标准化。

我们设计了简约的登录注册界面展示与用户交互的所有组件,登录注册界面的标题展示了系统的名称。

2.注册

没有账号的用户需要进行注册,注册操作流程十分简单,用户点击登录界面的注册按钮就跳转到了注册窗口,用户需要输入自定义的用户名和两次匹配的密码才能完成登录,值得一提的是,成功注册的用户软件会自动填写用户名和密码到登录界面,实现了登录流程路径的简化。

2.主界面

用户通过输入自己的用户名和密码登录到本系统后进入主界面,主界面内容十分丰富,我来一一介绍:首先软件整体是垂直布局,顶部是系统的标题,从左到右依次展示了系统的作者信息、系统名称、当前时间以及CPU内存占用情况,下方为水平布局,左侧是系统的导航区域,我们设计了windows风格支持展开与收缩的内容导航区域,右侧是内容核心区域,通过点击导航按钮切换展示内容,主界面主要展示了以日期为维度统计的数据、用户信息操作按钮、系统信息、系统环境信息以及实时CPU、内存可视化折线图

3.图像检测界面

1.检测结果展示

用户通过点击左侧导航栏按钮切换到图像检测界面,在此界面支持选择图像进行输入,用户选择完之后被选择的图像会展示在左侧并且展示图像绝对路径信息,用户可以通过点击右侧的"进行检测"按钮对输入的图像数据进行检测,系统会自动调用YOLOv8相关算法根据指定的参数对输入图像内容进行检测,最后将检测结果展示到右侧,这样用户可以通过比对左右图像的区别得到直观的检测结果,系统自动使用红色边框框选出目标区域并且使用红色文字展示出目标类别以及它的置信度,这些参数和展示效果都可以在设置页面进行详细设置。

2.导出检测结果

我们设置了检测结果区域,包括检测目标数量的展示以及详细检测结果表格,用户可以更加直观地看到检测结果数据,另外当用户检测结束之后右侧的三个按钮自动设置为可以点击,这三个按钮的作用分别是:

导出结果:用户可以将检测结果进行导出,导出的文件格式可以是Excel、CSV、TXT,可以根据情况自行选择导出格式,我截图给大家看下导出的Excel文件内容格式。

3.可视化展示

然后就是可视化展示,用户可以点击进行可视化按钮,查看对于本次检测的可视化效果,系统内置了四种可视化效果:分别是:目标位置热力图、目标面积占比、置信度分布直方图、检测能力柱状图,这些图标通过不同维度对当前数据进行了可视化展示,更便于用户理解,这里指的一体的是,支持可视化图表进行导出操作,用户可以点击紫色的导出按钮,对当前的可视化效果图表进行导出,生成一张本地的PNG图像文件。

4.AI(DeepSeek)智能分析

将YOLOv8球体检测系统与DeepSeek等AI大模型深度融合,能够实现从"单纯检测"到"智能认知"的跨越式升级。该系统在YOLOv8高效精准的球体定位能力基础上,融入了DeepSeek强大的语义理解和推理决策能力,不仅可以实时识别球体位置,还能深度分析场景语义、生成战术策略并提供智能决策支持,从而在体育分析、工业质检和机器人视觉等领域构建出更加智能化、自适应的一体化解决方案。

这里是软件的另外一个核心:AI智能分析,我们的目标检测系统接入了DeepSeek大模型,支持对当前检测结果数据进行AI分析,AI会通过不同维度对当前检测结果进行多角度分析,最后生成检测结果分析报告,用户可以根据这个结果对系统进行调整,不断完善系统功能和目标检测准确度!

在AI分析结束后下方会展示一些按钮,用户可以方便地复制结果、导出文本内容、生成PDF报告、重新生成以及关闭,多重的操作方式给于用户了多种选择!

4.视频检测界面

1.视频文件检测

我们的系统支持视频内容中的球体检测,支持输入的视频类型包括:视频文件、视频流以及摄像头,通过识别视频画面的内容对内容中的目标球体进行检测,试试标注与展示,通过相关帧率控制保证了视频的流畅性,用户可以通过比对左右两侧的画面使用肉眼评估当前检测结果,我们的视频检测界面拥有图像检测界面相同的操作功能,这里不多赘述。

2.摄像头内容检测

用户点击"进行检测"按钮之后系统会自动调用摄像头,打开摄像头展示摄像头画面,实时检测目标画面中的球体,通过左右画面比对让用户看到检测结果,这里本人就不露脸啦~

5.系统设置界面

我们的系统是支持简单的参数设置的,具体可以设置目标检测模型、置信度阈值(Conf)、交并比阈值(IOU)、还有一些检测结果控制参数,比如检测框展示、目标类别展示、目标置信度展示,用户可以点击绿色的刷新按钮刷新可用模型,亦可通过点击退出按钮退出系统或者退出登录,本设置页面实现了目标检测参数的灵活配置!

6.关于软件界面

我们使用富文本html的形式展示了软件相关的信息,包括系统用到的相关技术,对于二维的数据使用二维表进行了展示,最底部放置了四个按钮,分别是:关于YOLO、关于软件、关于作者、关于QT,点击之后都会弹出对应的信息提示框,这个页面的作用是让用户更多的了解软件和创作者信息,跨过技术的鸿沟!

四.数据集

基于 PyQt5 + YOLOv8 + DeepSeek 的输电隐患检测系统 致力于解决传统输电线路巡检中效率低、人工依赖强、漏检率高等问题。输电线路在复杂地形与多变气候中长期运行,易出现异物挂线、绝缘子破损、金具异常、植被超高等多类隐患;传统巡检方式往往依赖人工图像查看或现场排查,不仅耗时、主观性强,还容易因视角受限或疲劳导致隐患被忽略。

借助 YOLOv8 的实时目标检测能力,系统能够在无人机巡检图像或杆塔设备照片中高效识别各类输电隐患,实现毫秒级推理和高精度定位,大幅提升巡检流程的自动化水平。与此同时引入 DeepSeek 等大模型能力,在图像预处理、场景理解、语义分类与模型策略优化方面提供更强的智能分析支持,使系统在复杂背景、电网设备多样化、光照与天气干扰显著的场景下仍保持稳定性能。

PyQt5 则为巡检人员提供清晰直观的桌面端界面,不仅支持图像批量导入、可视化标注与检测结果展示,还能集成日志管理、模型配置、设备信息录入等功能,使 AI 模型能力真正落地至生产使用场景。

三者结合使得输电线路隐患检测更加智能、高效且可部署,不仅降低了巡检人员的工作强度,也在提升电网安全性、缩短隐患排查周期、增强复杂环境下的运维能力方面展现出显著价值。同时,该系统也为电力行业的图像智能识别、无人机巡检自动化等方向提供了可复用、可扩展的技术框架与实践路径。

1.数据准备

本系统附带800张输电隐患检测系统图像和800个数据标注文件,大家可以根据自己的情况自行训练数据自己的模型!

我们为模型训练准备了几百张输电中的鸟巢、风筝、气球、垃圾图像,然后使用VOC的格式存储数据标注文件,单数据标注文件内容如下:

bash 复制代码
<?xml version="1.0" encoding="utf-8"?>
<annotation>
	<folder>VOC2007</folder>
	<filename>1c.jpg</filename>
	<path>Unknown</path>
	<source>
		<database>The VOC2007 Database</database>
	</source>
	<size>
		<width>1347</width>
		<height>1049</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>nest</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>422</xmin>
			<ymin>99</ymin>
			<xmax>1285</xmax>
			<ymax>1013</ymax>
		</bndbox>
	</object>
</annotation>

2.数据集处理

1.数据集拆分

我们的原始数据集文件包括图像文件和标注文件,两者混合在同一个目录下,这就需要我们手动拆分数据集,目的是将图像和标注文件分开,便于后面的数据划分。

这段脚本用于清理与归类数据集目录中的文件。它会扫描指定根目录下的所有项目,将常见图片格式(JPG、JPEG、PNG)自动移动到新建的 images 文件夹,将 XML 格式的标注文件移动到 annotations 文件夹,其余非文件项会被忽略。整个流程确保目录结构更加规范、清晰,方便后续训练或数据处理。

大家首先执行step1_sp_dataset.py

python 复制代码
import os
import shutil

src_root = r"E:\thunder_download\useful\train"
dst_images = r"E:\thunder_download\useful\extracted_train\images"
dst_labels = r"E:\thunder_download\useful\extracted_train\labels"

os.makedirs(dst_images, exist_ok=True)
os.makedirs(dst_labels, exist_ok=True)

files = os.listdir(src_root)

jpg_count = 0
xml_count = 0

for f in files:
    full_path = os.path.join(src_root, f)

    if f.lower().endswith(".jpg"):
        shutil.copyfile(full_path, os.path.join(dst_images, f))
        jpg_count += 1

    elif f.lower().endswith(".xml"):
        shutil.copyfile(full_path, os.path.join(dst_labels, f))
        xml_count += 1

print(f"完成!共复制 JPG: {jpg_count},XML: {xml_count}")

下图为拆分后的数据集图像文件

下图为数据集标注文件,格式均为xml

2.数据集标注文件类型转换

直接使用VOC格式的数据标注文件进行训练是不行的,需要我们将xml转成txt文件,

这段脚本实现了从 VOC 风格的 XML 标注批量生成 YOLO 所需的 txt 标签文件。程序逐一读取 XML 文件,匹配对应的图像以获取宽高,再提取每个目标的坐标信息,并按 YOLO 格式将框中心点和宽高归一化。所有类别根据预设映射转换为 class id,最终在指定目录下生成同名的 txt 标签,为后续训练 YOLO 模型做好数据准备。

执行下面脚本:step2_yolo_to_txt.py

bash 复制代码
import os
import xml.etree.ElementTree as ET
from PIL import Image

# 原始路径
xml_dir = r"E:\thunder_download\useful\extracted_train\labels"
img_dir = r"E:\thunder_download\useful\extracted_train\images"

# 新建目录用于保存YOLO格式txt
yolo_txt_dir = r"E:\thunder_download\useful\extracted_train\labels_yolo"
os.makedirs(yolo_txt_dir, exist_ok=True)

# 类别映射,YOLO 默认从 0 开始
class_map = {'nest': 0, 'kite': 1, 'balloon': 2, 'trash': 3}

# 遍历XML文件
for xml_file in os.listdir(xml_dir):
    if not xml_file.endswith(".xml"):
        continue

    xml_path = os.path.join(xml_dir, xml_file)
    tree = ET.parse(xml_path)
    root = tree.getroot()

    # 自动按 XML 文件名对应图像名(忽略 XML 内 filename)
    base_name = os.path.splitext(xml_file)[0]
    img_path = None
    for ext in [".jpg", ".jpeg", ".png", ".JPG", ".JPEG", ".PNG"]:
        candidate = os.path.join(img_dir, base_name + ext)
        if os.path.exists(candidate):
            img_path = candidate
            break

    if img_path is None:
        print(f"Warning: {base_name} 对应图像不存在,跳过")
        continue

    w, h = Image.open(img_path).size
    txt_lines = []

    for obj in root.findall("object"):
        name_tag = obj.find("name")
        if name_tag is None:
            continue
        label = name_tag.text
        if label not in class_map:
            continue
        class_id = class_map[label]

        bndbox = obj.find("bndbox")
        xmin = float(bndbox.find("xmin").text)
        ymin = float(bndbox.find("ymin").text)
        xmax = float(bndbox.find("xmax").text)
        ymax = float(bndbox.find("ymax").text)

        # 转 YOLO 格式
        x_center = ((xmin + xmax) / 2) / w
        y_center = ((ymin + ymax) / 2) / h
        box_width = (xmax - xmin) / w
        box_height = (ymax - ymin) / h

        txt_lines.append(f"{class_id} {x_center:.6f} {y_center:.6f} {box_width:.6f} {box_height:.6f}")

    if not txt_lines:
        continue

    txt_file_path = os.path.join(yolo_txt_dir, base_name + ".txt")
    with open(txt_file_path, "w") as f:
        f.write("\n".join(txt_lines))

print(f"转换完成,YOLO TXT 文件保存在: {yolo_txt_dir}")

拆分好之后,朋友们就能拿到可以给YOLO进行训练的YOLO格式数据集标注文件了,格式为TXT。

3.数据集拆分

YOLO 推荐训练集和测试集按 8:2 划分,主要是因为目标检测对样本量非常依赖,需要尽可能多的训练数据来学习特征,同时又必须保留足够的独立测试数据来评估模型的真实泛化能力。8:2 被证明在"训练数据够多"与"测试评估足够稳定"之间取得了较好平衡,因此成为默认且通用的实践比例。
从原始图像与标签目录中随机挑选 200 张图片,并按 8:2 的比例划分为训练集和验证集,然后将对应的图片和标签文件复制到新的数据集结构中。如果某张图片缺少同名的标签 .txt 文件,就为它创建一个空的标签文件,保证数据集结构完整。最终会在目标目录下生成:

执行脚本step3_auto_part.py

bash 复制代码
import os
import random
import shutil

# 原始数据路径
img_dir = r"E:\thunder_download\useful\extracted_train\images"
label_dir = r"E:\thunder_download\useful\extracted_train\labels_yolo"

# 新数据集路径
dataset_dir = r"E:\thunder_download\useful\extracted_train\dataset"
train_img_dir = os.path.join(dataset_dir, "train", "images")
train_label_dir = os.path.join(dataset_dir, "train", "labels")
val_img_dir = os.path.join(dataset_dir, "val", "images")
val_label_dir = os.path.join(dataset_dir, "val", "labels")

# 创建目录
for dir_path in [train_img_dir, train_label_dir, val_img_dir, val_label_dir]:
    os.makedirs(dir_path, exist_ok=True)

# 获取所有图片文件
all_images = [f for f in os.listdir(img_dir) if f.lower().endswith((".jpg", ".png", ".jpeg"))]

# 随机抽取200张
if len(all_images) < 200:
    raise ValueError(f"图片数量不足200张,当前数量: {len(all_images)}")

selected_images = random.sample(all_images, 200)

# 分割训练集和验证集
random.shuffle(selected_images)
val_images = selected_images[:40]
train_images = selected_images[40:]

def copy_files(image_list, target_img_dir, target_label_dir):
    for img_file in image_list:
        # 复制图片
        src_img_path = os.path.join(img_dir, img_file)
        dst_img_path = os.path.join(target_img_dir, img_file)
        shutil.copy(src_img_path, dst_img_path)

        # 对应的txt
        label_file = os.path.splitext(img_file)[0] + ".txt"
        src_label_path = os.path.join(label_dir, label_file)
        if os.path.exists(src_label_path):
            dst_label_path = os.path.join(target_label_dir, label_file)
            shutil.copy(src_label_path, dst_label_path)
        else:
            # 如果没有对应txt文件,创建一个空文件
            open(os.path.join(target_label_dir, label_file), "w").close()

# 复制训练集
copy_files(train_images, train_img_dir, train_label_dir)
# 复制验证集
copy_files(val_images, val_img_dir, val_label_dir)

print(f"随机抽取完成!训练集: {len(train_images)} 张,验证集: {len(val_images)} 张")
print(f"数据集路径: {dataset_dir}")

3.模型训练

数据集准备好之后就可以开始模型训练了,我们首先准备一个训练的配置文件,比如说是data.yaml

然后就可以开始模型训练了,直接执行我们准备好的train.bat文件,内容就是下面的内容

bash 复制代码
yolo task=detect mode=train model=../data/model/yolov8n.pt data=./data.yaml epochs=50 imgsz=640  batch=16 lr0=0.01

然后模型就开始训练了

这里我贴一些训练验证结果截图

最后的results.png见下图,训练效果还是可以的!

bash 复制代码
训练结果总体评价

整体来看,你的训练 收敛良好、mAP 稳步提升、无明显过拟合、loss 曲线健康下降。
从第 30 epoch 开始模型进入 性能平台期(plateau),之后继续缓慢提升到 50 epoch。

最终指标(约 50 epoch):

Precision ≈ 0.92

Recall ≈ 0.74

mAP50 ≈ 0.84

mAP50-95 ≈ 0.63

Val Loss 稳定、无震荡

这些指标在常规检测任务中属于 成绩优秀 的水平。

📈 关键训练趋势分析
1. 损失下降情况(train loss)

box_loss:1.88 → 0.72

cls_loss:4.32 → 0.94

dfl_loss:1.88 → 0.97

➡ 显著下降,收敛稳定。

你在曲线后段(epoch 35 以后)看到的轻微波动属于正常现象,是学习率逐步衰减后的典型表现。

2. 验证损失(val loss)

最终验证 loss:

val_box_loss ≈ 1.75

val_cls_loss ≈ 1.50

val_dfl_loss ≈ 1.78

前 20 epoch 中验证 loss 小幅波动,但整体 并未恶化,说明:

没有明显过拟合。

数据分布稳定且验证集足够代表真实情况。

3. 精度与召回率变化

Precision(精度):从 0.00 → 0.916

Recall(召回):从 0.74 → 0.737(中段有显著上升)

整体来看:

精度最终很高 → 误检少

召回也不错 → 漏检不严重

Recall 高点出现在 20--30 epoch(0.75 左右),后期略微下降到 0.737,但幅度很小。

➡ 模型偏向"更稳更准"的检测策略(precision > recall),整体表现非常均衡。

4. mAP 表现

mAP50:从 0.12 → 0.8388

mAP50-95:从 0.08 → 0.6313

这两个数是评估 YOLO 的核心指标。
最终值说明模型已经达成 优质水平(不少实际项目中 mAP50 > 0.7 即可落地)。

5. 学习率调度

你的 lr/pg0 = lr/pg1 = lr/pg2(每个 epoch 一致),表现如下:

初始:1.12e-4
峰值:~1.0e-3
最终:3.73e-5

这符合 cosine / linear warmup + decay 曲线。

➡ 学习率调度非常健康,没有过冲现象,对训练稳定性帮助很大。

我们的检测系统可以用在的应用场景:
1. 高空漂浮异物实时告警(气球、塑料袋、飘带等)
识别在输电线路附近飘移的气球、薄膜、塑料袋等轻质异物。
这些物体容易挂靠导线或绝缘子,造成跳闸或短路。
YOLOv8 负责实时检测,PyQt5 展示画面与危险距离提示。
DeepSeek 分析漂移方向、风险程度并做出预警说明。
2. 鸟巢隐患识别与处理决策
自动识别杆塔横担、绝缘子串、金具等位置的鸟巢。
适用于:春季集中筑巢期、无人机巡线、固定摄像头巡检。
系统可判断鸟巢规模、区域、占位情况。
DeepSeek 生成风险等级(轻度/中度/重度)及清理方案建议。
3. 风筝线缠绕与悬挂物识别
能精准识别风筝本体和细长风筝线在导线附近的轨迹或挂点。
尤其适合城市、郊区、小孩放风筝高发区域的线路巡检。
PyQt5 实时标注悬挂点位置,给出"距离导线 xx 米"的辅助提示。
DeepSeek 自动生成现场描述与派工建议。
4. 异物挂靠与垃圾残留监测(袋子、布条、纸片等)
检测线路附近或杆塔上附着的零碎垃圾、布条、塑料包装物等。
这些轻质异物被风吹挂在导线或绝缘子上会引发放电、闪络。
YOLOv8 可在视频或图像流中快速锁定异常点位。
DeepSeek 输出隐患说明与处理方式(清理、巡检频次提升等)。
5. 城区线路的异物入侵监控(重点针对风筝+气球)
在学校、广场、公园等区域,风筝和气球入侵是常见隐患。
系统可部署在:
城区杆塔上的固定摄像头
无人机日常巡检
调度中心视频回传分析
PyQt5 前端提供实时告警界面;DeepSeek 对每次警情归类、生成日报。
6. 雷雨大风天气下的特殊异物风险识别
暴风导致气球、塑料布、大件垃圾被吹向线路时尤为危险。
YOLOv8 在低光、复杂天气下依然可识别目标。
DeepSeek 自动判断天气因素对风险的加剧情况并给出加重系数提示。
7. 巡检数据的智能报告化与隐患趋势分析
系统记录:气球出现频率、鸟巢位置、风筝挂点分布、垃圾残留情况等。
DeepSeek 可输出:
高发点位统计
季节性规律分析(风筝春秋、鸟巢春季、气球节假日)
巡检报告一键生成
用于优化巡检策略、加强重点杆塔的监控。

五.项目运行环境

本项目名称为yolov8-power-hazard-detection

1.项目依赖

博主是在Windows电脑上使用Python3.8开发的本系统,建议大家使用的Python版本别太高。

其中项目依赖为:

bash 复制代码
PyQt5==5.15.11
QtAwesome==1.3.1
torch==2.4.1
torchvision==0.19.1
Pillow==9.3.0
pyqtgraph===0.13.3
PyQtWebEngine==5.15.5
opencv-python==4.10.0.82
ultralytics==8.3.234
Requests==2.32.5
pandas==2.0.3
numpy==1.24.4
Markdown==3.4.4

我已经整理到了requirements.txt,大家直接使用命令
pip install -r requirements.txt

即可一键安装项目依赖,其中的torch和torchvision只要匹配即可,不一定非要和博主开发环境的版本一致。

2.项目结构

很多小伙伴担心拿到代码后项目看不懂,这个大家不必担心,我们采用文件+类名对相关功能进行了模块化定义,大家见名知意。

下图博主采用tree命令生成了文件、目录树

bash 复制代码
tree "D:\projects\gitee\2025\yolov8-power-hazard-detection" /f /a
bash 复制代码
D:\PROJECTS\GITEE\2025\yolov8-power-hazard-detection
|   .gitignore
|   main.py(程序入口)
|   record.txt(开发记录)
|   requirements.txt(项目依赖)
|
|
+---script
|       create_qrc.py
|
+---src(源代码核心目录)
|   +---conf(配置内容)
|   |   |   icon_conf.py
|   |   |   style_conf.py
|   |   |   system_conf.py
|   |   |   test_data.py
|   |   |   __init__.py
|   |
|   +---engine(核心引擎)
|   |       engines.py
|   |       __init__.py
|   |
|   +---resource(资源目录)
|   |   |   resource.qrc
|   |   |   resource_rc.py
|   |   |   __init__.py
|   |   |
|   |   \---imgs
|   |           ai.svg
|   |           bg.jpg
|   |
|   +---threads(线程、信号总线)
|   |       main_threads.py
|   |       signal_bus.py
|   |       __init__.py
|   |
|   +---utils(工具方法、工具类)
|   |       custom_utils.py
|   |       user_manager.py
|   |       __init__.py
|   |
|   \---widgets(组件目录)
|           base_widgets.py
|           custom_pages.py
|           custom_widgets.py
|           main_page.py
|           unique_widgets.py
|           __init__.py

六.总结

本次给大家介绍了我使用PyQt5+YOLOv8+DeepSeek的输电隐患检测系统,本系统功能强大,支持多种数据源输入,包含多种用户交互按钮以及模式,内置数据可视化方案、大模型AI加持,是您学习、工作使用的不错选择!

需要代码的朋友可以点击箭头下方的二维码加我好友,欢迎您了解!

相关推荐
YIN_尹1 小时前
目标检测模型量化加速在 openEuler 上的实现
人工智能·目标检测·计算机视觉
棒棒的皮皮6 小时前
【OpenCV】Python图像处理之数字水印
图像处理·python·opencv·计算机视觉
TOYOAUTOMATON8 小时前
自动化工业夹爪
大数据·人工智能·算法·目标检测·机器人
tiger11910 小时前
DeepSeek V3.1 的推理解析
人工智能·llm·推理·moe·decode·deepseek·prefill
Rotion_深10 小时前
平面与平面系统
计算机视觉
FL162386312910 小时前
智慧工地建筑工地常见装备手推车切割机安全帽检测数据集VOC+YOLO格式13364张15类别
深度学习·yolo·机器学习
c#上位机10 小时前
halcon计算区域骨架
图像处理·人工智能·计算机视觉·c#·halcon
大雾的小屋13 小时前
【1-1】基于深度学习的滚动轴承故障诊断系统:从数据处理到交互式界面全流程解析
人工智能·pytorch·深度学习·系统架构·人机交互·pyqt·用户界面
Mrliu__13 小时前
Opencv(十八) : 图像凸包检测
人工智能·opencv·计算机视觉