卡片图编辑器
卡片图 (Card Graph) 是 Vision Studio 的拖拽式视觉流程编辑器,通过组合不同类型的卡片构建从图像采集到结果输出的完整处理管道。卡片图编辑器无需编写代码,适合快速搭建标准视觉流程。
编辑器界面
卡片图编辑器由以下几个区域组成:
┌──────────────────────────────────────────────────────────┐
│ 工具箱 (Toolbox) │ 编辑区 (Canvas) │
│ ┌────────────────┐ │ ┌────────────────────────────┐ │
│ │ 采集 │ │ │ │ │
│ │ ├ 相机采集 │ │ │ [相机采集]───[预处理] │ │
│ │ ├ 图像加载 │ │ │ │ │ │ │
│ │ │ │ │ │ ▼ ▼ │ │
│ │ 预处理 │ │ │ [目标检测]───[结果输出] │ │
│ │ ├ 滤波 │ │ │ │ │
│ │ ├ 尺寸调整 │ │ │ │ │
│ │ ├ 色彩转换 │ │ └────────────────────────────┘ │
│ │ │ │ │ │
│ │ 检测 │ │ ┌────────────────────────────┐ │
│ │ ├ 目标检测 │ │ │ 属性面板 (Properties) │ │
│ │ ├ 模板匹配 │ │ │ ┌──────────────────────┐ │ │
│ │ │ │ │ │ │ 卡片: 目标检测 │ │
│ │ 测量 │ │ │ │ 模型: model.onnx │ │
│ │ ├ 边缘检测 │ │ │ │ 阈值: 0.5 │ │
│ │ ├ 圆/线测量 │ │ │ └──────────────────────┘ │ │
│ │ │ │ │ └────────────────────────────┘ │
│ │ 识别 │ │ │
│ │ ├ 条码识别 │ │ [状态栏: 就绪 | 3 个卡片] │
│ │ ├ QR 码识别 │ │ │
│ │ └──────────────┘ │ │
└──────────────────────────────────────────────────────────┘
| 区域 | 说明 |
|---|---|
| 工具箱 | 左侧面板,列出所有可用卡片,按功能分组 |
| 编辑区 | 中央画布,拖拽卡片并连接构成视觉流程 |
| 属性面板 | 右侧面板,显示当前选中卡片的详细参数 |
| 状态栏 | 底部状态信息,显示卡片数量、运行状态等 |
卡片类型
Vision Studio 的卡片按功能分为六大类:
采集类
| 卡片 | 说明 | 输出 |
|---|---|---|
| 相机采集 | 从相机采集一帧图像 | Image |
| 图像加载 | 从文件加载图像 | Image |
| 视频流 | 连续采集视频流 | Image (多帧) |
| 图像队列 | 从缓存队列取图像 | Image |
预处理类
| 卡片 | 说明 | 输出 |
|---|---|---|
| 滤波 | 高斯滤波、中值滤波、双边滤波 | Image |
| 尺寸调整 | 缩放图像至指定尺寸 | Image |
| 色彩转换 | 灰度、HSV、RGB 通道转换 | Image |
| ROI 提取 | 提取感兴趣区域 | Image |
| 直方图均衡 | 增强对比度 | Image |
| 形态学 | 腐蚀、膨胀、开闭运算 | Image |
| 图像增强 | 亮度、对比度、锐化调整 | Image |
检测类
| 卡片 | 说明 | 输出 |
|---|---|---|
| 目标检测 | ONNX 模型目标检测 | DetectionResult |
| 模板匹配 | 基于形状或灰度的模板匹配 | MatchResult |
| 边缘检测 | Canny、Sobel 边缘检测 | Image |
| 异常检测 | 基于模型的异常检测 | AnomalyResult |
测量类
| 卡片 | 说明 | 输出 |
|---|---|---|
| 圆/弧测量 | 拟合圆、圆弧,输出半径圆心 | Measurement |
| 直线测量 | 拟合直线,输出角度、距离 | Measurement |
| 点间距 | 测量两点间距离 | Measurement |
| 角度测量 | 测量两线夹角 | Measurement |
| 轮廓测量 | 轮廓拟合与参数提取 | Measurement |
识别类
| 卡片 | 说明 | 输出 |
|---|---|---|
| 条码识别 | 一维条码读取 | DecodeResult |
| QR 码识别 | 二维码读取 | DecodeResult |
| DataMatrix | DM 码读取 | DecodeResult |
| OCR 文字识别 | 字符识别 | OCRResult |
| 分类器 | 图像分类 | ClassificationResult |
输出类
| 卡片 | 说明 | 输出 |
|---|---|---|
| 结果输出 | 结果写入 PLC 变量 | — |
| 数据通信 | 通过 HSL/OPC UA 发送 | — |
| 图像保存 | 保存图像到文件 | — |
| 结果显示 | 在 IDE 显示实时结果 | — |
| 日志记录 | 结果写入诊断日志 | — |
卡片连接与数据流
连接规则
卡片之间的连接线表示数据流,遵循以下规则:
- 单向连接:数据从上游卡片流向下游卡片
- 一进多出:一个输出可连接到多个下游输入
- 类型匹配:输出类型必须与输入类型兼容
- 分支合并:不支持多输入合并到同一输入端口(需使用 Vision SCL 实现)
数据流类型
| 类型 | 说明 | 传递内容 |
|---|---|---|
Image | 图像数据 | 像素矩阵 + 元数据 |
DetectionResult | 检测结果 | 边界框 + 类别 + 置信度 |
Measurement | 测量结果 | 几何参数 + 状态 |
DecodeResult | 解码结果 | 字符串内容 + 码类型 |
OCRResult | 识别结果 | 文字 + 置信度 + 位置 |
MatchResult | 匹配结果 | 匹配位置 + 评分 |
ClassificationResult | 分类结果 | 类别 + 概率分布 |
AnomalyResult | 异常检测结果 | 异常分数 + 热力图 |
String | 通用字符串 | 文本 |
Numeric | 数值 | 整数或浮点数 |
数据流示例
[相机采集] ──Image──→ [滤波] ──Image──→ [目标检测] ──DetectionResult──→ [结果输出]
│
├──→ [结果保存]
│
└──→ [图像保存]
参数配置
卡片属性编辑
双击卡片或选中卡片后在属性面板中配置参数:
参数类型:
| 控件类型 | 说明 | 示例 |
|---|---|---|
| 数值输入 | 设置数值参数 | 阈值 0.5 |
| 下拉选择 | 从预定义列表选择 | 滤波类型: 高斯 |
| 文件选择 | 浏览文件路径 | 模型文件: model.onnx |
| 颜色选择 | 选择颜色 | 标注颜色: 绿色 |
| 变量绑定 | 绑定 PLC 变量 | 输出变量: VIS_RESULT |
| 表达式 | 输入简单表达式 | ROI: (x:100, y:100, w:400, h:400) |
参数验证
配置参数时编辑器实时验证:
- 数值范围检查(如置信度必须在 0~1)
- 文件存在性检查(模型文件路径)
- 类型兼容性检查(连接线类型匹配)
- 必填项检查(标记为红色的参数必须填写)
高级功能
条件分支
通过条件判断卡片实现分支逻辑:
[目标检测] ──── 有目标 ────→ [测量] ──→ [结果输出]
│
└─── 无目标 ────→ [默认结果输出]
循环处理
通过图像队列和循环计数器实现多帧处理:
[图像队列] ──→ [目标检测] ──→ [结果累加]
↑ │
└──────────────────────────┘
(循环 10 次后输出)
子图 (Subgraph)
将多个卡片打包为子图,实现流程复用:
- 选中多个卡片 → 右键 → 创建子图
- 为子图命名并定义输入输出端口
- 在工具箱的 子图 分组中可重复使用
校验与编译
卡片图编辑完成后,需要进行校验:
- 语法校验:检查连接完整性、类型匹配
- 资源检查:确认相机、模型文件等资源可用
- 编译生成:将卡片图编译为内部中间表示,供运行时执行
校验通过后,视觉程序即可部署运行。校验错误会显示在 输出面板 中,双击错误可定位到对应卡片。