使用技巧

「Dynamic Vision App for HALCON」

轻松开发 HALCON 图像处理程序以用于 IDS NXT 视觉应用程序

Dynamic Vision App for HALCON

使用 HALCON 开发图像处理程序,然后直接在 IDS 基于视觉应用程序的相机中执行该程序,无需额外编写 IDS NXT 视觉应用程序,也无需需要耗费大量时间使用 C++ 开发视觉应用程序!而这一切,借助「Dynamic Vision App for HALCON」即可实现。「Dynamic Vision App for HALCON」是开发图像处理程序开发的绝佳补充。

通过本技术指南,您将学习如何在不用编写 C++ 代码的情况下,通过几个简单的步骤在 Hdevelop 创建合适的 HALCON 库,以及如何通过 IDS NXT Cockpit 轻松将该 HALCON 库上传至 IDS NXT vegas 相机并加以运行。例如,简单的图像处理程序“example_code2d.hdpl”可在捕捉的图像数据中搜索数据矩阵代码,并在视觉应用程序的结果图像中标记这些数据矩阵代码。此外,代码内容以文本的格式输出。 通过 IDS 开发的 IDS NXT Framework,您可以随意为基于视觉应用程序的相机量身打造视觉应用程序。借助 IDS NXT 视觉应用程序开发工具包,您只需具备 C++ 知识即可开发和执行自己的视觉应用程序。 但是这个过程可以变得更加简单,只需借助 IDS 新开发的「Dynamic Vision App for HALCON」即可。「Dynamic Vision App for HALCON」是开发图像处理程序开发的绝佳补充。如果您只想使用已预先安装的 HALCON 执行图像处理,您完全可以使用该通用应用程序,无需耗费大量时间使用 C++ 开发视觉应用程序。它不仅可以执行您在 Hdevelop 中编写的 HALCON 图像处理程序,还可以通过 REST 界面提供定义的输入和输出参数。「Dynamic Vision App for HALCON」视觉应用程序还可在 IDS NXT Cockpit 中显示这些参数,以便于您配置和检查图像处理程序。

直接执行 HALCON 库。
直接执行 HALCON 库。

先决条件

为在执行本文所述的程序之前做好准备以及更好地理解 IDS NXT 概念,我们建议您参阅“IDS NXT - 视觉应用程序开发”手册和观看IDS NXT 视频教程。要按照本技术指南操作,您需要准备:

  • IDS NXT vegas 相机(固件版本3 及以上)
  • Windows PC(已连接到 IDS NXT vegas相机)
    • 已获许可的 HALCON 13 开发环境
    • IDS NXT Cockpit(固件版本2.4 及以上)
  • 「Dynamic Vision App for HALCON」

 

借助 IDS NXT Cockpit 在 IDS NXT vegas 相机上安装并启用「Dynamic Vision App for HALCON」。“IDS NXT - 操作” 手册中的“Vision App Manager”一章中详细说明了如何安装视觉应用程序。

在 Vision App Manager 中开启「Dynamic Vision App for HALCON」。
在 Vision App Manager 中开启「Dynamic Vision App for HALCON」。

如果视觉应用程序已成功启动,IDS NXT Cockpit 配置面板随即显示配置对话框。然后您可以上传兼容的 HALCON 库(开发步骤见下文)。

IDS NXT 视觉应用程序仅可由管理员用户安装和卸载!

HALCON 程序开发

「Dynamic Vision App for HALCON」在“HDevelop 程序库”(HDPL) 与 IDS NXT 系列中基于视觉应用程序的相机的 IDS NXT Framework 之间建立关联。用户可通过相机 REST 界面和 IDS NXT Cockpit 查看控制参数和图像处理结果。如此一来,图像处理程序便可像一个完整的视觉应用程序一样直接运行。

为确保 HALCON 库与 dynamic vision app 兼容,HALCON 程序必须具有特殊的名称,而且已明确定义了(语义类型)输入和输出参数(程序接口)。这样「Dynamic Vision App for HALCON」才能自动选择合适的配置或选择通过 REST 界面提供的结果变量。

