摘要:本文基于真实工业项目(钢铁表面缺陷检测),详解如何搭建一套完整的 AI 质检系统。采用 YOLOv12 监督检测 + Qwen-VL 零样本识别双引擎架构,并引入 OpenClaw + Skills 模块化架构实现技能化管理。包含完整代码、数据集分析方法和 Bad Case 驱动迭代策略,助力 AI 爱好者掌握工业视觉落地核心技能。
一、项目背景:为什么选择 AI 质检?
1.1 传统人工质检的四大痛点
在钢铁、3C、汽车零部件等制造业中,表面缺陷检测一直是质量控制的核心环节。然而,传统人工目视检测面临严峻挑战:
| 痛点 | 具体表现 | 影响 |
|---|---|---|
| 速度慢 | 产线速度 > 人眼反应速度 | 成为产能瓶颈 |
| 主观性强 | 不同质检员判定标准不一致 | 产品质量波动 |
| 易疲劳 | 长时间工作后注意力下降 | 漏检率上升 |
| 成本高 | 需要 24 小时轮班,人力成本逐年增加 | 企业负担重 |
1.2 AI 质检的核心优势
| 维度 | 人工检测 | AI 检测 |
|---|---|---|
| 工作时长 | 8 小时/班,需轮班 | 24 小时不间断 |
| 判定标准 | 因人而异 | 完全统一 |
| 疲劳影响 | 显著 | 无影响 |
| 检测速度 | ~2 秒/件 | ~10ms/件 |
| 可持续学习 | 困难 | Bad Case 驱动迭代 |
| 人力成本 | 高且持续增长 | 一次性投入 |
| 数据追溯 | 纸质记录/难查询 | 数字化/可分析 |
1.3 项目目标
以钢铁表面缺陷检测为实战场景,打造一套可运行的 AI 质检系统:
✅ 支持 YOLOv12 监督学习检测(精确、快速)
✅ 支持 Qwen-VL 多模态零样本检测(灵活、无需训练)
✅ 实现完整工作流:检测 → 人工审核 → 数据导出 → 模型迭代
✅ 引入 OpenClaw + Skills 架构,实现技能化管理
✅ 基于 Gradio 构建 Web 界面,支持检测记录管理和统计分析
二、系统架构:模块化设计思路
2.1 整体架构
┌─────────────────────────────────────────────────────────┐│ Web 交互层 (Gradio) ││ Tab1 单图检测 │ Tab2 批量检测 │ Tab3 审核 │ Tab4 统计 │ Tab5 导出 │├─────────────────────────────────────────────────────────┤│ 检测引擎层 ││ YOLOv12 引擎 (监督) │ Qwen-VL 引擎 (零样本) │├─────────────────────────────────────────────────────────┤│ OpenClaw Skills 层 ││ yolo-detect Skill │ vlm-detect Skill │ 其他 Skills │├─────────────────────────────────────────────────────────┤│ 数据管理层 ││ SQLite 数据库 │ 检测记录 │ 审核状态 │ Bad Case 标记 │├─────────────────────────────────────────────────────────┤│ 模型与数据层 ││ models/ │ runs/ │ exports/ │ dataset/ │ yolo-cases/ │└─────────────────────────────────────────────────────────┘
2.2 项目文件结构
ai-quality-inspection/├── openclaw.json # OpenClaw 主配置文件├── app.py # Gradio 工作台主入口├── detection_engine.py # 检测引擎封装(YOLO + VLM)├── db_manager.py # SQLite 检测记录管理├── data_export.py # Bad Case 导出├── eda_analysis.py # 数据集 EDA 分析├── train_and_predict.py # 训练 + 预测一体化├── requirements.txt # 环境依赖│├── skills/ # OpenClaw Skills 目录│ ├── yolo-detect/ # YOLO 检测技能│ │ ├── SKILL.md # 技能定义文件│ │ ├── .env # 环境变量│ │ └── scripts/│ │ └── detect.py # 检测脚本│ └── vlm-detect/ # VLM 检测技能│ ├── SKILL.md # 技能定义文件│ ├── .env # 环境变量│ └── scripts/│ └── detect.py # 检测脚本│├── yolo-cases/│ ├── steel_data/│ │ ├── dataset.yaml # 数据集配置│ │ ├── train/│ │ │ ├── images/ # 训练集图片 (~1261 张)│ │ │ ├── labels/ # YOLO 格式标注│ │ │ ├── train.txt # 训练集路径列表│ │ │ ├── val.txt # 验证集路径列表│ │ │ └── test.txt # 测试集路径列表│ │ └── test/│ │ └── images/ # 竞赛测试集 (400 张,无标注)│ └── yolov12.yaml # YOLOv12 模型结构配置|├── models/ # 模型权重│ └── best.pt # 训练好的 YOLO 模型├── yolo-cases/steel_data/ # 数据集目录└── exports/ # 导出文件
2.3 核心配置文件
dataset_local.yaml(本地数据集配置)
path: /path/to/yolo-cases/steel_datatrain: images/trainval: images/valtest: images/testnames: 0: crazing 1: inclusion 2: pitted_surface 3: scratches 4: patches 5: rolled-in_scale
yolov12.yaml(YOLOv12 模型结构配置)
# YOLOv12 模型架构配置# 由 Ultralytics 框架管理# 模型版本选择# yolov12n.pt - nano (最快)# yolov12s.pt - small# yolov12m.pt - medium# yolov12l.pt - large (最准)# 训练参数train: epochs: 100 batch: 16 imgsz: 640 device: 0 # GPU
2.4 环境依赖
# requirements.txtultralytics>=8.0.0 # YOLOv12 框架gradio>=4.0.0 # Web 界面openai>=1.0.0 # Qwen-VL API 调用pillow # 图像处理numpy # 数值计算matplotlib # 可视化分析sqlite3 # 数据库(Python 内置)
安装命令:
pip install ultralytics gradio openai pillow numpy matplotlib三、数据集详解:钢铁表面缺陷检测
3.1 数据来源与规模
钢铁表面缺陷检测数据集(百度 AI Studio 竞赛):
| 数据集 | 样本数 | 格式 | 说明 |
|---|---|---|---|
| Train | 1400 张 | JPG + XML | 含标注,用于训练 |
| Test | 400 张 | JPG | 无标注,用于测试 |
| 图像分辨率 | 200×200 像素 | - | 统一尺寸 |
3.2 缺陷类别定义
6 类典型钢铁表面缺陷:
| ID | 英文名 | 中文名 | 特征描述 |
|---|---|---|---|
| 0 | crazing | 龟裂 | 表面呈现网状细小裂纹 |
| 1 | inclusion | 夹杂 | 表面有异物嵌入或杂质 |
| 2 | pitted_surface | 点蚀 | 表面有凹坑或麻点 |
| 3 | scratches | 划痕 | 表面有线状刮痕 |
| 4 | patches | 斑块 | 表面有不规则色斑或区域变色 |
| 5 | rolled-in_scale | 氧化铁皮压入 | 表面有氧化皮被压入的痕迹 |
3.3 标注规范
YOLO 格式标注:
# labels/*.txt# 格式:class_id x_center y_center width height0 0.523 0.412 0.089 0.067 # 龟裂3 0.312 0.678 0.045 0.123 # 划痕
四、EDA 数据分析
4.1 为什么需要 EDA?
探索性数据分析(EDA)是工业 AI 项目的关键步骤:
EDA 分析 → 发现问题 → 针对性调优 → 模型性能提升↓ ↓ ↓类别不均衡 过采样/Focal 少数类召回率↑小目标多 增加小 Anchor 小目标检出率↑长宽比分散 调整 Anchor 形状 定位精度↑
4.2 类别分布分析
# eda_analysis.pydefanalyze_class_distribution(labels_dir):"""分析类别分布"""class_counts = Counter()for label_file in glob(labels_dir + "/*.txt"):withopen(label_file) as f:for line in f:parts = line.split()iflen(parts) == 5:cls_id = int(parts[0])class_counts[cls_id] += 1# 计算不均衡比值ratio = max(class_counts.values()) / min(class_counts.values())if ratio > 5:print("⚠️ 严重不均衡 → 建议:过采样 / Focal Loss")elif ratio > 2:print("⚠️ 轻度不均衡 → 建议:关注少数类召回率")else:print("✅ 类别均衡")
不均衡处理策略:
| 不均衡比值 | 建议方案 |
|---|---|
| > 5:1 | 过采样 (Oversampling) + Focal Loss |
| 2:1 ~ 5:1 | 调整类别权重,关注少数类召回率 |
| < 2:1 | 标准训练即可 |
4.3 标注框尺寸分析
def analyze_box_sizes(annotations):"""分析标注框尺寸分布"""widths = [w for _,_,_,w,_ in annotations]heights = [h for _,_,_,_,h in annotations]areas = [w*h for _,_,_,w,h in annotations]# 生成直方图plot_histogram(widths, "宽度分布")plot_histogram(heights, "高度分布")plot_histogram(areas, "面积分布")# Anchor 设置建议small_ratio = sum(1for a in areas if a < 0.01) / len(areas)if small_ratio > 0.3:print(f"⚠️ 小目标占比 {small_ratio:.1%} → 建议:增加小尺寸 Anchor")
标注原则(6 要 6 不要):
| ✅ 要做 | ❌ 不要 |
|---|---|
| 方框刚好包裹目标 | 留多余背景 |
| 多角度素材(正/侧/俯视) | 单一角度 |
| 遮挡目标标记可见部分 | 完全跳过遮挡目标 |
| 小目标(>5 像素)必须标记 | 忽略小目标 |
| 边界清晰的目标 | 人眼分不清的疑似缺陷 |
| 统一标注标准 | 不同人员标准不一致 |
标注信息:
left, top, width, height:矩形框坐标class:缺陷类别(0-5)
Anchor 调优建议:
小目标多(面积<0.01):增加小尺寸 Anchor
长宽比分散:设置多尺度 Anchor
极端长宽比:调整 Anchor 形状匹配
标注工具推荐:
| 工具 | 类型 | 特点 | 适用场景 |
|---|---|---|---|
| labelImg | 桌面 | 轻量、支持 YOLO 格式 | 小团队、快速标注 |
| CVAT | Web | 协作、支持视频 | 大团队、复杂项目 |
| Label Studio | Web | 灵活、可扩展 | 多模态标注 |
生成报告:
class_distribution.png:类别分布柱状图box_size_analysis.png:标注框尺寸分析(4 个子图)eda_stats.json:统计信息 JSON
五、双引擎检测方案
5.1 方案对比
| 维度 | YOLOv12 | Qwen-VL |
|---|---|---|
| 检测速度 | ~10ms/张 | ~500ms/张 |
| 准确率 | 高(有标注时) | 中(零样本) |
| 训练需求 | 需要标注数据 | 无需训练 |
| 新缺陷适应 | 需重新训练 | 直接支持 |
| 部署成本 | 低(本地推理) | 中(API 调用) |
| 推荐场景 | 产线实时检测 | 疑难样本复核 |
最佳实践:
生产环境推荐配置:├── 主检测引擎:YOLOv12(99% 的样本)│ └── 优势:速度快、成本低、精度高└── 辅助引擎:Qwen-VL(1% 的疑难样本)└── 使用场景:├── YOLO 置信度低 (<0.3) 的样本├── 人工审核标记的争议样本└── 新出现的缺陷类型
5.2 引擎一:YOLO v12监督检测
适用场景:缺陷类型固定、有充足标注数据、需要高速检测
5.2.1 YOLO 检测引擎封装
# detection_engine.pyclass YOLODetector:def __init__(self, model_path='models/best.pt'):from ultralytics import YOLOself.model = YOLO(model_path)self.class_names = ['龟裂', '夹杂', '点蚀', '划痕', '斑块', '氧化铁皮压入']def detect(self, image_path, conf=0.25):results = self.model.predict(image_path, conf=conf, verbose=False)detections = []for box in results[0].boxes:detections.append({'class_name': self.class_names[int(box.cls[0])],'confidence': float(box.conf[0]),'bbox': box.xyxy[0].tolist()})return {'image': image_path,'num_detections': len(detections),'detections': detections}
5.2.2 训练配置
# dataset_local.yaml - 数据集配置path: /path/to/yolo-cases/steel_datatrain: images/trainval: images/valtest: images/test# 类别定义names:0: crazing1: inclusion2: pitted_surface3: scratches4: patches5: rolled-in_scale# 数据增强配置augment:hsv_h: 0.015 # 色调增强hsv_s: 0.7 # 饱和度增强hsv_v: 0.4 # 亮度增强scale: 0.5 # 缩放fliplr: 0.5 # 左右翻转mosaic: 1.0 # 马赛克增强mixup: 0.1 # 混合增强
5.2.3 训练命令
# 基础训练python train_and_predict.py --data dataset_local.yaml --epochs 100 --batch 16# 增强训练(针对小目标和不均衡)python train_yolo_enhanced.py --data dataset_local.yaml --epochs 150# 训练完成后自动验证python -c "from ultralytics import YOLO; m=YOLO('runs/detect/steel_defect_yolov12/weights/best.pt'); m.val()"
5.3 引擎二:Qwen-VL 零样本检测
适用场景:新缺陷类型、无标注数据、疑难样本复核
5.3.1 Qwen-VL 检测引擎封装
# detection_engine.pyfrom openai import OpenAIimport base64class VLMDetector:def __init__(self, model_name='qwen3-vl-plus'):self.model_name = model_nameself.client = OpenAI(api_key=os.getenv('DASHSCOPE_API_KEY'),base_url='https://dashscope.aliyuncs.com/compatible-mode/v1')def detect(self, image_path):# 图片 Base64 编码with open(image_path, 'rb') as f:image_b64 = base64.b64encode(f.read()).decode()# 调用 APIresponse = self.client.chat.completions.create(model=self.model_name,messages=[{'role': 'user','content': [{'type': 'image_url', 'image_url': {'url': f'data:image/jpeg;base64,{image_b64}'}},{'type': 'text', 'text': '请检测这张钢铁表面图片中的缺陷,输出缺陷类型和位置'}]}])# 解析响应,提取缺陷信息和边界框# ...return {'image': image_path,'model': self.model_name,'detections': detections,'vlm_summary': response_text}
六、Gradio Web 工作台
6.1 工作台功能
┌─────────────────────────────────────────────────────────┐│ AI 质检工作台 (Gradio) │├─────────────────────────────────────────────────────────┤│ Tab 1: 单图检测 │ 上传图片 → 选择引擎 → 检测结果 ││ Tab 2: 批量检测 │ 选择文件夹 → 批量处理 → 导出结果 ││ Tab 3: 人工审核 │ 查看待审核 → 确认/修正 → 入库 ││ Tab 4: 统计分析 │ 检测统计 → 缺陷分布 → 趋势图表 ││ Tab 5: 数据导出 │ Bad Case 导出 → 重训练数据准备 │└─────────────────────────────────────────────────────────┘
6.2 数据库设计
CREATE TABLE inspection_records (id INTEGER PRIMARY KEY AUTOINCREMENT,image_path TEXT NOT NULL,detections TEXT,engine TEXT NOT NULL,is_reviewed INTEGER DEFAULT 0,review_result TEXT,review_comment TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
七、Bad Case 驱动的迭代闭环
7.1 为什么需要持续迭代?
工业场景中,模型上线只是开始,持续迭代才是关键:
【迭代原因】├── 新缺陷类型出现(工艺变更、新材料)├── 生产条件变化(光照、温度、湿度)├── 长尾缺陷样本不足├── 误检/漏检需要优化└── 客户反馈新的质量要求
真实案例:
某汽车零部件厂:上线后第 1 个月检出率 95%,第 3 个月降至 88%(工艺参数调整)
某钢铁厂:新批次原材料导致缺陷特征变化,需重新训练
7.2 迭代流程
产线检测 → 人工审核 → Bad Case 标记 → 数据导出 → 重新训练 → 模型更新7.3 迭代频率
| 阶段 | 频率 | 重点工作 | 预期效果 |
|---|---|---|---|
| 上线初期 (1-2 月) | 每周 1 次 | 快速修复明显问题、收集 Bad Case | 检出率提升至 95%+ |
| 稳定期 (3-6 月) | 每月 1 次 | 优化长尾缺陷、适应工艺变化 | 检出率稳定在 98%+ |
| 工艺变更后 | 立即 | 重新采集样本、快速迭代 | 1 周内恢复性能 |
| 新缺陷出现 | 按需 | 补充标注、增量训练 | 快速适应新缺陷 |
八、OpenClaw + Skills 架构:双引擎的技能化扩展
说明:OpenClaw + Skills 架构是双引擎方案的优化扩展,将 YOLO 和 VLM 检测引擎封装为独立的 OpenClaw Skills,实现模块化、可复用的技能管理。
8.1 什么是 OpenClaw + Skills?
OpenClaw:AI 应用框架,提供 Gateway、Agents、Skills 等核心组件
Skills:独立的技能模块,每个 Skill 完成特定功能,可被 Agent 调用
架构优势:
✅ 模块化:每个 Skill 独立开发、测试和部署
✅ 可复用:Skills 可在不同项目中复用
✅ 易扩展:新增功能只需添加新 Skill
✅ Agent 驱动:LLM Agent 自动匹配和调用 Skills
8.2 Skills 目录结构
基于已有的 detection_engine.py 检测引擎,创建两个 OpenClaw Skills:
skills/├── yolo-detect/│ ├── SKILL.md # 技能定义文件(YAML + Markdown)│ ├── .env # 环境变量(AI_INSPECT_DIR)│ └── scripts/│ └── detect.py # YOLO 检测脚本│└── vlm-detect/├── SKILL.md # 技能定义文件├── .env # 环境变量└── scripts/└── detect.py # VLM 检测脚本
每个技能都是独立的文件夹,包含:
SKILL.md:技能定义(元数据 + 执行流程).env:环境变量配置scripts/detect.py:执行脚本
8.3 openclaw.json 配置
{"gateway": {"mode": "local","port": 18789,"auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }},"models": {"mode": "merge","providers": {"dashscope": {"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1","apiKey": "${OPENAI_API_KEY}","api": "openai-completions","models": [{ "id": "qwen-turbo", "name": "Qwen Turbo" },{ "id": "qwen-turbo-latest", "name": "Qwen Turbo Latest" },{ "id": "qwen-max-latest", "name": "Qwen Max Latest" }]}}},"agents": {"defaults": {"model": { "primary": "dashscope/qwen-turbo" },"workspace": "~/.openclaw/workspace"},"list": [{"id": "detect-analyst","model": "dashscope/qwen-turbo-latest","workspace": "~/.openclaw/workspace","skills": ["yolo-detect", "vlm-detect"]}]}}
配置说明:
| 字段 | 说明 |
|---|---|
gateway.mode | Gateway 模式(local/remote) |
gateway.port | Gateway 端口(默认 18789) |
models.providers | 模型提供商配置(Dashscope/通义千问) |
agents.list | Agent 列表,每个 Agent 可配置使用的 Skills |
agents.list[].skills | 该 Agent 可调用的 Skills 列表 |
8.4 Skill 定义:SKILL.md
SKILL.md 包含两部分:YAML 元数据 + Markdown 正文
8.4.1 yolo-detect 技能定义
第一部分:YAML 元数据
name: yolo-detectdescription: "YOLO 钢铁表面缺陷检测。直接执行 exec ..."metadata:openclaw:emoji: "🔍"os: ["win32"]requires:bins: ["python"]packages: ["ultralytics", "pillow", "numpy"]permissions:- "exec"- "file.read"- "file.write"timeout: 60
元数据字段说明:
| 字段 | 说明 |
|---|---|
name | 技能名称(唯一标识) |
description | 技能描述(Agent 匹配用) |
metadata.openclaw.emoji | 技能图标 |
metadata.openclaw.os | 支持的操作系统 |
metadata.requires.bins | 需要的二进制文件 |
metadata.requires.packages | 需要的 Python 包 |
metadata.permissions | 需要的权限(exec/file.read/file.write) |
timeout | 执行超时(秒) |
8.4.2 vlm-detect 技能定义
第二部分:Markdown 正文
name: vlm-detectdescription: "Qwen3-VL 多模态钢铁缺陷检测。调用 API 分析图片..."metadata:openclaw:emoji: "👁️"os: ["win32", "linux", "darwin"]requires:bins: ["python"]packages: ["openai", "pillow"]permissions:- "exec"- "file.read"timeout: 120
8.5 Skills 执行脚本
8.5.1 yolo-detect/detect.py
# skills/yolo-detect/scripts/detect.pyimport argparseimport jsonimport osimport sysfrom pathlib import Pathdef main():# 1. 解析命令行参数parser = argparse.ArgumentParser()parser.add_argument("image", help="待检测图片路径")parser.add_argument("--conf", type=float, default=0.25, help="置信度阈值")parser.add_argument("--save", default=None, help="保存结果路径")args = parser.parse_args()# 2. 加载.env,获取项目路径load_env()project_dir = os.environ.get("AI_INSPECT_DIR", r"D:\...\26-项目实战:AI 质检")# 3. 将项目目录加入 sys.path,导入检测引擎sys.path.insert(0, project_dir)from detection_engine import YOLODetector, CLASS_NAMES_CN# 4. 查找模型文件(按优先级)model_candidates = [os.path.join(project_dir, "models", "best.pt"),os.path.join(project_dir, "runs", "steel_train", "weights", "best.pt")]model_path = next((p for p in model_candidates if os.path.exists(p)), None)# 5. 创建检测器,执行检测detector = YOLODetector(model_path)result = detector.detect(args.image, conf=args.conf)# 6. 构建 JSON 输出output = {"image": args.image,"inference_time": result.inference_time,"num_detections": len(result.boxes),"detections": [{"class_name": box.class_name,"confidence": box.confidence,"bbox": [box.x1, box.y1, box.x2, box.y2]}for box in result.boxes]}print(json.dumps(output, ensure_ascii=False, indent=2))if __name__ == "__main__":main()
工作流程:
加载.env → 导入检测引擎 → 查找模型 → 执行 YOLO 推理 → 输出 JSON8.5.2 vlm-detect/detect.py
# skills/vlm-detect/scripts/detect.pyimport argparseimport jsonimport osimport sysdef main():# 1. 解析命令行参数parser = argparse.ArgumentParser()parser.add_argument("image", help="待检测图片路径")parser.add_argument("--model", default=None, help="VLM 模型名称")parser.add_argument("--save", default=None, help="保存结果路径")args = parser.parse_args()# 2. 加载.env,获取项目路径load_env()project_dir = os.environ.get("AI_INSPECT_DIR")# 3. 导入检测引擎sys.path.insert(0, project_dir)from detection_engine import VLMDetector, CLASS_NAMES_CN# 4. 创建 VLM 检测器(自动读取 DASHSCOPE_API_KEY)detector = VLMDetector(model_name=args.model or "qwen3-vl-plus")# 5. 执行检测# 内部流程:图片 Base64 编码 → 构造 Prompt → 调用 API → 解析 bbox → 坐标转换result = detector.detect(args.image)# 6. 构建 JSON 输出(VLM 额外输出自然语言摘要)output = {"image": args.image,"model": detector.model_name,"inference_time": result.inference_time,"num_detections": len(result.boxes),"detections": [{"class_name": box.class_name,"bbox": [box.x1, box.y1, box.x2, box.y2]}for box in result.boxes],"vlm_summary": result.vlm_text # VLM 额外输出}print(json.dumps(output, ensure_ascii=False, indent=2))if __name__ == "__main__":main()
工作流程:
加载.env → 导入检测引擎 → 创建 VLM 客户端 → 图片编码+调用 API → 解析 bbox → 输出 JSON8.6 Skill 执行逻辑
完整调用链路:
用户请求 → Gateway → Agent(LLM) → 匹配 Skill → exec 工具 → detect.py → JSON 输出示例:
检测钢铁缺陷↓Gateway (port:18789)↓Agent (qwen-turbo-latest)↓匹配 Skill: yolo-detect / vlm-detect↓exec 工具执行:python skills/yolo-detect/scripts/detect.py test.jpg↓detect.py 输出 JSON↓返回给用户
8.7 两个 Skills 对比
| 特性 | yolo-detect | vlm-detect |
|---|---|---|
| 检测方式 | YOLOv12 目标检测 | Qwen3-VL 多模态理解 |
| 速度 | 快(~10ms) | 慢(~500ms) |
| 精度 | 高(有训练数据) | 中(零样本) |
| 输出 | 缺陷类型 + 边界框 + 置信度 | 缺陷类型 + 边界框 + 自然语言描述 |
| 前置条件 | models/best.pt 模型文件 | DASHSCOPE_API_KEY 环境变量 |
| 超时设置 | 60 秒 | 120 秒 |
| 适用场景 | 产线实时检测 | 疑难样本复核 |
8.8 Skills 优势总结
独立开发:每个 Skill 在自己的文件夹中,互不干扰
独立测试:可单独测试 yolo-detect 或 vlm-detect
独立部署:Skills 可独立更新,不影响其他模块
Agent 驱动:LLM 自动选择合适的 Skill 执行任务
共享底层代码:两个 Skills 共享
detection_engine.py,通过.env中的AI_INSPECT_DIR定位项目目录
九、完整搭建步骤
步骤 1:环境准备
mkdir ai-quality-inspectioncd ai-quality-inspectionpip install ultralytics gradio openai pillow numpy matplotlib
步骤 2:创建 Skills
mkdir -p skills/yolo-detect/scriptsmkdir -p skills/vlm-detect/scripts
复制代码:
将
detection_engine.py放入项目根目录将
detect.py分别放入两个 Skills 的 scripts 目录创建
SKILL.md和.env文件
步骤 3:配置 openclaw.json
# 创建配置文件cat > openclaw.json << 'EOF'{"gateway": { "mode": "local", "port": 18789 },"agents": {"list": [{"id": "detect-analyst","model": "dashscope/qwen-turbo-latest","skills": ["yolo-detect", "vlm-detect"]}]}}EOF
步骤 4:数据准备与训练
# EDA 分析python eda_analysis.py# 模型训练python train_and_predict.py --data dataset.yaml --epochs 100
步骤 5:启动系统
# 启动 Gradio 工作台python app.py# 启动 OpenClaw Gatewayopenclaw gateway start
十、总结
10.1 核心亮点
双引擎检测:YOLOv12(快)+ Qwen-VL(灵活)
OpenClaw + Skills:模块化技能管理,Agent 驱动
完整工作流:检测 - 审核 - 导出 - 迭代闭环
数据驱动:EDA 分析指导模型调优
10.2 技术选型建议
| 场景 | 推荐方案 |
|---|---|
| 产线实时检测 | YOLOv12 + yolo-detect Skill |
| 疑难样本复核 | Qwen-VL + vlm-detect Skill |
| 新缺陷探索 | vlm-detect(零样本) |
夜雨聆风