一、项目简介
本项目是轴承表面缺陷检测模型的 Web 端实现。围绕 YOLOv8 在轴承表面缺陷数据集上完成四类缺陷的检测模型训练后,使用 FastAPI 把模型能力封装为可直接登录使用的 Web 检测平台。
平台覆盖从数据准备、模型训练、指标评估,到推理服务、历史沉淀、统计分析的完整链路。除了常规的图片、批量、视频、摄像头检测,还把模型训练搬到了网页上:可以在浏览器里配置超参数发起真实训练,训练中在线调整学习率、查看实时曲线与日志,训练完成后把权重一键应用到检测服务,形成「训练 → 评估 → 检测」的闭环。

图片识别页载入数据集样本后由模型真实推理,输出标注框、类别、置信度、坐标与处置建议。
二、数据说明
1. 数据集来源
数据集为轴承表面缺陷图像,采用 YOLO 检测格式标注,图像为 2000 × 2000 的灰度图,记录轴承套圈表面的凹槽、凹线、擦伤、划痕四类典型缺陷。项目在 datasets/data.yaml 中统一描述数据路径与类别,训练、推理、统计与界面展示共用同一套类别映射。
2. 四类缺陷样本
下图为数据集中四类缺陷的真实样本,直接取自训练集原图:

| 类别编号 | 英文名称 | 中文名称 | 典型成因 |
|---|---|---|---|
| 0 | aocao | 凹槽 | 装配压伤、异物压入或搬运磕碰 |
| 1 | aoxian | 凹线 | 磨削工序磨粒划入或砂轮修整不良 |
| 2 | cashang | 擦伤 | 工序间摩擦、包装硬点或运输振动 |
| 3 | huahen | 划痕 | 硬质异物划擦或工装、量具接触 |
3. 数据规模与标注分布
训练集共 1085 张图像、1085 份标注文件,标注框合计 7818 个:其中凹槽 2760 个、凹线 1294 个、擦伤 2327 个、划痕 1437 个。单张图像的目标数量从 1 个到 21 个不等,类别分布并不均衡,凹槽与擦伤数量明显多于凹线。

训练产物 labels.jpg:类别数量、标注框尺寸、中心点位置与宽高分布。
4. 标注格式与数据划分
标注文件与图像同名,每行描述一个目标:
bash
class_id center_x center_y width height
中心点坐标与宽高均为相对图像尺寸的归一化值(0 ~ 1)。当前数据集只包含训练划分,valid 与 test 目录为空,因此 Web 端在训练页会明确提示「验证集为空」;发起训练时程序按实际存在的目录生成任务级 data.yaml,并在日志中记录该限制,不伪造验证指标。
5. 训练时的数据增强
训练阶段启用 mosaic 等增强策略。下图为训练批次的实际输入,多个样本被拼接为一张图参与训练,并保留数据集自带的真实标注框:

训练产物 train_batch0.jpg:训练批次输入与真实标注,可见 mosaic 拼接与多尺度缩放。
6. 验证集标注与预测对照
训练过程同一批次同时输出标注图与预测图,可直接对照模型在验证集上的定位与分类表现:

训练产物 val_batch0_labels.jpg:验证批次的数据集原始标注。

训练产物 val_batch0_pred.jpg:同一批次模型的预测结果与置信度。