「Dynamic Vision App for HALCON」在 HALCON 和 IDS NXT Framework 之间建立关联。
「Dynamic Vision App for HALCON」在 HALCON 和 IDS NXT Framework 之间建立关联。

HALCON 库结构

为与 IDS NXT dynamic vision app 建立通信,HALCON 图像处理程序要求将以下 HDPL 程序作为切入点:

  • init”- 在该库加载完毕时执行。InputCtrlParams(变量,控制参数)和 OutputCtrlParams (显示的参数,结果)在 init 中注册。
  • finalize”- 在卸载该库之前调用,可清除 init 创建的所有数据结构。
  • train”- 用于训练 HALCON 图像处理。该程序为可选项。如果已创建,则系统会执行相应的训练。
  • process”- 图像处理程序的实际处理功能。

创建程序

在 Hdevelop 中创建所需的“库程序 (.hdpl)”类型的程序,并将它们保存在同一库中。对于各程序,指定所需的输入输出参数(图形参数和控制参数)及其参数文件(语义)。

 

带有参数文件(语义)且完全定义的程序接口至关重要。

重要信息! 必须在“参数文档”选项卡中为HALCON过程的输入和输出参数分配正确的“语义类型

为本技术指南的图像处理示例 (example_code2d.hdpl) 创建以下程序参数:

程序 参数 类型 语义
init codetype  输入:控制参数

字符串

(值:二维码(默认)、数据矩阵 ECC 200)

codemodel  输出:控制参数 datacode_2d
process


image  输入:图形参数 image
searcharea  输入:图形参数 区域
codemodel  输入:控制参数 datacode_2d
contour  输出:图形参数 xld
cutout  输出:图形参数 image
content  输出:控制参数 字符串
finalize codemodel  输入:控制参数 datacode_2d
train


image  输入:图形参数 image
firstarea  输入:图形参数 image
codemodel  输入:控制参数 datacode_2d
content  输出:控制参数 字符串
sizemin  输出:控制参数 整数
sizemax  输出:控制参数 整数

参数语义

HALCON 参数语义尤为重要。这些参数语义定义了 dynamic vision app 将查询或传输哪些参数类型至各个 HALCON 程序。根据 HALCON 参数的语义,vision app 將将动态生成适合的交互参数并在 REST 界面上显示。该示例中生成了以下交互参数:

HALCON 程序参数

IDS NXT
交互参数

codetype Combo Box Ctrl
image image
contour 带标记的图像
content 标签
searcharea 可调整的区域(图像区域)

 

交互参数显示为视觉应用程序的图形元素。
交互参数显示为视觉应用程序的图形元素。

图像处理

本技术指南仅阐述「Dynamic Vision App for HALCON」和 HALCON 库之间如何通过程序接口进行通信。

“init”程序控制参数“codetype”可用于选择代码类型,而二维码模型“codemodel”还可在其他程序中充当输入参数。此外,还可以加载或创建包含训练数据的文件,以用于生成更详细的代码模型。

init ( : : codetype : codemodel )

if (FileExistsTraining)
read_data_code_2d_model(TrainingFilePath, codemodel)
[...]
else
create_data_code_2d_model(codetype, [], [], codemodel)

在“process”程序中,图像数据量首先在用户设置的“searcharea”的帮助下减少。然后 HALCON 使用(经训练的)“代码模型”搜索该区域中的二维码,并输出“content”字符串中的结果及其在“contour”图像中的图像位置(即 XLD)。“cutout”图像显示切出码。

process ( image, searcharea : contour : codemodel : content )

find_data_code_2d (image, contour, codemodel, [], [], ResultHandles, content)
[...]
reduce_domain(image, Region, cutout)

在“train”程序中,代码模型得到进一步完善,而训练数据则保存于文件中。

train ( image, firstarea : : codemodel : content, sizemin, sizemax )

find_data_code_2d(ImageReduced, contour, codemodel, ['train'], ['all'], ResultHandles, content)
[...]
write_data_code_2d_model(codemodel, TrainingFilePath)

