Halcon快速入门

前言

工业智慧视觉应用主要涉及四个场景:识别、测量、定位、检测。

  • 识别:识别物体的物理特征,包括形状、颜色、字符和条码等,常见的应用场景是 OCR,读取零部件上的字母、数字、字符等用于溯源。
  • 测量:把获取到的图像像素信息标定成常用的度量衡单位,再通过精确计算出目标的几何尺寸。
  • 定位:获取目标的二维/三维位置信息,常用语元件定位,用以辅助机器臂进行后续的抓取等动作。
  • 检测:一般特指缺陷检测,判断产品是否存在缺陷,如零部件缺陷检测等。
image

一,HALCON 概述

HALCON 是德国 MVtec 公司开发的一款综合性的机器视觉标准软件,拥有全球通用的集成开发环境(HDevelop)。它节约了产品成本,缩短了软件开发周期——HALCON 灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的机器视觉(Machine Vision)软件。

MVTec 提供了 5 种软件:HALCON、MERLIC、深度学习工具、接口、嵌入式视觉,其中 HALCON 是最核心和应用最广的。

HALCON 主要提供的技术有:条形码和二维码读取、BLOB 分析、物图像分类、计算光学成像、过滤技术、缺陷检查、匹配、1D/2D/3D 测量、形态学处理、OCR 和 OCV、基于样本的识别(SBI)、亚像素边缘检测和线条提取技术、深度学习和 3D 视觉技术。

所谓 Blob 分析,即是从连通像素中提取具有相同逻辑状态的特征 (Blob)。

更多技术的描述请参阅官网资料

image

1.1,HALCON 安装

注意:HALCON 目前不支持 arm 处理器版的 M1 Pro 机器,而且目前主流是在 Windows 开发居多。

注意,需要先在官网注册账号,然后才能下载对应软件,MVTec HALCON 提供两个不同的软件版本:HALCON 订阅版 (HALCON Progress)HALCON 永久版 (HALCON Steady)。两个版本是完全独立的。 需要许可证,这意味着没有可能从一个版本 "切换" 到另一个版本。

HALCON 下载安装步骤如下所示:

  1. 进入 HALCON 官网,选择产品版本、操作系统以及架构后就会下载对应版本软件直接点击下载好的安装包即可安装。
  2. 安装的详细步骤截图如下所示,试用版不用安装 license 文件,跳过即可。
image
image
image
image

二,HALCON 架构

HALCON 架构如下图 2.1 所示。HALCON 机器视觉软件的主要部分就是图像处理库,其由超过 2000 多个算子组成,当然我们也可以通过拓展包的形式开发自定义算子,并在程序中使用。

image

HALCON 提供了通用的图像采集接口来支持不同的图像采集设备(3D相机、相机等),包好特定设备的实现库会在程序运行时动态加载。

2.1,算子

Operators。

我们使用 HALCON 库中任何功能实际上都是通过算子(Operators)完成的,每个功能都有多种实现方法,其可以通过算子参数选择。完整的算子列表在 HALCON Operator Reference,其提供了 HDevelop, .NET, Python, C++, 和 C syntax 接口。HALCON库提供的算子的重要特征如下:

  • 算子之间没有层次结构,所有算子都是一个级别的。
  • 存在逻辑算子。
  • 很多算子可以使用并行加速技术。
  • 算子的输入输出参数的排序是有标准化规则: 输入图标(iconic)、输出图标、输入控制和输出控制。

2.1.1,参数和数据结构

Quick Guide to HALCON Parameters and Data Structures

HALCON 算子的参数有两种基本类型:图标数据和控制数据(iconic data and control data)。图像、区域(regions)和 XLD(拓展线描述) 属于标志性数据。

  • Images(图像)即包含像素值的矩阵,由多个通道组成,其详细定义可以参考《数字图像处理》书籍。这里感兴趣区域 ROI 指的是输入图像的哪一部分区域会被处理,ROI 可以灵活定义,从简单的矩形到一组未连接到像素点都支持。
  • Regions 由一系列像素组成。区域之中的像素可以不互相连接,任意像素集合都可以作为单个区域处理。
  • XLDS 包括所有基于轮廓和多边形的数据。像 edges_sub_pix 这样的亚像素精度算子将轮廓作为 XLD 数据返回。 轮廓是一系列 2D 控制点,由线连接。 通常,控制点之间的距离约为 1 个像素。 除了控制点之外,XLD 对象还包含所谓的局部和全局属性。 这些的典型示例是,例如,控制点的边缘幅度或轮廓段的回归参数。 除了提取 XLD 对象外,HALCON 还支持进一步处理。 这方面的示例是基于给定特征范围的轮廓选择,用于将轮廓分割成线、弧、多边形或平行线。

控制数据(control data)包括句柄和基本数据类型,如整数、实数、字符串。

句柄是对复杂数据结构的引用,例如,与图像采集接口或基于形状匹配的模型的连接。 出于效率和数据安全的原因,在操作符之间传递的不是整个结构而是只有句柄。 句柄是不能更改的神奇值(magic values),并且可能因执行和版本而异。 一旦所有引用被覆盖,它们就会自动清除。 使用句柄的示例有图形窗口、文件、套接字、图像采集接口、OCR、OCV、测量和匹配

2.2,拓展包

为了支持特殊硬件或实现新的算法,HALCON 支持以 C 语言实现的自定义算子。拓展包接口包含几个预定义的例程和宏,用于在 C 中轻松处理图像数据和内存对象。成功集成新算子后,它可以像任何其他 HALCON 算子一样使用。

2.3,接口

HALCON 支持Python、C、C++ 和 .NET 语言接口,对于·不同编程语言接口,其数据类型、类和算子的命名会有所不同。

