跳到主要内容

元数据设置

本指南向您展示如何为 OV20i 摄像头图像配置元数据。元数据是随每张捕获图像存储的自定义信息,帮助您跟踪诸如部件号、序列号或生产数据等重要细节。

何时使用元数据: 生产跟踪、部件识别、质量控制记录、批次信息、操作员识别,或任何需要与检验图像相关联的自定义数据。

先决条件

  • OV20i 摄像头系统已设置并连接
  • 已配置带成像和检验设置的活动 recipe
  • 至少一个 AI block(classification 或 segmentation)已配置
  • 了解从检验结果中您想跟踪的数据

元数据是什么?

元数据是附加到每张捕获图像的额外信息。这些信息:

  • 与图像一起存储在相机的库中
  • 在 HMI 中向操作员显示
  • 有助于识别和跟踪特定部件或生产批次
  • 可以在库中进行分析搜索

有用元数据的示例:

  • 部件号(如 "P12345")
  • 序列号(如 "SN987654")
  • 操作员姓名(如 "John_Smith")
  • 班次信息(如 "A_Shift")
  • 批次号(如 "Batch_2025_001")
备注

元数据只有在完成检验后才可以保存。元数据必须是从摄像头捕获并处理图像后从 "All Block Outputs" 开始的流的一部分。

第 1 步:访问 Node-RED 编辑器

1.1 导航至 IO Block

  1. 在 Recipe Editor 中打开你的活动 recipe
  2. 点击 Configure IO 或在面包屑菜单中选择 IO Block,进入 Node-RED 编辑器

1.2 验证 Node-RED 界面

检查点: 你应该在左侧看到带有现有 IO Block 流和节点调色板的 Node-RED 流编辑器。

第 2 步:定位 “All Block Outputs” 节点

2.1 找到起点

在你的 Node-RED 流中,查找 "All Block Outputs" 节点。这是接收来自摄像头在触发并处理一次检验后数据的起点。

“The All Block Outputs” 节点具备以下功能:

  • 包含来自所有 AI blocks 的检验结果
  • 包括图像捕获信息
  • 提供元数据创建所需的数据
  • 是元数据和通过/不通过(pass/fail)决策的来源

2.2 理解流结构

你的流程应遵循以下模式:

Camera Trigger → AI Processing → All Block Outputs → [Your Custom Logic]

从 "All Block Outputs" 出发,你需要两条独立路径

  1. Metadata 路径:All Block Outputs → Function (Create Metadata) → Capture Metadata
  2. Decision 路径:All Block Outputs → Function (Logic) → Final Pass/Fail
备注

元数据和通过/失败决策必须从 "All Block Outputs" 节点分叉。

第 3 步:添加 Capture Metadata 节点

3.1 定位 Metadata 节点

  1. 在左侧面板(Overview 部分)中找到 "Capture Metadata" 节点
  2. 将 "Capture Metadata" 节点拖放到流程画布上
  3. 在你的流程中将其放置在触发之后、图像捕获之前

3.2 流中的节点放置

正确的流程结构:

All Block Outputs → Function (Create Metadata) → Capture Metadata

Function (Pass/Fail Logic) → Final Pass/Fail

注意

"Final Pass/Fail" 节点是实现流程正常运行所必需的。每个流程必须以该节点结束。

第 1 部分:Camera Communication Architecture

2.1 通信架构概览

本页说明 OV20i 的双层通信设计,以及原生工业协议如何与 Node-RED 可扩展的通信能力并行工作。

相机到 PLC 通信失败

选项 1:EtherNet/IP(网络集成)

工作原理

步骤 4:配置元数据字段

4.1 设置基本元数据

  1. 双击 捕获元数据 节点
  2. 配置要跟踪的元数据字段
  3. 为每个字段设置数据源

4.2 元数据格式要求

重要

元数据必须格式化为一个对象,包含:

  • 字符串键 - 字段名必须是文本
  • 字符串或数字值 - 数据可以是文本或数字

正确格式示例:

{
"part_number": "P12345",
"serial_number": "SN987654",
"operator": "John_Smith",
"shift": "A",
"quantity": 100,
"temperature": 23.5
}

步骤 5:创建元数据函数节点

