ZK1346/industrial-defect-detection

GitHub: ZK1346/industrial-defect-detection

该项目实现了基于 PatchCore 无监督异常检测和规则式计算机视觉的两种工业瓶盖缺陷检测方案。

Stars: 0 | Forks: 0

# 工业缺陷检测 - PatchCore 与基于规则的方法 [![Python](https://img.shields.io/badge/Python-3.8+-blue.svg)](https://www.python.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) ## 📖 项目概述 本项目实现了两种用于工业制造产品质量检测的缺陷检测方法: 1. **基于 PatchCore 的异常检测**:一种使用 ResNet 风格局部描述符的记忆库方法,用于无监督异常检测 2. **基于规则的检测**:使用颜色分割、形状检测和几何约束的传统计算机视觉方法 这两种方法均可应用于从视频流中检测瓶盖和容器上的缺陷。 ## ✨ 功能特性 ### 方法 1:使用 ResNet 风格描述符的 PatchCore - **无监督学习**:仅在正常样本上进行训练 - **局部特征提取**:多通道描述符(HSV、LAB、梯度、纹理) - **记忆库 + Coreset 采样**:高效的特征存储与检索 - **时序投票**:通过时序平滑实现稳定的预测 - **热力图可视化**:Patch 级别的异常分数可视化 ### 方法 2:基于规则的检测 - **颜色分割**:基于 HSV 的特定颜色检测(黄色盖、蓝色盖) - **形状检测**:圆形检测与边界框跟踪 - **几何约束**:位置验证与空间推理 - **多重检验验证**:针对每个产品的多重检测标准 - **稳定投票机制**:通过时序一致性减少误报 ## 📁 项目结构 ``` . ├── configs/ │ └── assignment03.yaml # Configuration file (video paths, parameters) ├── scripts/ │ ├── run_patchcore_resnet_style.py # PatchCore implementation │ └── render_stable_v2.py # Rule-based inspection ├── outputs/ │ ├── frames/ # Saved frame examples │ ├── metrics/ # Performance metrics and summaries │ ├── models/ # Trained memory banks │ └── videos/ # Output demo videos ├── data/ # Place your video files here │ ├── case2.mp4 # Case 2: Round cap inspection │ └── case4.mp4 # Case 4: Four small-cap inspection ├── requirements.txt # Python dependencies └── README.md # This file ``` ## 🚀 安装说明 ### 前置条件 - Python 3.8 或更高版本 - pip 包管理器 ### 安装步骤 1. 克隆代码库: ``` git clone cd ``` 2. 创建虚拟环境(推荐): ``` python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate ``` 3. 安装依赖项: ``` pip install -r requirements.txt ``` ## 📝 配置说明 在运行脚本之前,请更新 `configs/assignment03.yaml` 中的视频路径: ``` cases: case2: video: "data/case2.mp4" # Update this path train_range_sec: [0, 120] test_range_sec: [350, 390] roi: [650, 260, 420, 420] # ... other parameters case4: video: "data/case4.mp4" # Update this path # ... other parameters ``` 同时请更新 `scripts/render_stable_v2.py` 中的视频路径: ``` CASE2_VIDEO = "data/case2.mp4" # TODO: Update with your video path CASE4_VIDEO = "data/case4.mp4" # TODO: Update with your video path ``` ## ▶️ 使用方法 ### 方法 1:运行 PatchCore 异常检测 ``` python scripts/run_patchcore_resnet_style.py --config configs/assignment03.yaml ``` **输出:** - `outputs/videos/`:展示检测结果的 15 秒演示视频 - `outputs/frames/`:带有 OK/NG 标签的代表性帧 - `outputs/metrics/`:CSV 预测、分数曲线及汇总 JSON - `outputs/models/`:已保存的记忆库文件 (.npy) ### 方法 2:运行基于规则的检测 ``` python scripts/render_stable_v2.py ``` **输出:** - `outputs/videos_stable_v2/`:带检测覆盖图的演示视频 - `outputs/frames_stable_v2/`:展示检测结果的关键帧 - `outputs/metrics_stable_v2/`:性能指标摘要 ## 🔧 关键参数 ### PatchCore 配置 (`configs/assignment03.yaml`) | 参数 | 描述 | 默认值 | |-----------|-------------|---------| | `resize` | ROI 缩放尺寸 | [160, 160] | | `grid` | Patch 网格大小 (行, 列) | [8, 8] | | `coreset_limit` | 记忆库最大容量 | 2200 | | `knn_k` | 用于评分的 K-近邻个数 | 3 | | `vote_window` | 时序投票窗口大小 | 5 | | `min_ng_votes` | 稳定预测所需的最少 NG 票数 | 2 | | `threshold_quantile` | 异常阈值百分位数 | 0.90 | ### 训练/测试区间 请根据您的视频内容调整 `train_range_sec` 和 `test_range_sec`: - **训练区间**:应仅包含正常/无缺陷样本 - **测试区间**:包含正常和有缺陷样本以进行评估 ## 📊 结果 系统会输出包含以下内容的综合指标: - 帧级别的异常分数 - OK/NG 分类结果 - 处理速度(FPS 估算) - 突出显示异常区域的可视化热力图 - JSON 格式的汇总统计数据 输出结构示例: ``` { "case2": { "video": "outputs/videos/case2_demo.mp4", "frames": 225, "fps_estimate": 12.4, "ok_frames": 75, "ng_frames": 150 } } ``` ## 🎯 用例 本项目演示了以下工业质量检测场景: - **案例 2**:圆形瓶盖检测(黄色盖检测) - **案例 4**:多盖容器检测(透明/蓝色盖检测) 这些方法可适用于其他需要以下功能的制造场景: - 表面缺陷检测 - 缺失部件识别 - 颜色/形状验证 - 装配质量控制 ## 🛠️ 技术细节 ### PatchCore 方法 1. **特征提取**:从图像 Patch 中提取多通道描述符 - 颜色特征(HSV、LAB 均值/标准差) - 梯度方向直方图 - 纹理统计信息 - 原始像素值(下采样) 2. **记忆库构建**: - 从正常训练样本中收集特征 - 应用 coreset 采样以限制内存占用 - 构建 KNN 索引以实现高效的最近邻搜索 3. **异常评分**: - 计算到最近正常特征的距离 - 汇总前 K 个 Patch 分数以增强鲁棒性 - 应用时序投票实现稳定的预测 ### 基于规则的方法 1. **目标定位**:使用颜色分割和几何约束 2. **质量度量**:计算覆盖率、边缘强度、颜色饱和度 3. **多标准决策**:结合每个产品的多重检查 4. **时序平滑**:保持跨帧的稳定预测 ## 📄 许可证 本项目基于 MIT 许可证授权 - 详情请参阅 [LICENSE](LICENSE) 文件。 ## 👤 作者 计算机视觉课程项目 ## 🙏 致谢 - 受异常检测研究启发的 PatchCore 方法 - 用于计算机视觉操作的 OpenCV - 用于最近邻搜索的 scikit-learn **注意**:这是一个用于教育目的的学术项目。若用于生产环境,请考虑进行额外的验证和优化。
标签:PatchCore, Python, ResNet, 异常检测, 无后门, 机器视觉, 缺陷检测, 质量检测, 逆向工具