2.3.1,HALCON-Python 接口

读取图像并计算连接区域(connected regions)数量的示例代码如下。

img = ha.read_image('pcb')
region = ha.threshold(img, 0, 122)
num_regions = ha.count_obj(ha.connection(region)) print(f'Number of Regions: {num_regions}')

2.3.2,HALCON-C 接口

C 接口是 HALCON 支持的最简单的接口,每个算子由 1 或 2 个全局函数表示,其中算子的名称和参数序列和 HDevelop 语言相同。

因为 HALCON 算子的本身就是由 C 语言实现的,所以 C 是原生接口,支持也是最好。

以下示例代码也是实现读取图像并计算连接区域(connected regions)数量。

Hobject img;
read_image(&img, "pcb");
Hobject region;
threshold(img, &region, 0, 122);
Hobject connected_regions;
connection(region, &connected_regions);
Hlong num_regions = 0;
count_obj(connected_regions, &num_regions);
printf("Number of Regions: %" PRIdPTR "\n", num_regions);

2.3.3,HALCON-C++ 接口

C++ 接口比 C 接口复杂得多,应用了 C++ 面向对象编程的优点,包括自动类型转换、构造和析构函数等。另外和 C 接口一样,也为每个 HALCON 算子提供了全局函数,来实现程序化的编程风格(a procedural style of programming)。

读取图像并计算连接区域(connected regions)数量的 C++ 接口实现代码如下。

HImage img{"pcb"};
HRegion region = img.Threshold(0, 122);
Hlong numRegions = region.Connection().CountObj();
std::cout << "Number of Regions: " << numRegions << '\n';

2.3.4,HALCON-.NET 接口

2.4,图像获取接口

HALCON 通过动态库(Windows: 动态加载库 DLLs, Linux: 共享库 shared libraries)的形式为 50 多个图像采集卡和数百个工业相机提供采集图像的接口。库名称以前缀 hAcq 开头;HALCON XL 使用以 xl 结尾的库。

HALCON 图像采集接口的更新会比 HALCON 库本身更新更为频繁。

成功安装好图像采集设备后,通过 open_framegrabber 算子(需配置设备的名称和其他信息)访问设备,通过 grab_image 算子获取图像。

2.5,I/O 接口

HALCON 对不同 I/O 设备使用同一类算子实现统一访问。安装好 I/O 设备后,使用 open_io_device 算子建立连接,指定 I/O 设备接口的名称;建立连接后,通过调用 open_io_channel 来打开传输通道,然后使用 read_io_channelwrite_io_channel 算子读取和写入值。

三,如何开发应用

官方推荐使用 HDevelop(HALCON 机器视觉库的交互式开发环境) 进行快速原型设计。在开发好 HDevelop 程序后需要将其转换为最终环境,方法有以下三种:

  • Start from Scratch: 从头(scratch)开始编写程序意味着手动将 HDevelop 代码翻译成目标编程语言(C++、Python...)。
  • 导出 HDevelop 代码: 使用 HDevelop 的代码导出功能将您的 HDevelop 代码自动翻译成目标编程语言。
  • 导出库项目::HDevelop 的库导出会生成一个即用型项目文件夹,包括目标语言的包装代码和用于构建项目的 CMake 文件。 HDevelop 的库导出使用 HDevEngine,一个充当解释器的库。

3.1,HDevelop

默认情况下,HDevelop 窗口入下图 3.1 所示,窗口主要分为 3 类

  1. **图形窗口: **显示(中间)结果。即显示图像、区域和 XLD 等标志性数据。
  2. **程序窗口: **即输入和编辑代码的地方。
  3. 变量窗口: 显示所有变量。即显示图标变量(iconic variables)和控制变量。图标变量包含图标数据,控制变量包含控制数据。
image

3.2,示例程序

推荐观看视频教程: Integrate HDevelop code into a C++ application using the Library Project Export

分步说明的描述可以参考 《quick_guide》 文档的3.2 节内容。

四,更多参考资料

HALCON 相关文档描述及下载链接汇总如下表所示。

REFERENCE MANUAL 参考手册 下载链接 文件大小
HALCON Operator Reference(HALCON 算子参考资料) 下载 PDF
在线阅读 (需要 Javascript)
24.8 MB
BASICS 基础知识 下载链接 文件大小
Quick Guide(快速指南) 下载 PDF 2.6 MB
Installation Guide(安装指南) 下载 PDF 0.4 MB
HDevelop Users' Guide(HDevelop 用户指南) 下载 PDF 6.2 MB
Solution Guide I - Basics(解决方案指南 I - 基础知识) 下载 PDF 6.7 MB
Solution Guide II - A - Image Acquisition(解决方案指南 II-B - 图像采集) 下载 PDF 0.7 MB
Solution Guide II - B - Matching(解决方案指南 II-B - 匹配) 下载 PDF 3.4 MB
Solution Guide II - C - 2D Data Codes(解决方案指南 II-C - 二维码) 下载 PDF 4.6 MB
Solution Guide II - D - Classification(解决方案指南 II-D - 分类) 下载 PDF 4.3 MB
Solution Guide III - A - 1D Measuring(解决方案指南 III-A - 1D 测量) 下载 PDF 1.2 MB
Solution Guide III - B - 2D Measuring(解决方案指南 III-B - 2D 测量) 下载 PDF 2.5 MB
Solution Guide III - C - 3D Vision(解决方案指南 III-C - 3D 视觉) 下载 PDF 14.2 MB
Technical Updates(技术更新) 下载 PDF 0.2 MB

本文由博客一文多发平台 OpenWrite 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容