工业异常检测
整体框图
用户浏览器
↓ HTTP :5000
┌────────────────────┐
│ Flask Web │
│ app.py │
└────────┬───────────┘
↓
┌────────────────────┐
│ PatchCore 引擎 │
│ patchcore_train.py│ ← 训练(CPU 构建 memory bank)
│ patchcore_test.py │ ← 推理
└────────┬───────────┘
↓
┌────────────────────┐
│ RKNN3 Lite │ ← 已装 rknn3-toolkit-lite 1.0.0
│ DINOv3-S backbone │
└────────────────────┘当前板端 Flask 为 3.1.3(Debian 12 apt 的
python3-flask);PatchCore 的 ML 依赖(numpy / scipy / torch 等)未装,run.sh start会报ModuleNotFoundError。
1. 异常检测应用能解决哪些工业场景问题?
RK182X 异常检测应用基于 PatchCore 算法 + DINOv3-Small backbone,专为工业表面缺陷检测设计。
实际路径:
/userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/
典型场景:
- 瓶体:气泡、划痕、凹陷
- 线缆:绝缘层破损、接头变形
- 织物:破洞、污渍、织造缺陷
- 金属表面:划痕、氧化、腐蚀
应用流程:先使用良品样本训练(构建特征 memory bank),再对测试样本进行异常检测,输出热力图。
2. 实际部署状态
应用目录:
ls /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/输出:
app.py
install.sh
model
patchcore_test.py
patchcore_train.py
pictures
README_CN.md
README_EN.md
run.sh
static
system
templates
THIRD_PARTY_LICENSES.txt总大小:
du -sh /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/输出:
45M /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/Flask 安装状态:
python3 -c "import flask; print('Flask version:', flask.__version__)"输出:
Flask version: 3.1.3Flask 3.1.3 是 Debian 12 apt 装的
python3-flask。
基础功能:
python3 -c "import flask; from flask import Flask, render_template; print('Flask基础功能可用')"输出:
Flask基础功能可用模型文件:
ls -lh /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/model/输出:
总计 43M
-rw-r--r-- 1 linaro linaro 613K 2026年 1月28日 dinov3s.rknn
-rw-r--r-- 1 linaro linaro 42M 2026年 1月28日 dinov3s.weightPython 脚本:
ls -la /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/*.py输出:
-rw-r--r-- 1 linaro linaro 26823 2026年 1月28日 app.py
-rw-r--r-- 1 linaro linaro 5726 2026年 1月28日 patchcore_test.py
-rw-r--r-- 1 linaro linaro 12168 2026年 1月28日 patchcore_train.pypatchcore 依赖:
cd /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/system/install && unzip -p patchcore-0.1.0-py3-none-any.whl patchcore-0.1.0.dist-info/METADATA | grep -A 10 "Requires-Dist"输出:
Requires-Dist: click (>=8.0.3)
Requires-Dist: faiss-cpu
Requires-Dist: matplotlib (>=3.5.0)
Requires-Dist: pillow (>=8.4.0)
Requires-Dist: pretrainedmodels (>=0.7.4)
Requires-Dist: scikit-image (>=0.18.3)
Requires-Dist: scikit-learn (>=1.0.1)
Requires-Dist: scipy (>=1.7.1)
Requires-Dist: timm
Requires-Dist: torch (>=1.10.0)
Requires-Dist: torchvision (>=0.11.1)
Requires-Dist: tqdm (>=4.62.3)已装的相关包:
python3 -m pip list | grep -E "(click|scipy|tqdm)"输出:
click 8.4.2
tqdm 4.70.0
scipy未安装——install.sh只装python3-flask+patchcore-0.1.0-py3-none-any.whl,不装 scipy / numpy / torch / timm 等 ML 库。
3. 如何部署?
3.1 推送文件到板端
# PC 端
adb push examples/anomaly-detection /userdata/3.2 准备数据集
下载 MVTec AD 数据集:
https://www.mvtec.com/company/research/datasets/mvtec-ad目录结构:
/userdata/datasets/
├── bottle/
│ ├── test/
│ │ ├── good/ ← 良品测试
│ │ └── defect/ ← 缺陷测试(每类一个子目录)
│ ├── train/good/ ← 训练只用良品
│ └── ground_truth/ ← 缺陷标注
├── cable/
│ ├── test/
│ └── train/
└── ...3.3 安装依赖
启动脚本:
cat /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/run.sh | head -15输出:
#!/bin/bash -i
start() {
start-stop-daemon --start \
--pidfile /run/anomaly-detection.pid --make-pidfile \
--chdir /userdata/anomaly-detection \
--exec /usr/bin/python3 -- /userdata/anomaly-detection/app.py --webbrowser
}脚本指向
/userdata/anomaly-detection,但实际路径是/userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection。
安装:
cd /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection
./install.shinstall.sh 会安装:
python3-pippython3-flaskpatchcore-0.1.0-py3-none-any.whl
重要限制:完整运行需要大量机器学习依赖库(torch、torchvision、faiss-cpu、timm、pretrainedmodels、scikit-image、scikit-learn、numpy 等),这些库在边缘设备上安装困难且资源消耗大。
3.4 启动应用
# 方法 1:终端启动
/userdata/anomaly-detection/run.sh start
# 方法 2:桌面图标(install.sh 已创建)
# 点击桌面"工业检测"
# 局域网访问
http://<板子IP>:50004. 操作流程
4.1 标注(训练)
- Web 界面选择数据集
- 点击"标注"按钮,系统用 DINOv3 backbone 提取良品特征
- 标注完成后,计算异常阈值
4.2 测试
- "数据集测试"页面选择已标注的数据集
- 点击"开始测试"
- 结果以热力图显示,绿色 = 正常,红色 = 异常
测试页面按钮:
| 按钮 | 功能 |
|---|---|
| 下拉框 | 选择数据集 |
| 自动运行 | 是否连续运行(默认遇异常暂停) |
| 运行线程数 | 设置并行线程数 |
| 点击开始测试 | 启动测试 |
| 停止运行 | 停止当前测试 |
| 连续运行 | 检测完所有图片,不暂停 |
| 运行至异常 | 遇异常暂停后继续 |
| 下一张 | 每个线程各推一张 |
| 热力图 | 点击图片右上角眼睛图标 |
5. 实际目录结构
examples/anomaly-detection/
├── app.py # Flask Web 应用(26KB)
├── patchcore_train.py # PatchCore 训练(12KB)
├── patchcore_test.py # PatchCore 测试(5.7KB)
├── install.sh # 安装脚本
├── run.sh # 启动/停止脚本
├── model/
│ ├── dinov3s.rknn # 613KB(DINOv3-S 结构)
│ └── dinov3s.weight # 42MB(DINOv3-S 权重)
├── README_CN.md / README_EN.md
├── pictures/ # 操作截图
│ ├── step1_cn.jpg # 中文操作步骤截图
│ ├── step1_en.jpg # 英文操作步骤截图
│ └── ...
├── static/ # Flask 静态资源
│ ├── css/
│ ├── js/
│ ├── fontawesome-free-7.0.0-web/
│ ├── logo.png
│ └── datasets -> ../../datasets # 符号链接到数据集
├── system/
│ ├── install/
│ │ ├── patchcore-0.1.0-py3-none-any.whl
│ │ └── pip.conf
│ ├── desktop/ # 桌面图标入口
│ └── lib/
└── templates/ # Flask HTML 模板
└── index.html # 主页面(6.9KB)静态资源:
ls /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/static/输出:
css
datasets
fontawesome-free-7.0.0-web
js
logo.png模板:
ls -la /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection/templates/输出:
-rw-r--r-- 1 linaro linaro 6983 6月 8日 14:28 index.html6. 前置条件
RK182X 模组已连接(PCIe):
systemctl is-active rknn3.service输出:
activels -l /dev/pcie-rkep-*输出:
crw------- 1 root root 10, 124 8月20日 16:56 /dev/pcie-rkep-0004:41:00.0MVTec AD 数据集需下载到 /userdata/datasets/(实际部署后该目录尚未创建,需手动从 MVTec 下载并解压):
ls /userdata/datasets/重要限制:完整运行需要大量机器学习库(torch、torchvision、faiss-cpu、numpy、scipy 等),这些库在边缘设备上安装困难且资源消耗大(实测均未安装)。
7. 常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
run.sh start 报 ModuleNotFoundError: No module named 'numpy' | scipy/numpy/torch 未装 | install.sh 不装 ML 库,需手动 pip install |
Flask 起不来报 Address already in use | 5000 端口被占 | ss -tlnp | grep 5000 找占用 |
dinov3s.rknn 加载失败 | rknn3-toolkit-lite 没装 | apt install rknn3-toolkit-lite |
run.sh 路径找不到 | 指向 /userdata/anomaly-detection,实际在 SDK 路径 | 改路径或建软链 |
datasets 软链断裂 | /userdata/datasets 未创建 | 手动建 + 下载 MVTec AD |
| MVTec 数据集 15 类不全 | 下载包不完整 | 重下完整 tarball |
8. 下一步
- ClawChips 架构与原理 — ModelHub 调度
- SKILL 使用手册 —
rk-inspect巡检 Skill - AI Agent 应用 — OpenClaw 集成
