序列文件结构

采集序列文件以 JSON 格式定义,但文件扩展名为“.seq”。每个可用于某一配置的特定采集序列都需要自己的序列文件。

采集顺序必须由一系列“通道” (lanes)指定。通道定义特定图像源的一系列“操作”。因此,在采集序列中,每个图像源都在自己的通道中进行配置。MERLIC 当前支持不同类型的操作:采集图像、设置单个相机参数、设置延迟以及设置同步屏障。

每个通道还为相机或外围设备定义了一个参数集,当激活采集序列时,应将其加载到设备中。这可以是每个图像源隐含的主要参数集,也可以是可以使用 MERLIC RTE Setup 保存的备选参数集。您可以在下面找到更详细的信息。

文件版本

采集序列文件格式区分版本。文件版本由主要版本和次要版本组成。

MERLIC 5.8 使用主要文件版本 2。如果您曾在 MERLIC 5.4 或 5.5 中使用采集序列文件,它们使用的是主要版本 1。首次启动 MERLIC 5.8 或更高版本时,用主要文件版本 1 定义的现有序列文件将自动升级到文件版本 2。

升级后的文件不向后兼容,因此无法将其用于先前版本的 MERLIC。将自动创建扩展名为“.seq.1”的版本 1 序列文件的备份,以防您需要手动降级。

次要文件版本将在未来的 MERLIC 版本中使用,便于以向后兼容的方式扩展文件格式。

JSON 架构和编辑器支持

MVTec 提供采集序列文件格式的 JSON 架构定义。使用支持 JSON 架构的现代文本编辑器可以以各种方式简化编写序列文件的过程:

  • JSON 文件中的键和属性可以由编辑器根据架构定义自动补全。
  • 编辑器可以显示模式中给出的描述,例如当鼠标悬停在 JSON 文件中的键和属性上时。
  • 在编写序列文件时,可以及早发现许多常见错误,例如缺少强制键、无效值或错误的数据类型。

为了从 JSON 模式中受益,请在序列文件的顶层对象中纳入以下键:

复制
"$schema": "http://download.mvtec.com/acquisition-sequence-v2.0.schema.json",

这告诉编辑器架构定义所在的位置。此外,您可能需要告诉编辑器将“.seq”文件视为 JSON。例如,在 Visual Studio Code 中,单击编辑器窗口状态栏中的文件类型,通常是“Plain Text”,然后选择“JSON”。

通道

采集序列由序列文件中的一系列“通道”定义。您可以为每个图像源配置一个通道。但是,并非必须在图像源配置中为每个图像源定义一个通道。通道包含一组特定的信息:

属性

描述

DeviceType

定义图像源的类型。目前,它必须始终设置为“ImageSource”。

DeviceId

定义为其配置通道的图像源的名称。

Actions

定义应用于相应图像源的一组“操作”,例如采集图像。

当执行采集序列时,会按顺序逐一执行通道的操作。可以使用以下操作:

AlternativeParameterSet

指定执行序列时用于图像源的参数集名称,或指定“null”以使用主要参数集。

每当执行采集序列时,通道都会并行执行。

序列文件的基本结构可能如下:

复制
{
    "$schema": "http://download.mvtec.com/acquisition-sequence-v2.0.schema.json",
    "Version": "2.0",
    "Lanes": [
        {
            "DeviceType": "ImageSource",
            "DeviceId": "Cam1",
            "AlternativeParameterSet": null,
            "Actions": []
        },
        {
            "DeviceType": "ImageSource",
            "DeviceId": "Cam2",
            "AlternativeParameterSet": null,
            "Actions": []
        }
    ]
}

在创建或编辑采集序列文件时,可以使用“$schema”关键字引用为采集序列定义的 JSON 架构:

复制
{
    "$schema": "http://download.mvtec.com/acquisition-sequence-v2.0.schema.json",
    "Version": "2.0",
    "Lanes": [
        ...
    ]
}

该架构可用于验证格式是否有效,并允许使用辅助功能,如代码补全和显示参数相关信息,前提是您选择的 IDE 或文本编辑器支持这些功能。

可用“Actions

AcquireImage

此操作可用于从图像源采集图像。它只包含一个定义图像名称的属性“ImageName”。该名称在采集序列中必须是唯一的。它还表示在选择要在 MVApp 中使用的图像时,将在 MVApp图像源 工具中显示的名称。

若您正在为已存在的 MVApp 配置采集序列,请记住,要么将图像名称定义为与 MVApp 中已设置的名称一致,要么根据采集序列中的新名称调整 MVApp。否则,可能会出错。

对非串流传输设备使用此操作时也会出错。它只能用于常规相机设备。

示例
复制
{
    "Type": "AcquireImage",
    "Attributes": {
         "ImageName": "Image1"
    }
}  

SetParameter

此操作可用于设置相机设备的参数。参数的名称和值必须通过属性“ParameterName”和“ParameterValue”传递。

您可以设置相机参数和 MVTec EasyParams 的值。对于这两种类型的参数,必须在“ParameterName”属性中给出参数的相应内部名称。内部名称由制造商定义,可能与 MERLIC RTE Setup 的“图像源”选项卡中显示的名称不同。例如,相机参数的内部名称可能有其他前缀,或者可能与显示名称相同,但不带空格。它们对应于 HALCON 在算子 get_framegrabber_paramset_framegrabber_param 中使用的参数名称。但是,您也可以通过 MERLIC RTE Setup 获取内部名称。

获取内部参数名称

  1. 打开 MERLIC RTE Setup 并转到“图像源”选项卡。
  2. 选择相应的图像源配置和相机设备。确保配置处于活动状态。
  3. 打开右侧的参数选项卡,其中提供了所需的相机参数:
    • 对于 EasyParam,打开“EasyParams”选项卡。
    • 对于任何其他相机参数,打开“所有参数”选项卡。
  4. 在参数列表中查找所需的参数。
  5. 右键单击参数名称,并通过上下文菜单复制内部名称。
  6. 现在,您可以将名称粘贴到序列文件中。

EasyParams 的内部名称如下:

EasyParam

用于序列的内部名称/“ParameterName

Automatic Exposure Control

[Consumer]exposure_auto

Exposure Time

[Consumer]exposure

Automatic Gain Control

[Consumer]gain_auto

Gain

[Consumer]gain

Trigger Method

[Consumer]trigger

Trigger Activation

[Consumer]trigger_activation

Trigger Delay

[Consumer]trigger_delay

示例
复制
{
    "Type": "SetParameter",
    "Attributes": {
        "ParameterName": "[Consumer]exposure",
        "ParameterValue": 200.0
    }
}

默认情况下,每次执行序列后,修改后的参数都会重置为其先前的值。通过将属性“ExcludeFromRollback”设置为“true”,可选择停用此行为。但是,应谨慎使用此选项,因为它可能会导致意外的相机配置,特别是在设置依赖于其他值的相机参数以及使用多个采集序列时。

Delay

此操作可用于将通道的执行延迟指定的持续时间(毫秒)。该延迟必须在属性“Milliseconds”中定义。

示例
复制
{
    "Type": "Delay",
    "Attributes": {
        "Milliseconds": 2000
    }
}

Barrier

不同图像源的通道并行执行。此操作可用于同步两个或多个通道的执行。当一条通道到达屏障时,它会等待所有其他通道也到达相应的屏障,即具有相同“BarrierName”属性的屏障。

示例
复制
{
    "Type": "Barrier",
    "Attributes": {
        "BarrierName": "barrier1"
    }
}