news 2026/10/14 10:55:05

深度学习基于YOLOV11无人机航拍输电线路巡检系统 缺陷绝缘子 缺陷阻尼器 铁塔等检测识别 无人机航拍输电线巡检检测数据集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习基于YOLOV11无人机航拍输电线路巡检系统 缺陷绝缘子 缺陷阻尼器 铁塔等检测识别 无人机航拍输电线巡检检测数据集

深度学习基于YOLOV11无人机航拍输电线路巡检系统 缺陷绝缘子 缺陷阻尼器 铁塔等检测识别 无人机航拍输电线巡检检测数据集

航拍输电线巡检检测数据集,10003张,yolo,voc,coco三种标注方式
图像尺寸: 640 * 640
总类别数量: 7 类

===== 图像数量统计 =====
训练集图像总数:7023
验证集图像总数:1993
测试集图像总数:987
数据集全部图像总量:10003

===== 类别完整统计 =====
类别,训练图片数,训练标签数,验证图片数,验证标签数,测试图片数,测试标签数
DSXL - 输电线路,6909,31854,1955,7215,984,3759
QXDS - 缺陷输电线路,1014,1020,227,230,84,84
QXJC - 缺陷绝缘子,3172,3190,689,691,335,343
QXZD - 缺陷阻尼器,531,531,98,101,72,72
TD - 铁塔,6065,6091,1367,1369,615,615
ZJJC - 正常绝缘子,5898,22154,1250,4419,620,2657
ZJZD - 正常阻尼器,5716,19233,1144,3650,597,1684

模型与源代码
采用 YOLOv11n 网络训练
训练轮次:80 个 epoch

提供训练好的yolo11n模型,全部训练 + 测试源代码
训练精度 mAP 效果如图所示

PyQt5 界面功能

界面使用 PyQt5 开发,提供全部源码(.ui、.qrc、.py 及图标文件)
支持图片检测、视频检测、摄像头实时检测
界面实时显示:目标位置、目标总数、置信度等信息
支持检测结果保存导出
操作简单直观,无需命令行
4、运行配置

运行环境:Python=3.8、opencv-python、PyQt5、torch
支持 Windows、Linux 系统

航拍输电线巡检检测数据集

项目详情
数据集名称航拍输电线巡检检测数据集
图像总量10003张
标注格式YOLO、VOC、COCO三种标注格式
图像尺寸640×640
类别总数7类
数据集划分训练集:7023张 验证集:1993张 测试集:987张
类别明细1.输电线路:训练图片6909张,训练标签31854;验证图片1955张,验证标签7215;测试图片984张,测试标签3759 2.缺陷输电线路:训练图片1014张,训练标签1020;验证图片227张,验证标签230;测试图片84张,测试标签84 3.缺陷绝缘子:训练图片3172张,训练标签3190;验证图片689张,验证标签691;测试图片335张,测试标签343 4.缺陷阻尼器:训练图片531张,训练标签531;验证图片98张,验证标签101;测试图片72张,测试标签72 5.铁塔:训练图片6065张,训练标签6091;验证图片1367张,验证标签1369;测试图片615张,测试标签615 6.正常绝缘子:训练图片5898张,训练标签22154;验证图片1250张,验证标签4419;测试图片620张,测试标签2657 7.正常阻尼器:训练图片5716张,训练标签19233;验证图片1144张,验证标签3650;测试图片597张,测试标签1684
模型信息YOLOv11n网络训练,80个epoch;提供训练完成权重,全套训练+测试源代码
PyQt5可视化界面全套源码包含.ui、.qrc、.py、图标资源文件;支持图片、视频、摄像头实时检测;实时展示目标位置、目标数量、置信度;可保存导出检测结果;图形化操作,无需命令行
运行环境Python3.8,opencv-python、PyQt5、torch;兼容Windows、Linux系统
应用场景无人机航拍输电线路巡检,电力铁塔、输电线、绝缘子、阻尼器的缺陷智能识别,电网运维、电力AI目标检测算法研究
数据集价值覆盖输电线路多种核心构件的正常与缺陷样本,适配航拍复杂野外背景,可用于电力巡检AI模型研发;配套完整GUI检测系统,可快速部署为桌面检测工具,减少人工高空巡检风险,提升电网故障排查效率,适用于科研论文、工程项目、教学实训。

