1828 开发指南最后一章给出工业表面缺陷检测的完整案例。传统做法靠人眼或为每类缺陷单独建模;SDK 自带应用改用 PatchCore + DINOv3-S backbone,仅用良品即可检测异常,并提供浏览器可操作的 Web 界面。本文完整梳理其部署与操作,也如实说明当前不足。

本章完整文档:《工业异常检测》(生态平台 wiki) 前置条件:RK182X 模组已连接(PCIe)------systemctl is-active rknn3.service 返回 active,/dev/pcie-rkep-* 设备节点存在(上篇环境验收清单里的一项)。
(一)它能查什么:只学习良品的异常检测
应用基于 PatchCore 算法 + DINOv3-Small backbone,专为工业表面缺陷检测设计,实际路径在 SDK 的 examples/anomaly-detection/。
典型场景:

和"每类缺陷训一个模型"不同,PatchCore 的用法是反过来的:训练阶段只用良品样本,把良品的特征存进一个 memory bank;检测阶段拿测试样本的特征去和记忆库比对,偏差大的位置就是可疑区域。整个过程输出热力图,缺陷在图上一眼可见。DINOv3-S 负责提特征,它以两个文件的形式随应用附带:dinov3s.rknn(613KB,模型结构)和 dinov3s.weight(42MB,权重),推理跑在 RK182X NPU 上。
整套应用连模型带网页总共 45M,对一块边缘板卡来说相当轻。
(二)应用架构:浏览器到 NPU 三层
wiki 给的整体框图:
用户浏览器
↓ 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 负责网页交互(app.py,26KB),PatchCore 的训练和测试脚本是业务逻辑(patchcore_train.py/patchcore_test.py),底层特征提取通过 RKNN3 Lite 调 NPU。操作的人在浏览器里点按钮,算力在板子上。
(三)部署四步
1. 推送文件到板端
PC 端执行:
adb push examples/anomaly-detection /userdata/
2. 准备数据集
从 MVTec 官网下载 AD 数据集(https://www.mvtec.com/company/research/datasets/mvtec-ad),解压到板端 /userdata/datasets/,目录结构:
/userdata/datasets/
├── bottle/
│ ├── test/
│ │ ├── good/ ← 良品测试
│ │ └── defect/ ← 缺陷测试(每类一个子目录)
│ ├── train/good/ ← 训练只用良品
│ └── ground_truth/ ← 缺陷标注
├── cable/
│ ├── test/
│ └── train/
└── ...
注意 train/good/ 这个结构------再次对应了"训练只用良品"的思路。
3. 安装依赖
cd /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection
./install.sh
install.sh 会安装三样东西:python3-pip、python3-flask、patchcore-0.1.0-py3-none-any.whl。装完 Flask 是 3.1.3 版本(Debian 12 apt 源里的 python3-flask)。
4. 启动应用
三种方式任选其一:
/userdata/anomaly-detection/run.sh start
或者点击桌面"工业检测"图标(install.sh 已自动创建),或者浏览器直接访问 http://<板子IP>:5000。
(四)装完之后还差什么:如实交代
按上面的步骤走完,应用还不能直接跑起来。wiki 把两个坑写得明明白白,这里原文照搬:
坑一:ML 依赖没有装全。patchcore 的依赖清单里要求 torch、torchvision、faiss-cpu、timm、scikit-image、scikit-learn、numpy、scipy 等一大串机器学习库,但板端 pip list 里相关的只有两个:
python3 -m pip list | grep -E "(click|scipy|tqdm)"
输出:
click 8.4.2 tqdm 4.70.0
install.sh 只装 Flask + patchcore wheel,不装 scipy / numpy / torch / timm 这些 ML 库------它们在边缘设备上安装困难且资源消耗大。所以 run.sh start 会报 ModuleNotFoundError,需要手动补装依赖后才能完整运行。
坑二:启动脚本路径对不上。run.sh 里的路径指向 /userdata/anomaly-detection,但实际路径是 /userdata/RK1820_RK1828_AI_SDK/examples/anomaly-detection。用 cat run.sh | head -15 可以直接看到这个差异,处理办法是改脚本路径,或者建一个软链。
这两个坑 wiki 都在 FAQ 里给了对应处理,不是能绕过去的暗坑------只是拿到手的第一件事不是点开网页,而是先补环境。
(五)操作流程:标注 → 测试
标注(训练)
Web 界面三步:选择数据集 → 点"标注"按钮,系统用 DINOv3 backbone 提取良品特征 → 标注完成后计算异常阈值。
测试
"数据集测试"页面选择已标注的数据集,点"开始测试",结果以热力图显示------绿色 = 正常,红色 = 异常。点图片右上角的眼睛图标可以看热力图。
测试页面的按钮功能:

(六)常见的坑

(七)收尾
到这里,开发指南系列五篇走完了:OpenClaw 把板子变成 AI Agent 主机,SKILL 给它装上九般武艺,模型调用和模型转换打通了底层,最后这个工业异常检测应用演示了一条完整的行业落地路径------从数据集、到 NPU 推理、到浏览器里的操作界面。
它也顺带说明了一个现实:边缘侧跑 AI 应用,算力只是其中一环,依赖、路径、数据集这些工程细节同样决定能不能落地。下一篇开始进入生态平台专篇,看 ShiMetaPi 在 SDK 之外还准备了什么。