🛠 技术栈组成
- 核心框架
- PySide6:基于Qt的Python GUI框架,实现可视化界面(窗口、按钮、进度条等组件)
- YOLOv8:Ultralytics提供的轻量级目标检测模型,快速识别道路缺陷
- OpenCV:处理图像/视频的读取、标注和保存
- 辅助工具
- 多线程:
QThread处理后台任务,避免界面卡顿(例:批量检测时不冻结界面) - 文件管理:
os和shutil库实现自动创建结果文件夹、重命名文件 - 数据统计:动态计算置信度、缺陷数量等指标
📋 核心功能模块
1. 双模式检测引擎
# ui_components.py 中模式切换
def on_mode_changed(self, button):
if button == self.folder_mode_radio:
self.current_detection_mode = "folder"
self.predict_button.setText("开始批量检测")
else:
self.current_detection_mode = "single"
self.predict_button.setText("开始检测图片")
- 学生可学点
- 如何通过单选按钮控制程序逻辑
- 界面组件动态切换的实现(显示/隐藏文件夹选择框)
2. 图像处理流程
- 关键代码
# file_processor.py 中图片检测
results = self.model.predict(source=image_file, imgsz=640, conf=0.5)
results[0].save(filename=output_file) # 保存带标注的结果图
- 技术细节
- YOLO模型的输入输出格式处理
- OpenCV与PySide6的QPixmap图像格式转换
3. 视频流处理
- 实现原理
- 使用OpenCV逐帧读取视频
- 每10帧调用一次YOLO预测(平衡性能与实时性)
- 用MP4V编码器保存处理后的视频
# 视频写入设置(file_processor.py)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
4. 数据统计面板
- 动态更新逻辑
# ui_components.py 中统计更新
def update_stats_display(self):
avg_conf = self.stats["confidence_sum"] / self.stats["confidence_count"] * 100
self.confidence_avg_label.setText(f"平均置信度: {avg_conf:.1f}%")
- 学习价值
- 多线程中信号(Signal)与槽(Slot)的数据传递
- 实时数据可视化的实现思路
📂 代码结构速览
├── app.py # 程序入口(启动+样式配置)
├── ui_components.py # 主界面逻辑(按钮/布局/事件)
├── file_processor.py # 文件处理核心(多线程/模型调用)
└── config.py # 参数配置(路径/模型/界面尺寸)