基于 YOLOv8 的轴承缺陷检测系统
基于 YOLOv8 的轴承缺陷检测系统
一、项目简介
本系统基于 YOLOv8 深度学习目标检测模型和 PyQt6 图形界面框架开发,是一款面向轴承表面缺陷智能识别的桌面应用。系统提供从模型训练、多源输入检测到结果可视化、历史追溯的完整功能链路,适用于工业质检辅助、课程设计、毕业设计答辩及算法学习场景。
二、核心功能介绍
1. 模型训练模块 (train.py)
- 基于 YOLOv8 训练轴承缺陷检测模型
- 自动保存训练日志(results.csv)
- 自动生成可视化图表(混淆矩阵、PR 曲线、F1 曲线等)
- 保存最佳权重(best.pt)和最终权重(last.pt)
- 支持自定义训练参数(epoch、batch、图像尺寸等)和数据增强
2. 检测功能
图片检测
- 支持 JPG、PNG、BMP 等常见图片格式
- 左侧预览原图,右侧展示检测结果
- 实时统计各类缺陷数量
- 可调节置信度阈值
- 支持保存标注结果

视频检测
- 支持 MP4、AVI、MOV、MKV 等视频格式
- 实时逐帧检测并显示
- 统计整个视频的缺陷总数
- 支持录制检测结果视频
- 显示帧数和 FPS 信息
摄像头检测
- 支持多个摄像头设备
- 实时检测与显示
- 支持拍照和录制功能
- 实时统计缺陷数量,可重置统计数据
3. 历史记录管理
- 自动记录所有检测历史
- 按检测类型筛选(图片 / 视频 / 摄像头)
- 显示检测时间、来源、模型、检测数量
- 支持清空历史记录

4. 模型管理
- 查看当前使用模型
- 列出所有可用模型
- 支持模型切换与添加新模型
- 默认使用最佳训练权重

5. 指标可视化
- 展示训练过程生成的可视化图表
- 包含混淆矩阵、PR 曲线、F1 曲线等
- 网格布局清晰展示,支持刷新更新

6. 用户系统
- 登录 / 注册功能
- 本地存储用户数据
- 密码验证与用户信息显示

三、技术栈介绍
| 类别 | 技术 / 库 | 用途说明 |
|---|---|---|
| 深度学习 | YOLOv8 (ultralytics) | 目标检测模型,基于 PyTorch |
| GUI 框架 | PyQt6 | 图形界面开发 |
| 图像处理 | OpenCV | 图像读取、视频流处理、绘图 |
| 图像处理 | Pillow | 图像格式转换与处理 |
| 数值计算 | NumPy | 数组运算与数据处理 |
| 序列化 | dill | 对象序列化(用于模型相关) |
架构设计:采用 config / core / ui 三层结构,界面层调用业务逻辑层,业务逻辑层访问数据层,模块低耦合、易扩展。
四、项目结构