构建系统完整代码

1、环境安装命令

pip install ultralytics torch opencv-python pyqt5 numpy

2、数据集yaml配置文件powerline.yaml

path: ./powerline_dataset train: images/train val: images/val test: images/test names: 0: 输电线路 1: 缺陷输电线路 2: 缺陷绝缘子 3: 缺陷阻尼器 4: 铁塔 5: 正常绝缘子 6: 正常阻尼器

3、模型训练代码train.py

from ultralytics import YOLO if __name__ == '__main__': model = YOLO("yolo11n.pt") train_result = model.train( data="powerline.yaml", epochs=80, imgsz=640, batch=16, device=0, save=True, save_txt=True, save_conf=True ) print("训练完成,权重文件保存在 runs/detect/train/weights/best.pt")

4、PyQt5主界面代码main_window.py

import sys import cv2 import time from PyQt5.QtWidgets import (QApplication, QMainWindow, QFileDialog, QLabel, QPushButton, QTableWidget, QTableWidgetItem, QHeaderView) from PyQt5.QtGui import QImage, QPixmap from PyQt5.QtCore import Qt from ultralytics import YOLO class PowerLineDetectUI(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("航拍输电线巡检检测系统") self.resize(1350, 880) self.model = YOLO("best.pt") self.result_img = None # 图片显示区域 self.label_img = QLabel(self) self.label_img.setGeometry(30, 30, 750, 620) self.label_img.setStyleSheet("border:1px solid #555;") # 按钮 self.btn_img = QPushButton("导入图片", self) self.btn_img.setGeometry(820, 40, 180, 45) self.btn_img.clicked.connect(self.load_image) self.btn_video = QPushButton("导入视频", self) self.btn_video.setGeometry(820, 100, 180, 45) self.btn_video.clicked.connect(self.load_video) self.btn_camera = QPushButton("开启摄像头", self) self.btn_camera.setGeometry(820, 160, 180, 45) self.btn_camera.clicked.connect(self.open_camera) self.btn_save = QPushButton("保存检测结果", self) self.btn_save.setGeometry(820, 220, 180, 45) self.btn_save.clicked.connect(self.save_result) self.btn_exit = QPushButton("退出", self) self.btn_exit.setGeometry(820, 280, 180, 45) self.btn_exit.clicked.connect(self.close) # 结果信息展示 self.label_info = QLabel("用时:0 s | 目标总数:0", self) self.label_info.setGeometry(820, 340, 320, 30) # 结果表格 self.table = QTableWidget(self) self.table.setGeometry(30, 670, 1280, 180) self.table.setColumnCount(5) self.table.setHorizontalHeaderLabels(["序号", "文件路径", "类别", "置信度", "目标坐标"]) self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) def detect_image(self, img_bgr): t_start = time.time() pred = self.model(img_bgr)[0] t_end = time.time() cost_time = round(t_end - t_start, 3) boxes = pred.boxes # 绘制检测框 img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) for box in boxes: x1, y1, x2, y2 = map(int, box.xyxy[0]) cls_id = int(box.cls[0]) conf = float(box.conf[0]) cls_name = self.model.names[cls_id] cv2.rectangle(img_rgb, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img_rgb, f"{cls_name} {conf:.2f}", (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) self.result_img = img_rgb self.label_info.setText(f"用时:{cost_time} s | 目标总数:{len(boxes)}") # 渲染图片 h, w, c = img_rgb.shape qimg = QImage(img_rgb.data, w, h, c * w, QImage.Format_RGB888) self.label_img.setPixmap(QPixmap.fromImage(qimg).scaled(self.label_img.size(), Qt.KeepAspectRatio)) # 填充表格 self.table.setRowCount(len(boxes)) for index, box in enumerate(boxes): x1, y1, x2, y2 = map(int, box.xyxy[0]) cls_id = int(box.cls[0]) conf = float(box.conf[0]) cls_name = self.model.names[cls_id] pos = f"[{x1},{y1},{x2},{y2}]" self.table.setItem(index, 0, QTableWidgetItem(str(index + 1))) self.table.setItem(index, 1, QTableWidgetItem("")) self.table.setItem(index, 2, QTableWidgetItem(cls_name)) self.table.setItem(index, 3, QTableWidgetItem(f"{conf:.3f}")) self.table.setItem(index, 4, QTableWidgetItem(pos)) def load_image(self): file_path, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "图片(*.jpg *.png *.jpeg *.bmp)") if not file_path: return img = cv2.imread(file_path) self.detect_image(img) def load_video(self): file_path, _ = QFileDialog.getOpenFileName(self, "选择视频", "", "视频(*.mp4 *.avi *.mov)") cap = cv2.VideoCapture(file_path) while cap.isOpened(): ret, frame = cap.read() if not ret: break self.detect_image(frame) QApplication.processEvents() cap.release() def open_camera(self): cap = cv2.VideoCapture(0) while cap.isOpened(): ret, frame = cap.read() if not ret: break self.detect_image(frame) QApplication.processEvents() cap.release() def save_result(self): if self.result_img is None: return save_path, _ = QFileDialog.getSaveFileName(self, "保存结果图片", "result.jpg", "图片(*.jpg *.png)") if save_path: cv2.imwrite(save_path, cv2.cvtColor(self.result_img, cv2.COLOR_RGB2BGR)) if __name__ == '__main__': app = QApplication(sys.argv) window = PowerLineDetectUI() window.show() sys.exit(app.exec())

5、单图推理脚本predict.py

from ultralytics import YOLO model = YOLO("best.pt") res = model.predict(source="test.jpg", save=True, conf=0.5) for result in res: for box in result.boxes: cls_name = result.names[int(box.cls)] conf = box.conf.item() xyxy = box.xyxy.tolist() print(f"类别:{cls_name},置信度:{conf:.3f},坐标:{xyxy}")

配套包含ui界面文件,可自行用Qt Designer绘制界面生成.ui、.qrc资源文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 10:54:54

线性表教学闭环:C语言顺序表实现与学生易错点避坑指南

简介:本资源是哈尔滨金融学院计算机系系统教研室为2011级信息管理专业学生编写的《数据结构教案(精品)》,面向高校数据结构初学者与一线授课教师,聚焦线性表核心内容的教学设计与实操落地。教案以C语言为实现载体&…

作者头像 李华
网站建设 2026/10/14 10:54:33

APS排产系统落地指南:有限产能建模与紧急插单处理

简介:易普优APS.docx是一份面向制造企业信息化从业者、生产计划员及智能工厂建设者的专业文档,聚焦高级计划排程系统在智能工厂中的落地应用。内容围绕中国制造2025背景下APS与PLM、ERP、CRM、SCM、MES五大核心系统的集成关系展开,剖析需求计…

作者头像 李华
网站建设 2026/10/14 10:54:14

通过 AUX 通道调试 DP Link Traning

1. Link Traning 流程 DP Sink 内部有一组标准寄存器,称为 DPCD(DisplayPort Configuration Data)。当 DisplayPort Source 和 Sink 建立连接后,Source 会通过 AUX(Auxiliary)通道读取和配置 Sink 的 DPCD…

作者头像 李华
网站建设 2026/10/14 10:54:13

轻量级折叠组件 ponytail:告别长文本截断与展开难题

1. 为什么会有 ponytail:它到底在解决什么问题1.1 拿“展开全文”当需求的人,都经历过什么先说一个场景:网站首页要放十几条资讯卡片,每条卡片展示 200 字的摘要,超出部分折叠。需求听起来很简单,但真做起来…

作者头像 李华
网站建设 2026/10/14 10:54:06

Spring容器初始化原理与优化实践详解

1. 容器初始化过程概述 在基于SpringSpringMVC的Java Web项目中,容器初始化是整个应用启动的核心环节。作为从业十余年的老手,我见过太多因为不理解容器初始化原理而导致的配置错误和性能问题。今天我们就来彻底拆解这个看似简单实则暗藏玄机的过程。 当…

作者头像 李华
网站建设 2026/10/14 10:53:53

Kubernetes中Jenkins插件路径查询与运维指南

1. Jenkins插件路径查询需求背景在Kubernetes集群中运行的Jenkins实例,其插件管理方式与传统物理机或虚拟机部署存在显著差异。由于容器化环境的动态特性,插件存储路径往往隐藏在Pod内部,这对日常运维中的插件调试、版本核对和故障排查带来挑…

作者头像 李华