“finalize”程序通过删除“codemodel”清空内存。

finalize ( : : codemodel : )

clear_data_code_2d_model(codemodel)

上传 HALCON 库

创建的 HALCON 库现已可以使用。使用 dynamic vision app 中的“上传”按钮 () 上传之前创建的 HALCON 库。当该库上传成功后,您即会看到一条通知消息。之后,dynamic vision app 会在 IDS NXT Cockpit 中显示 HALCON 库的输入和输出参数,然后,您便可使用该图像处理程序。

HALCON 库会永久保存在相机内存中,即使重新启动相机,也是如此,除非您通过“删除”按钮 () 将它从系统中删除或者上传其他库将它覆盖掉。您每次只能加载并启用一个库,但您随时都可以更改图像处理程序。

提示

执行

将通用视觉应用程序和 HALCON 库结合使用并不能实现最佳的速度,因此这种方式无法媲美专门编写并实现的 C++ 视觉应用。本技术指南中的 example_code2d.hdpl 的速度可达到专门的矩阵码读取器视觉应用程序速度的 70% 左右。「Dynamic Vision App for HALCON」提供的优势在于用户可以快速、轻松地在基于视觉应用程序的相机上测试 HALCON 图像处理程序,无需编写 C++ 源代码,也无需针对相机平台对其进行交叉编译。

异常处理

如果在执行 HALCON 程序的过程中出现未经处理的异常,vision app 会重启并卸载 HALCON 库。为避免视觉应用程序出现崩溃,请务必在 HALCON 程序中处理所有出现的异常(使用 try...catch 处理异常)。

建议

避免重启

如果在开发 HALCON 图像处理库的过程中 vision app 崩溃,则需要避免 vision app 自动反复重启视觉应用程序。您可以使用 REST 命令避免这种情况发生。然后手动确定该应用程序在何时启动。

curl -u <user credentials> -X PUT /vapps/activated/dynamic_vision_app_for_halcon?temporary=true <device URL>

对于当前执行的视觉应用程序,该 REST 命令仅生效一次。

显示日志

要显示「Dynamic Vision App for HALCON」的详细日志来查找视觉应用程序或图像处理程序的故障,请在浏览器中调用以下 URL:

http://<device IP>/vapps/dynamic_vision_app_for_halcon/log

该日志表明在加载 HALCON 库的过程中未出现错误。
该日志表明在加载 HALCON 库的过程中未出现错误。

「Dynamic Vision App for HALCON」会分析该库中定义的程序参数,并创建所需的视觉应用程序交互元素(参见用黄色标记的部分),例如配置项、输入和结果。使用该应用程序日志,您可以更轻松发现并纠正 HALCON 图像处理程序中的执行错误。

借助标准的输出文件,您可以将 HALCON 消息并入该日志中。

open_file('standard', 'output', stdout)
result := 'NIO'
fwrite_string (stdout, result + '\n')

总结

Dynamic Vision App for HALCON」支持基于视觉应用程序的相机(如 IDS NXT vegas 相机)上快速、轻松运行基于 HALCON 的图像处理程序。这样您便可专心创建 HALCON 例程,而无需耗费大量时间使用 C++ 编写自己的视觉应用程序。借助这种简单的上传机制,您可以在相机运行时随时更改基于 IDS NXT 视觉应用程序的相机的用途。您无需熟练掌握 C++ 或视觉应用程序编程,即可轻松搞定嵌入式图像处理程序。

如果您想深入了解 IDS NXT 视觉应用程序概念及其使用方法,请参阅 IDS NXT 视觉应用程序开发指南和观看 IDS NXT 视频教程。 在 MVTec 的 HALCON 产品页上,您可以找到简单、直观的 HALCON 机器视觉应用程序编程指南。

更多技术指南和应用报告,请访问 IDS 网站。在 IDS 网站上,您还可以找到有关IDS NXT 系列的全新基于视觉应用的工业相机的更多信息。