AI 驱动文档
您想了解什么?
元数据设置
本指南向您展示如何为 OV10i 摄像头的图像配置元数据。元数据是随每个捕获图像存储的自定义信息,有助于您跟踪诸如零件编号、序列号或生产数据等重要信息。
元数据的使用场景: 生产跟踪、零件识别、质控记录、批次信息、操作员识别,或任何需要与检测图像相关联的自定义数据。
前提条件
- OV10i 摄像头系统已设置并已连接
- 已在 Recipe Editor 中配置的活跃配方,包含成像和检测设置
- 至少一个 AI block(classification 或 segmentation)已配置
- 了解要从检测结果中跟踪的数据
什么是元数据?
元数据是随每个捕获图像附加的信息。该信息:
- 与图像一起存储在相机的库中
- 在 HMI 中显示,供操作员查看
- 有助于识别和跟踪特定部件或生产批次
- 可以在库中进行检索以供分析
有用的元数据示例:
- 零件编号 (e.g., "P12345")
- 序列号 (e.g., "SN987654")
- 操作员姓名 (e.g., "John_Smith")
- 班次信息 (e.g., "A_Shift")
- 批次号 (e.g., "Batch_2025_001")
元数据只能在检测完成后保存。元数据必须作为从相机捕获并处理图像后,从 "All Block Outputs" 开始的流程的一部分。
第 1 步:访问 Node-RED 编辑器
1.1 导航至 IO Block
- 在 Recipe Editor 中打开您的活动配方
- 点击 Configure IO 或在面包屑菜单中选择 IO Block 进入 Node-RED 编辑器
1.2 验证 Node-RED 界面
Checkpoint: 您应该看到左侧带有现有 IO Block 流和节点调色板的 Node-RED 流编辑器。
第 2 步:定位 "All Block Outputs" 节点
2.1 找到起点
在您的 Node-RED 流中,查找 "All Block Outputs" 节点。该节点是接收来自相机在触发并处理检测后数据的起点。
All Block Outputs 节点:
- 包含来自所有 AI block 的检测结果
- 包括图像捕获信息
- 提供创建元数据所需的数据
- 是为元数据和通过/失败决策提供数据的来源
2.2 了解流程结构
您的流程应遵循以下模式:
Camera Trigger → AI Processing → All Block Outputs → [Your Custom Logic]
从 "All Block Outputs" 您需要 两条独立路径:
- 元数据路径:All Block Outputs → Function (Create Metadata) → Capture Metadata
- 判定路径:All Block Outputs → Function (Logic) → Final Pass/Fail
元数据与通过/失败决策必须从 "All Block Outputs" 节点分支出来。
步骤 3:添加 Capture Metadata 节点
3.1 定位 Metadata Node
- 在左侧面板(Overview 部分)查找 "Capture Metadata" 节点
- 将 "Capture Metadata" 节点拖拽到流程画布上
- 将其在你的流程中放置在触发器 之后,但在图像捕获 之前
Step 4: Configure Metadata Fields
4.1 Set Up Basic Metadata
- 双击 Capture Metadata 节点
- 配置你要跟踪的元数据字段
- 为每个字段设置数据源
4.2 Metadata Format Requirements
元数据必须以对象的格式进行配置,包含:
- 字符串键 - 字段名必须为文本
- 字符串或数字值 - 数据可以是文本或数字
正确格式示例:
{
"part_number": "P12345",
"serial_number": "SN987654",
"operator": "John_Smith",
"shift": "A",
"quantity": 100,
"temperature": 23.5
}
Step 5: Create Metadata Function Node
5.1 Add Function Node for Metadata Creation
- 在 "All Block Outputs" 与 "Capture Metadata" 节点之间添加一个 "function" 节点
- 双击该函数节点进行配置
- 此函数将从检查结果中提取数据并创建元数据
5.2 Extract Data from All Block Outputs
"All Block Outputs" 节点提供丰富的检查数据。以下是提取方法:
// Extract data from inspection results
const captureId = msg.payload.capture_id;
const serialNumber = msg.payload.serial_number || "No_Serial";
const inspectionTime = msg.payload.inspection_time || new Date().toISOString();
// Create metadata from inspection data
msg.payload = {
"capture_id": captureId,
"serial_number": serialNumber,
"inspection_time": inspectionTime,
"operator": global.get("current_operator") || "Unknown"
};
return msg;
5.3 Static Metadata (Fixed Values)
对于在生产过程中不变化的信息:
// Set static metadata values
msg.payload = {
"recipe_name": "Bolt_Inspection_v2",
"line_number": "Line_3",
"shift": "A_Shift",
"station": "QC_Station_1"
};
return msg;
5.4 Dynamic Metadata (Using Inspection Data)
对于来自检查结果的信息:
// Extract inspection data
const captureId = msg.payload.capture_id;
const imageUrl = msg.payload.image_url;
const predictions = msg.payload.classification?.predictions || [];
// Create dynamic metadata
msg.payload = {
"capture_id": captureId,
"part_number": "P" + Date.now(),
"total_rois": predictions.length,
"timestamp": new Date().toISOString(),
"batch": global.get("current_batch") || "Default_Batch"
};
return msg;
Step 6: Connect Metadata and Pass/Fail Flows
6.1 Required Flow Structure
Every flow must have both paths from "All Block Outputs":
All Block Outputs → Function (Create Metadata) → Capture Metadata
↓
Function (Pass/Fail Logic) → Final Pass/Fail
6.2 连接元数据路径
- 将 "All Block Outputs" 的输出连接到元数据函数的输入
- 将元数据函数的输出连接到 "Capture Metadata" 的输入
- The Capture Metadata 节点可以是端点节点(不需要输出连接)
6.3 连接 Pass/Fail 路径
- 将 "All Block Outputs" 的输出连接到一个 pass/fail 逻辑函数
- 将逻辑函数的输出连接到 "Final Pass/Fail" 输入
- The "Final Pass/Fail" 节点是强制性的 - 每个流程必须在此结束
6.4 示例 Pass/Fail 逻辑函数
// Extract inspection result for pass/fail decision
const predictions = msg.payload.classification?.predictions || [];
// Determine if inspection passed (all ROIs passed)
let passed = true;
for (let prediction of predictions) {
if (!prediction.predicted_class.includes("pass")) {
passed = false;
break;
}
}
// Set the pass/fail result
msg.payload = passed;
return msg;
第7步:测试元数据配置
7.1 部署与测试
- 点击右上角的“Deploy”按钮
- 使用已配置的触发方法(manual、digital input 或 PLC)触发一次检测
- 验证以下内容:
- 已捕获图像
- 与图像一起显示元数据
- 已作出 Pass/Fail 判定
- 流程已成功完成
7.2 验证完整流程
请检查两条路径是否均正常工作:
元数据路径:
- 在主界面进入资源库
- 找到您的测试图像
- 验证元数据是否出现在图像详情中
Pass/Fail 路径:
- 检查检测结果是否显示 Pass/Fail 状态
- 验证 "Final Pass/Fail" 节点是否正确处理
- 确认任何连接的输出(PLCs、指示灯)能够正确响应
7.3 测试不同的触发源
验证元数据是否与您的具体触发源协同工作:
手动触发:
- 使用软件触发按钮
- 验证每次手动捕获时元数据是否显示
数字输入触发:
- 激活外部传感器/开关
- 确认触发的图像会捕获元数据
PLC 触发:
- 由 PLC 发送触发信号
- 验证元数据在可用时是否包含 PLC 数据
第8步:高级元数据配置
8.1 来自多个全局变量的元数据
将来自全局存储的不同来源的数据进行组合:
// Combine data from various global storage
const operatorData = global.get("operator_info") || {};
const productData = global.get("product_info") || {};
const shiftData = global.get("shift_info") || {};
msg.payload = {
"operator": operatorData.name || "Unknown",
"operator_id": operatorData.id || "000",
"product_code": productData.code || "Default",
"product_version": productData.version || "1.0",
"shift": shiftData.current || "Day",
"line_status": "Running",
"timestamp": new Date().toISOString()
};
return msg;
第9步:元数据问题排查
9.1 常见问题
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 元数据未显示 | 资源库中无数据 | 验证元数据节点是否在主 IO Block 流程中 |
| 元数据与图像不匹配 | 数据显示在捕获的图像上不正确 | 检查时序 - 元数据必须在图像捕获之前 |
| 触发不起作用 | 未捕获图像 | 验证 IO Block 触发配置 |
| 缺少元数据字段 | 某些数据缺失 | 检查 function node payload 格式 |
| 数据类型错误 | 节点显示错误状态 | 确保值仅为字符串或数字 |
9.2 调试元数据流
添加调试节点以排查问题:
- 在触发器后添加调试节点以验证触发是否起作用
- 在元数据函数之后添加调试节点以检查有效载荷
- 在元数据捕获节点之后添加调试节点以确认处理
- 在调试面板中检查错误信息
Step 10: Best Practices
10.1 Flow Design
设计高效的元数据流:
- 在流程早期保留元数据 - 在触发后立即设置元数据
- 使用单一元数据节点 - 不要重复使用元数据捕获节点
- 保持流程连贯性 - 元数据必须是主检查流程的一部分
- 处理缺失数据 - 始终提供默认值
10.2 Metadata Field Naming
使用一致、清晰的字段命名:
- 使用下划线而非空格("part_number" 而非 "part number")
- 描述性强但要简洁("operator" 而非 "op")
- 使用小写以保持一致性
- 避免可能引发问题的特殊字符
10.3 Performance Considerations
对于高产量生产:
- 最小化元数据大小 - 仅包含必要信息
- 使用高效的数据类型 - 可能时使用数字,尽量使用短字符串
- 避免复杂处理 - 让元数据创建简单且快速
- 缓存全局数据 - 将经常使用的数据存储在全局变量中
Success! Your Metadata System is Ready
您的元数据配置现已可以:
✅ 将自定义信息附加到每次触发的图像捕获
✅ 跟踪与检查流程同步的生产数据
✅ 将可检索信息存储在相机库中
✅ 在操作员使用的 HMI 中显示相关数据
✅ 支持满足制造要求的可追溯性
Ongoing Maintenance
Regular System Checks
- 验证元数据是否随触发捕获一起出现
- 检查生产运行中的缺失数据
- 监控高触发率下的流程性能
- 随着需求变化更新元数据字段
Flow Management
- 评估生产中的元数据时序
- 优化函数节点性能
- 更新全局变量管理
- 对操作员进行基于触发的操作培训
Next Steps
在设置基于触发的元数据之后:
- 使用所有配置的触发类型(手动、数字、PLC)进行测试
- 对操作员进行元数据捕获的正确触发使用培训
- 设置全局变量管理以实现动态数据
- 为不同产品线创建元数据模板
- 使用元数据分析实现生产监控