1 项目概述
本项目旨在利用 YOLOv5 算法对遥感图像中的目标进行识别,并将识别过程集成到一个基于 PySide6 框架的GUI界面中。用户可以通过GUI界面选择图像、视频或摄像头输入,进行目标检测,并查看检测结果。项目支持多种模型切换、置信度和IOU阈值调整、目标类别筛选等功能。
2 项目结构
project/
├── GUI.py # 主界面代码,基于PySide6的GUI实现
├── Model.py # YOLOv5模型加载和推理的核心代码,主要包括v5模型的封装
├── utils/ # 工具函数和辅助模块
│ ├── plots.py # 绘制检测框和标签的工具
│ ├── general.py # 通用工具函数(如NMS、图像缩放等)
│ ├── torch_utils.py # PyTorch相关工具函数
│ └── augmentations.py # 数据增强工具
├── weights/ # 存放模型输出.pt文件的路径,对应代码里的 model_dir 路径
│ └── best.pt # 实际模型文件
└── README.md # 项目说明文档
3 实现的功能
- 图像检测:支持用户选择本地图像文件进行目标检测,检测结果实时显示在GUI界面中。
- 视频检测:支持用户选择本地视频文件进行目标检测,检测结果实时显示在GUI界面中。
- 摄像头检测:支持调用电脑摄像头进行实时目标检测,检测结果实时显示在GUI界面中。
- 模型切换:支持用户从本地模型目录中选择不同的YOLOv5模型进行检测。
- 置信度和IOU阈值调整:用户可以通过GUI界面调整置信度和IOU阈值,优化检测结果。
- 目标类别筛选:用户可以选择特定的目标类别进行筛选,只显示指定类别的检测结果。
- 检测结果保存:支持将检测后的图像、视频或摄像头检测结果保存到本地。
- 检测目标定位:支持用户鼠标点击选中出现再界面里的任何目标,将持续跟踪选中目标的相对位置并输出。
4 环境配置
4.1 依赖库安装
在运行本项目之前,请确保已安装以下依赖库:
pip install PySide6
pip install torch
pip install opencv-python
pip install numpy
pip install pillow
注:若要进行 yolov5
项目的构建,参考下面方法
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
4.2 模型权重文件
请将YOLOv5训练后输出的模型权重文件(.pt
文件)放置在weights/
目录下,并在GUI.py
中指定模型路径。
若没有 weights
文件夹就自行创建,放在项目根目录下。
5 使用说明
-
启动GUI界面:
进入项目文件夹,运行GUI.py
文件,启动基于PySide6
的 GUI 界面。python GUI.py
-
选择输入源:
- 图像检测:点击“选择图片”按钮,选择本地图像文件进行检测。
- 视频检测:点击“选择视频”按钮,选择本地视频文件进行检测。
- 摄像头检测:点击“打开摄像头”按钮,调用电脑摄像头进行实时检测。
-
调整检测参数:
- 在“检测参数设置”区域,调整置信度
conf
和IOU
阈值。 - 在“目标选择”下拉菜单中,选择特定的目标类别进行筛选。
- 在“检测参数设置”区域,调整置信度
-
开始检测:
点击“开始检测”按钮,开始对输入源进行目标检测。检测结果将实时显示在界面中。
-
保存检测结果:
点击“保存”按钮,将检测后的图像、视频或摄像头检测结果保存到本地。
6 代码结构说明
6.1 GUI.py
- MyWindow类:主窗口类,负责构建GUI界面和处理用户交互。
__init__
:初始化GUI界面,设置布局和控件。detect
:统一处理图像、视频和摄像头的检测逻辑。select_image
、select_video
、select_camera
:分别处理图像、视频和摄像头的选择逻辑。start_pred_image
、start_pred_video
、start_pred_camera
:分别处理图像、视频和摄像头的检测逻辑。save_results
:保存检测结果的统一函数。
代码初始化如下:
class MyWindow(QWidget):
def __init__(self):
super().__init__() # 初始化继承的QWidget属性
# 初始化模型
self.weight = r'C:\Users\27447\Desktop\model\best.pt' # 初始化的权重路径
self.model_dir = r'C:\Users\27447\Desktop\model' # 初始化模型存放的地址
self.model = YOLOModel(weights_path=self.weight)
self.conf = 0.25
self.iou = 0.45
self.fps = 40 # 设置摄像头和检测的帧率上限
self.model_paths = None # 初始化当前选择的模型
self.isConf = True # 默认检测时显示类别和置信度都显示
self.displayed_image = None # 初始化qimage
self.original_image = None # 初始化上传的图像
self.selected_image_path = None # 初始化图像的本地路径
self.original_image_width = 0 # 默认初始目标长宽为0
self.original_image_height = 0
# 初始化其他变量
self.timer = QTimer()
self.timer.setInterval(40)
self.video = None # 初始化视频
self.camera = None # 初始化摄像头
self.condition_image = 0 # 默认没有上传照片
self.condition_video = 0 # 默认没有上传视频
self.condition_camera = 0 # 默认没有打开摄像头
self.save_image = 0 # 默认没有权限保存检测图像
self.save_video = 0 # 默认没有权限保存检测视频
self.save_camera = 0 # 默认没有保存摄像头检测结果的权限
self.save_camera = 0 # 默认没有保存摄像头拍摄的权限
self.detect_image = None
self.detected_frames = [] # 初始化变量,保存摄像头检测的帧
self.class_mapping = { # 定义类别映射
'行人(pedestrian)': 'pedestrian',
'人(people)': 'people',
'自行车(bicycle)': 'bicycle',
'小汽车(car)': 'car',
'面包车(van)': 'van',
'卡车(truck)': 'truck',
'三轮车(tricycle)': 'tricycle',
'遮阳棚三轮车(awning-tricycle)': 'awning-tricycle',
'公交车(bus)': 'bus',
'摩托车(motor)': 'motor'
}
# 设置窗口
self.setGeometry(0, 0, 1008, 690)
self.setWindowTitle('遥感目标检测平台')
# 设置整体样式
self.setStyleSheet("""
QWidget {
background-color: #121212;
color: #FFFFFF;
}
QGroupBox {
border: 2px solid #343434;
border-radius: 5px;
margin-top: 10px;
}
QGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 3px 0 3px;
background-color: #121212;
}
QLabel {
color: #FFFFFF;
}
QPushButton {
background-color: #1E1E1E;
border: 2px solid #3A3A3A;
border-radius: 5px;
padding: 5px;
}
QPushButton:hover {
background-color: #2C2C2C;
}
QPushButton:pressed {
background-color: #3A3A3A;
}
QComboBox {
background-color: #1E1E1E;
border: 1px solid #3A3A3A;
border-radius: 5px;
padding: 3px;
color: #FFFFFF;
}
QCheckBox {
color: #FFFFFF;
}
QTextEdit {
background-color: #1E1E1E;
border: 1px solid #3A3A3A;
color: #FFFFFF;
}
QLineEdit {
background-color: #1E1E1E;
border: 1px solid #3A3A3A;
color: #FFFFFF;
}
QToolTip {
background-color: #2C2C2C;
color: #FFFFFF;
border: 1px solid #FFFFFF;
}
""")
# 标题标签
self.lb = QLabel(self)
self.lb.setText('遥感目标检测平台')
self.lb.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter)
self.lb.setStyleSheet("color: white; font-weight: bold; background-color: transparent;")
self.font = QFont("Arial", 20, QFont.Bold)
self.font.setPointSize(14)
self.lb.setFont(self.font)
self.lb.setGeometry(200, 10, 581, 20)
# 设置标题字体颜色和其它样式
# self.lb.setStyleSheet("color: white; font-weight: bold;")
6.2 Model.py
YOLOModel
类:负责加载YOLOv5模型并进行推理与封装。__init__
:初始化模型,加载权重文件。_load_model
:加载YOLOv5模型。preprocess_image
:对输入图像进行预处理。predict
:使用YOLOv5模型进行推理。postprocess
:处理模型输出,绘制检测框并返回检测结果。detect
:对图像或视频帧进行检测,返回检测后的图像。
未来改进方向
- 多模型支持:支持更多类型的YOLO模型(如YOLOv7、YOLOv8等)。
- 性能优化:优化视频和摄像头检测的性能,减少延迟。
- 更多功能:添加目标跟踪、目标计数等功能。
- 跨平台支持:支持在Linux和macOS系统上运行。
若想获取源码,可私信本人,或关注微信公众号 咚叶的小铺,欢迎大家来交流!