平台内的数据集浏览页按原图比例绘制数据集自带标注框,并给出各类别标注框数量分布。
三、数据处理与分析
1. 数据处理流程
原始标注以归一化坐标保存,训练前由 YOLO 框架统一完成图像缩放、标注转换与批次组装。平台侧则在读取标注时按图像实际宽高还原像素坐标,用于数据集浏览页的可视化,两边共用同一份 data.yaml 类别映射,避免类别错位。
2. 标注质量核验
统计时逐份读取 labels/*.txt,核对图像与标注文件一一对应(1085 张图像对 1085 份标注,无缺失),并统计每个类别的标注框数量与实际图像中的目标分布。类别不均衡是这份数据的客观情况,凹槽与擦伤合计占总标注框的 65%,因此评估时同时关注精确率与召回率,而不只看总体 mAP。
3. 训练与评估
以预训练权重为起点,采用迁移学习减少训练成本;训练过程中逐轮执行验证,记录损失、精确率、召回率、mAP 与学习率,并保存逐轮日志 results.csv、参数快照 args.yaml 与权重文件。
第 50 轮的最终指标:
| 指标 | 数值 | 含义 |
|---|---|---|
| mAP@0.5 | 0.9926 | IoU = 0.5 时的平均精度,衡量整体检测效果 |
| mAP@0.5:0.95 | 0.7274 | 多 IoU 阈值下综合平均精度,对定位质量要求更高 |
| Precision | 0.9915 | 判为缺陷的目标中真实缺陷的占比,反映误检控制 |
| Recall | 0.9864 | 真实缺陷被检出的比例,反映漏检控制 |
峰值为 mAP50 0.9927(第 44 轮)、mAP50-95 0.7274(第 50 轮),末轮与峰值基本重合,说明训练后期已稳定收敛。mAP50-95 与 mAP50 的差距主要来自严格定位标准下的边界框质量,凹槽与擦伤这类面积小、边界模糊的缺陷在更高 IoU 阈值下更容易掉点。

训练产物 results.png:各类损失与评估指标随轮次的变化。

训练产物 PR_curve.png:四类缺陷的精确率--召回率曲线。

训练产物 F1_curve.png:不同置信度阈值下的 F1 值。

训练产物 confusion_matrix.png:类别间的混淆情况。
四、系统功能设计
平台把检测、数据、模型三块能力组织成十个页面,功能入口统一放在左侧分组导航,窄屏折叠为左侧抽屉。
1. 登录与注册
页面中心单栏卡片,登录与注册共用同一张 3 : 4 比例的卡片,标题使用楷体。密码以 PBKDF2 哈希保存,会话通过 Cookie 维持,不同账号分别保存自己的检测记录与模型参数。

2. 图片识别
上传单张轴承表面图片进行检测,输出标注结果图、目标总数、类别数、平均置信度与推理耗时。右侧给出类别分布与目标明细表(类别、置信度、坐标),并按检出缺陷类型给出面向产线的排查建议,支持导出明细 CSV。
3. 批量检测
一次上传多张图片批量推理,逐张汇总目标数与类别分布,并提供整批的类别统计,结果图可单独查看。

4. 视频识别
上传视频后由后台任务逐帧处理,页面实时回显处理进度、帧数与累计统计,完成后可直接播放或下载标注结果视频,也可中途取消任务。

5. 摄像头识别
调用浏览器摄像头实时采集画面,按设定节奏抽帧提交后端推理并回传标注图,累计统计当前会话的目标数与处理帧数,可保存当前画面。

6. 检测历史
检测记录按账号独立保存,支持按类型筛选、按文件名或类别搜索、分页浏览。点击记录可查看结果图、目标明细与当次推理参数,支持导出单条明细与整表 CSV。

7. 统计分析
汇总检测记录数、累计目标数、涉及类别与统计天数,并绘制检测趋势、缺陷类别构成、检测类型构成与每日目标数。所有统计都来自真实检测记录;当记录只覆盖一天时,趋势与每日目标数自动改用柱状呈现,避免折线只有一个点看不出趋势。

8. 模型管理
列出训练产物、上传权重与训练任务产出的权重,显示来源与体积,可一键加载并验证。置信度阈值、IoU 阈值与最大检测数按账号保存,加载失败时保留原可用模型。

9. 模型训练
在网页上配置基线权重、训练轮次、批大小、输入尺寸、学习率与优化器后发起训练。训练以独立子进程真实执行,页面实时显示当前轮次、进度、学习率与 mAP,并绘制实时指标曲线与训练日志。训练中可在线调整初始学习率、安全停止,完成后可下载权重或一键应用到检测服务。

10. 指标展示
读取训练日志中的真实数值,按当前界面主题动态绘制损失、mAP、精确率/召回率与学习率曲线,并提供逐轮指标明细表与记录切换,峰值所在轮次在明细表中单独标记。图表颜色取自主题变量,不直接使用训练框架导出的静态图片。

五、技术栈
| 类别 | 技术 | 用途 |
|---|---|---|
| 编程语言 | Python、JavaScript | 后端服务与前端页面 |
| 模型与框架 | YOLOv8 / PyTorch | 目标检测训练与推理 |
| Web 服务 | FastAPI、Uvicorn | 接口服务与静态资源托管 |
| Web 前端 | 原生模块化 JS、CSS | 页面与交互,无需构建工具 |
| 图像处理 | OpenCV、NumPy | 图像读取、绘制标注、视频逐帧处理 |
| 数据存储 | SQLite | 账号、会话、检测记录与训练任务 |
| 图表 | ECharts | 按主题动态绘制统计与指标图表 |
| 任务调度 | 子进程 + 状态文件 | 训练任务隔离执行与状态回写 |
六、项目结构
| 目录 | 说明 |
|---|---|
config/ |
桌面端全局配置:路径、类别、检测参数 |
core/ |
桌面端推理封装与本地存储 |
ui/ |
PyQt6 桌面端(独立保留) |
datasets/ |
数据集:train 划分与 data.yaml |
轴承缺陷检测训练文件/ |
训练产物:权重、results.csv 与曲线图 |
train.py |
训练入口 |
web/ |
Web 检测平台 |
web/一键启动.bat |
Windows 启动入口 |
web/run.py |
环境检查与 Uvicorn 启动 |
web/main.py |
服务装配与静态资源 |
web/app/ |
配置、数据层、账号会话、接口与后台服务 |
web/static/ |
主题样式、页面脚本、图表与本地资源 |
web/templates/ |
登录页与主界面模板 |
七、运行说明
1. 安装依赖
bash
pip install -r web/requirements.txt
2. 启动 Web 平台
bash
双击 web/一键启动.bat
# 或在 web 目录执行
python run.py
服务默认监听 http://127.0.0.1:8089,使用初始化管理员账号登录。重复启动会提示服务已在运行,端口被其他程序占用时只提示、不结束进程。
3. 重新训练(可选)
bash
python train.py
也可直接在网页的「模型训练」页配置参数发起训练,无需命令行。