c89/
├── main.py # 程序入口
├── train.py # 模型训练脚本
├── requirements.txt # 依赖列表
├── 启动系统.bat # 启动快捷方式
├── 项目说明.md # 本文档
│
├── config/ # 配置模块
│ ├── __init__.py
│ └── config.py # 全局配置(路径、参数、类别等)
│
├── core/ # 核心业务模块
│ ├── __init__.py
│ ├── detector.py # YOLO 检测器封装
│ └── storage.py # 用户与历史记录存储
│
├── ui/ # 界面模块
│ ├── __init__.py
│ ├── login_window.py # 登录注册窗口
│ ├── main_window.py # 主窗口框架
│ ├── styles.py # 统一样式管理
│ └── widgets/ # 功能组件
│ ├── image_detect.py # 图片检测
│ ├── video_detect.py # 视频检测
│ ├── camera_detect.py # 摄像头检测
│ ├── history_widget.py # 历史记录
│ ├── model_select.py # 模型选择
│ └── metrics_widget.py # 指标可视化
│
├── data/ # 数据目录(自动生成)
│ ├── users.json # 用户数据
│ ├── detection_history.json # 检测历史
│ └── detection_results/ # 检测结果文件
│
├── datasets/ # 数据集目录
│ └── data.yaml # 数据集配置
│
├── 轴承缺陷检测训练文件/ # 训练产物
│ ├── weights/
│ │ ├── best.pt # 最佳权重
│ │ └── last.pt # 最终权重
│ ├── results.csv # 训练日志
│ └── *.png / *.jpg # 可视化图表
五、数据库设计
系统采用 JSON 文件进行本地数据持久化,无需安装数据库。
5.1 用户表 (users.json)
存储用户账号信息。
{
"用户名": {
"password": "密码明文",
"created_at": "注册时间 (YYYY-MM-DD HH:MM:SS)"
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
| 用户名 | key | 唯一标识 |
| password | string | 用户密码 |
| created_at | string | 注册时间 |
5.2 检测历史表 (detection_history.json)
存储每次检测的完整记录。
[
{
"id": 1,
"type": "图片检测|视频检测|摄像头检测",
"source": "文件路径或来源描述",
"model": "模型文件名",
"time": "检测时间 (YYYY-MM-DD HH:MM:SS)",
"total_detections": 5,
"detections": [
{
"class_id": 0,
"class_name": "凹槽",
"confidence": 0.95,
"bbox": [x1, y1, x2, y2]
}
]
}
]
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 自增记录 ID |
| type | string | 检测类型 |
| source | string | 输入来源(文件路径等) |
| model | string | 使用的模型文件名 |
| time | string | 检测时间 |
| total_detections | int | 检测到的缺陷总数 |
| detections | array | 每条检测详情 |
| detections[].class_id | int | 类别 ID(0–3) |
| detections[].class_name | string | 类别名称 |
| detections[].confidence | float | 置信度 |
| detections[].bbox | array | 边界框 [x1,y1,x2,y2] |
5.3 缺陷类别
| ID | 类别名 | 英文名 | 颜色标记 |
|---|---|---|---|
| 0 | 凹槽 | aocao | 红色 |
| 1 | 凹线 | aoxian | 绿色 |
| 2 | 擦伤 | cashang | 蓝色 |
| 3 | 划痕 | huahen | 黄色 |





六、数据流程
检测流程
用户选择输入源 → 调整参数 → 点击检测
↓
加载 YOLO 模型 → 执行推理 → 后处理 (NMS)
↓
绘制检测框 → 更新界面显示 → 统计结果
↓
保存到历史记录 → 可选保存结果文件
训练流程
准备数据集 → 配置 data.yaml → 运行 train.py
↓
YOLOv8 训练 → 生成日志和图表 → 保存权重
↓
验证模型 → 输出指标 → 完成
七、文件存储说明
数据目录:data/ 下自动生成 users.json、detection_history.json、detection_results/(图片结果、视频录制、摄像头拍照等)。
训练结果:runs/train_yyyymmdd_hhmmss/ 或指定目录,包含 weights/、results.csv、混淆矩阵、PR 曲线等图表。





八、快速开始
- 安装依赖:双击
安装依赖.bat或执行pip install -r requirements.txt - 启动系统:双击
启动系统.bat或执行python main.py - 首次使用:注册账号(用户名≥3 字符,密码≥6 字符)→ 登录 → 使用各项功能
- 训练模型(可选):执行
python train.py
九、系统要求
- 硬件:CPU Intel i5 及以上,内存 8GB 以上,推荐 NVIDIA GPU(CUDA 加速)
- 软件:Windows 10/11,Python 3.8+,可选 CUDA 11.0+
- 摄像头:用于摄像头检测功能(可选)
本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。
作者原创项目地址:michael-jay.pages.dev/projects.html
浙公网安备 33010602011771号