ZK1346/industrial-defect-detection
GitHub: ZK1346/industrial-defect-detection
该项目实现了基于 PatchCore 无监督异常检测和规则式计算机视觉的两种工业瓶盖缺陷检测方案。
Stars: 0 | Forks: 0
# 工业缺陷检测 - PatchCore 与基于规则的方法
[](https://www.python.org/)
[](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, 异常检测, 无后门, 机器视觉, 缺陷检测, 质量检测, 逆向工具