变电智能巡视目标检测平台
人物识别

调阈值


视频识别


文件夹推理

目录结构设计
text
power_detection_platform/
│
├── main.py # 程序入口
├── ui_main_window.py # 主窗口UI设计
├── detection_worker.py # 检测工作线程
├── yolo_detector.py # YOLO检测器封装
├── utils.py # 工具函数
├── config.py # 配置文件
├── styles.py # 样式文件
│
├── models/ # 模型文件目录
│ └── yolov13n.pt # 默认模型
├── assets/ # 资源文件
│ ├── logo.png # 默认logo
│ └── icons/ # 图标文件
├── logs/ # 日志目录
│ └── 20241217_143022.log # 时间戳命名的日志文件
├── results/ # 检测结果保存目录
└── temp/ # 临时文件目录
示例代码文件
1. config.py
python
"""
配置文件 - 定义常量、路径和默认配置
"""
import os
from datetime import datetime
# 项目根目录
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 颜色配置 - 国网绿色主题
COLORS = {
"国网绿": "#1A8C3A",
"深国网绿": "#0D5A25",
"淡绿色": "#F0F9F0",
"白色": "#FFFFFF",
"边框绿": "#C8E6C9",
"文字灰": "#333333",
"浅灰": "#F5F5F5",
"按钮绿": "#1A8C3A",
"按钮悬停": "#146C2E",
"按钮按下": "#0D4D21"
}
# 路径配置
PATHS = {
"models": os.path.join(BASE_DIR, "models"),
"assets": os.path.join(BASE_DIR, "assets"),
"logs": os.path.join(BASE_DIR, "logs"),
"results": os.path.join(BASE_DIR, "results"),
"temp": os.path.join(BASE_DIR, "temp")
}
# 默认配置
DEFAULT_CONFIG = {
"model": "yolov13n.pt",
"confidence": 0.25,
"iou": 0.45,
"save_results": True
}
# 创建必要的目录
for path in PATHS.values():
os.makedirs(path, exist_ok=True)
# 日志文件路径
LOG_FILE = os.path.join(PATHS["logs"], f"{datetime.now().strftime('%Y%m%d_%H%M%S')}.log")
2. styles.py
python
"""
样式文件 - 定义UI组件的样式
"""
from config import COLORS
# 主窗口样式
MAIN_STYLE = f"""
QMainWindow {{
background-color: {COLORS['白色']};
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
font-size: 12px;
}}
QWidget {{
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
font-size: 12px;
}}
"""
# 标题样式
TITLE_STYLE = f"""
QLabel {{
background-color: {COLORS['国网绿']};
color: {COLORS['白色']};
font-size: 20px;
font-weight: bold;
padding: 12px;
text-align: center;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
}}
"""
# 左侧面板样式
LEFT_PANEL_STYLE = f"""
QFrame {{
background-color: {COLORS['淡绿色']};
border: 1px solid {COLORS['边框绿']};
border-radius: 6px;
margin: 5px;
padding: 8px;
}}
"""
# 组框样式
GROUP_BOX_STYLE = f"""
QGroupBox {{
background-color: {COLORS['淡绿色']};
border: 1px solid {COLORS['边框绿']};
border-radius: 5px;
margin-top: 10px;
padding-top: 12px;
font-weight: bold;
color: {COLORS['文字灰']};
font-size: 12px;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
}}
QGroupBox::title {{
subcontrol-origin: margin;
subcontrol-position: top center;
padding: 0 6px;
background-color: {COLORS['淡绿色']};
}}
"""
# 按钮样式
BUTTON_STYLE = f"""
QPushButton {{
background-color: {COLORS['按钮绿']};
color: {COLORS['白色']};
border: none;
border-radius: 4px;
padding: 6px 12px;
font-weight: bold;
font-size: 11px;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
min-height: 28px;
}}
QPushButton:hover {{
background-color: {COLORS['按钮悬停']};
}}
QPushButton:pressed {{
background-color: {COLORS['按钮按下']};
}}
QPushButton:disabled {{
background-color: #CCCCCC;
color: #999999;
}}
"""
# 工具栏按钮样式
TOOLBAR_BUTTON_STYLE = f"""
QPushButton {{
background-color: {COLORS['按钮绿']};
color: {COLORS['白色']};
border: none;
border-radius: 4px;
padding: 8px 12px;
font-size: 11px;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
min-height: 32px;
}}
QPushButton:hover {{
background-color: {COLORS['按钮悬停']};
}}
QPushButton:pressed {{
background-color: {COLORS['按钮按下']};
}}
"""
# 控制按钮样式
CONTROL_BUTTON_STYLE = f"""
QPushButton {{
background-color: {COLORS['按钮绿']};
color: {COLORS['白色']};
border: none;
border-radius: 5px;
padding: 10px 16px;
font-weight: bold;
font-size: 12px;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
min-height: 36px;
}}
QPushButton:hover {{
background-color: {COLORS['按钮悬停']};
}}
QPushButton:pressed {{
background-color: {COLORS['按钮按下']};
}}
QPushButton:disabled {{
background-color: #CCCCCC;
color: #999999;
}}
"""
# 滑块样式
SLIDER_STYLE = f"""
QSlider::groove:horizontal {{
border: 1px solid {COLORS['边框绿']};
height: 6px;
background: {COLORS['浅灰']};
margin: 1px 0;
border-radius: 3px;
}}
QSlider::handle:horizontal {{
background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 {COLORS['国网绿']}, stop:1 {COLORS['深国网绿']});
border: 1px solid {COLORS['深国网绿']};
width: 16px;
margin: -2px 0;
border-radius: 8px;
}}
"""
# 表格样式
TABLE_STYLE = f"""
QTableWidget {{
border: 1px solid {COLORS['边框绿']};
border-radius: 4px;
gridline-color: {COLORS['边框绿']};
background-color: {COLORS['白色']};
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
font-size: 10px;
}}
QTableWidget::item {{
padding: 4px;
border-bottom: 1px solid {COLORS['边框绿']};
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
}}
QHeaderView::section {{
background-color: {COLORS['国网绿']};
color: {COLORS['白色']};
padding: 6px;
border: none;
font-weight: bold;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
font-size: 10px;
}}
"""
# 标签样式
LABEL_STYLE = f"""
QLabel {{
color: {COLORS['文字灰']};
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
font-size: 11px;
}}
"""
# 状态栏样式
STATUS_STYLE = f"""
QStatusBar {{
background-color: {COLORS['淡绿色']};
color: {COLORS['文字灰']};
border-top: 1px solid {COLORS['边框绿']};
padding: 6px;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
font-size: 10px;
}}
"""
# 显示区域样式
DISPLAY_STYLE = f"""
QLabel {{
border: 1px solid {COLORS['边框绿']};
background-color: {COLORS['浅灰']};
color: {COLORS['文字灰']};
border-radius: 4px;
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
}}
"""
# 进度条样式
PROGRESS_STYLE = f"""
QProgressBar {{
border: 1px solid {COLORS['边框绿']};
border-radius: 5px;
text-align: center;
background-color: {COLORS['浅灰']};
font-family: "Microsoft YaHei UI", "微软雅黑", sans-serif;
}}
QProgressBar::chunk {{
background-color: {COLORS['国网绿']};
border-radius: 5px;
}}
"""
启动说明
- 环境要求
bash
pip install PyQt5 opencv-python numpy
- 启动命令
bash
python main.py
- 控制台输出示例
text
2024-12-17 14:30:22 - __main__ - INFO - 启动变电智能巡视目标检测平台...
2024-12-17 14:30:22 - __main__ - INFO - ============================================================
2024-12-17 14:30:22 - __main__ - INFO - 变电智能巡视目标检测平台启动成功
2024-12-17 14:30:22 - __main__ - INFO - 日志文件位置: /path/to/logs/20241217_143022.log
2024-12-17 14:30:22 - __main__ - INFO - 平台功能:
2024-12-17 14:30:22 - __main__ - INFO - - 支持图片、视频、摄像头、文件夹多种输入源
2024-12-17 14:30:22 - __main__ - INFO - - 可调节置信度和交并比参数
2024-12-17 14:30:22 - __main__ - INFO - - 实时显示检测结果和统计信息
2024-12-17 14:30:22 - __main__ - INFO - - 支持暂停、继续、停止检测操作
2024-12-17 14:30:22 - __main__ - INFO - ============================================================
代码后续开源!!!!