5.1 添加用于元数据创建的函数节点

  1. 在 "All Block Outputs" 与 "Capture Metadata" 节点之间添加一个 "function" 节点
  2. 双击该函数节点以进行配置
  3. 该函数将从检测结果中提取数据并创建元数据

5.2 从所有输出块提取数据

"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 静态元数据(固定值)

对于生产过程中不会改变的信息:

// 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 动态元数据(使用检测数据)

来自检测结果的信息:

// 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;

步骤 6:连接元数据和通过/失败流

6.1 必要的流程结构

每个流程必须包含来自 "All Block Outputs" 的两条路径:

All Block Outputs → Function (Create Metadata) → Capture Metadata

Function (Pass/Fail Logic) → Final Pass/Fail

6.2 连接元数据路径

  1. 将 "All Block Outputs" 的输出连接到元数据函数的输入
  2. 将元数据函数的输出连接到 "Capture Metadata" 输入
  3. Capture Metadata 节点可以是终端节点(不需要输出连接)

6.3 连接通过/失败路径

  1. 将 "All Block Outputs" 的输出连接到一个通过/失败逻辑函数
  2. 将逻辑函数的输出连接到 "Final Pass/Fail" 输入
  3. “Final Pass/Fail” 节点为必填项 - 每个流程必须在此结束

6.4 示例通过/失败逻辑函数

// 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 部署与测试

  1. 点击“部署”按钮(右上角)
  2. 使用配置的触发方法触发检查(手动、数字输入或 PLC)
  3. 验证如下:
    • 已捕获图像
    • 元数据随图像一起显示
    • 已作出通过/失败决策
    • 流程已成功完成

7.2 验证完整流程

请确认两个路径均可工作:

元数据路径:

  • 在主界面导航到 Library
  • 找到您的测试图像
  • 验证元数据在图像详情中显示

通过/失败路径:

  • 检查检查结果是否显示通过/失败状态
  • 验证 “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 节点 payload 格式
数据类型错误节点显示错误状态确保值仅为字符串或数字

9.2 调试元数据流

添加调试节点进行排错:

  1. 在触发后添加调试节点以验证触发是否工作
  2. 在元数据函数之后添加调试节点以检查 payload
  3. 在 捕获元数据 之后添加调试节点以确认处理
  4. 在调试面板中检查错误信息

第 10 步:最佳实践

10.1 流设计

设计高效的元数据流程:

  • 在流程中尽早保留元数据 - 在触发后立即设置元数据
  • 使用单一 Capture Metadata 节点 - 不要重复使用 Capture Metadata 节点
  • 保持流程连贯性 - 元数据必须成为主检测流程的一部分
  • 处理缺失数据 - 始终提供默认值

10.2 元数据字段命名

使用一致、清晰的字段名称:

  • 使用下划线代替空格("part_number" 而非 "part number")
  • 描述性强但简洁("operator" 而非 "op")
  • 使用小写字母以保持一致性
  • 避免可能引发问题的特殊字符

10.3 性能考量

对于高产量生产:

  • 尽量减小元数据大小 - 仅包含必要信息
  • 使用高效的数据类型 - 尽可能使用数字,尽量使用短字符串
  • 避免复杂处理 - 让元数据创建保持简单高效
  • 缓存全局数据 - 将常用数据存储在全局变量中

成功!您的元数据系统已就绪

您的元数据配置现在可以:

✅ 将自定义信息附加到每次触发的图像捕获

✅ 跟踪与检测流程同步的生产数据

✅ 将可检索信息存储在相机库中

✅ 在 HMI 上为操作员显示相关数据

✅ 支持制造要求的可追溯性

进行中的维护

常规系统检查

  • 验证元数据是否随触发捕获一起出现
  • 检查生产运行中的缺失数据
  • 在高触发率条件下监控流程性能
  • 随着需求变化更新元数据字段

流管理

  • 审查生产中的元数据时序
  • 优化 Function 节点性能
  • 更新全局变量管理
  • 对操作员进行基于触发的操作培训

下一步

设置基于触发的元数据后:

  1. 使用所有配置的触发类型(手动、数字、PLC)进行测试
  2. 对操作员进行元数据捕获的正确触发使用培训
  3. 设置全局变量管理以处理动态数据
  4. 为不同产品线创建元数据模板
  5. 使用元数据分析实现生产监控

🔗 相关链接