序列文件结构
采集序列文件以 JSON 格式定义,但文件扩展名为“.seq”。每个可用于某一配置的特定采集序列都需要自己的序列文件。
采集顺序必须由一系列“通道”
每个通道还为相机或外围设备定义了一个参数集,当激活采集序列时,应将其加载到设备中。这可以是每个图像源隐含的主要参数集,也可以是可以使用 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_param 和 set_framegrabber_param 中使用的参数名称。但是,您也可以通过 MERLIC RTE Setup 获取内部名称。
获取内部参数名称
- 打开 MERLIC RTE Setup 并转到“图像源”选项卡。
- 选择相应的图像源配置和相机设备。确保配置处于活动状态。
- 打开右侧的参数选项卡,其中提供了所需的相机参数:
- 对于 EasyParam,打开“EasyParams”选项卡。
- 对于任何其他相机参数,打开“所有参数”选项卡。
- 在参数列表中查找所需的参数。
- 右键单击参数名称,并通过上下文菜单复制内部名称。
- 现在,您可以将名称粘贴到序列文件中。
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"
}
}