Halcon参考手册, 第十四章 Identification, 识别

第十四章 Identification, 识别

14.1 Bar Code, 条形码

操作符列表

clear_bar_code_model
删除一个条码模型并释放已分配的内存

create_bar_code_model
创建一个条形码阅读器的模型。
decode_bar_code_rectangle2
解码矩形内的条形码符号。
deserialize_bar_code_model
反序列化条形码模型。
find_bar_code
检测和读取图像中的条形码符号。

get_bar_code_object
访问在搜索或解码条形码符号期间创建的图标对象。
get_bar_code_param
获取描述条形码模型的一个或几个参数。
get_bar_code_param_specific
获取条形码读取器在处理特定条形码类型时使用的参数。
get_bar_code_result
获取在解码条形码符号期间累积的字母数字结果。

query_bar_code_params
获取可用于给定条形码模型的set_bar_code*和get_bar_code*操作符的参数名称。

read_bar_code_model
从文件中读取条形码模型并创建新模型。

serialize_bar_code_model
序列化条形码模型。
set_bar_code_param
设置条形码模型的选定参数。

set_bar_code_param_specific
为所选条码类型设置条码型号所选参数。

write_bar_code_model
写一个条形码模型到一个文件。

14.2 Data Code, 数据代码

本章包含读取二维数据码的运算符。

14.2.1 读取二维数据代码的概念

二维数据编码符号是一种特殊的二维模式,用于编码文本和数字。HALCON能够读取最流行的2D数据代码: 数据矩阵ECC 200,  QR码,微型QR码,阿兹特克代码和PDF417。这些代码包含一个查找器模式和一个数据模式。查找器模式用于定位符号的模式,并获得有关符号的几何属性的基本信息,例如符号的方向。数据模式包含代码本身,由多个点、条或小正方形组成,即所谓的模块。由于编码的特殊设计,即使某些部分受到干扰,也能正常解码。

读取PDF417类型的二维数据码。这个映像来自示例程序2d_data_codes_default_settings.hdev。

下面简要介绍读取二维数据码所需的步骤。

1.创建二维数据代码模型:

首先,必须使用创建一个2D数据代码模型
create_data_code_2d_model。
该模型为读者提供了有关代码结构的所有必要信息。对于正常的打印代码,只需要提供名称,HALCON将选择合适的默认参数。对于特殊情况,可以在创建2D数据代码模型时修改模型参数,或者在后面的步骤中修改模型以使模型适应特定的符号外观。

2.非标代码修改模型参数:

使用默认参数,2D数据代码读取器能够读取范围广泛的代码。对于非标准代码,参数可以修改使用
set_data_code_2d_param。
在这里,可以使用通用参数“default_parameters”选择一组增强的默认参数,例如,使用值“enhanced_recognition”,或者单独指定参数值,以使模型最优地适应所使用的打印样式的条件。注意,query_data_code_2d_params可用于查询对特定数据代码类型有效的参数。要获取参数当前设置的值,可以使用get_data_code_2d_param。

除了手动修改模型参数之外,还可以让HALCON使用
find_data_code_2d
使用泛型参数'train'。然后,HALCON将搜索提取给定代码所需的最佳参数。建议将此应用于多个示例图像,以确保涵盖所有变量。

3.读取二维数据代码:

定位二维数据代码,并使用
find_data_code_2d。
对于每个成功解码的符号,运算符返回周围的XLD轮廓,结果结构的句柄,结果结构包含关于符号以及关于搜索和解码过程的附加信息,以及在符号中编码的字符串。使用结果句柄和操作符 get_data_code_2d_results和 get_data_code_2d_objects,可以访问关于提取过程的其他数据,这些数据既可以用于过程分析,也可以用于显示。特别是,get_data_code_2d_results允许访问在搜索和读取符号时计算的几个字母数字结果, get_data_code_2d_objects允许访问在最后一次调用 find_data_code_2d期间创建的标志性对象。

14.2.2 进一步的操作

除了上面提到的操作符之外,write_data_code_2d_model允许将模型写入一个文件中,该文件可用于稍后创建(例如,在不同的应用程序中)模型的相同副本。这样的模型副本是由read_data_code_2d_model直接创建的(不需要调用create_data_code_2d_model)。此外,可以使用serialize_data_code_2d_model和deserialize_data_code_2d_model来序列化和反序列化2D数据代码模型。

14.2.3 术语表

二维码符号
编码字符和数字的二维图形符号。它是由被称为模块的暗点、亮条或小正方形构成的。有不同类型的二维数据编码。两种常见的类型是所谓的堆代码和所谓的矩阵码。
堆代码
一种二维数据码符号,它包含一堆按行和列排列的一维条形码。为了确保处理完整的1D条形码堆栈,该符号包含一个开始和一个停止图案。此外,这个标志被一个静默区框起来。

矩阵的代码
一种二维数据代码符号,使用由二维排列的暗和光模块组成的图形图案。该符号由三部分组成:查找器模式、数据模式和静默区。
模块
用于构建二维数据代码符号的暗点、亮点、条形或小正方形。

静默区(条形码周围的空白边缘,用于电子阅读器检测代码的起始和结束位置)
围绕符号边界的均匀框架,使符号更好地与背景或图像中的其他对象区分开来。
器模式
用于在图像中查找符号及其方向的模式。模式根据所使用的数据代码类型而有所不同。

14.2.4 进一步的信息

有关二维数据码的详细信息,请参阅“解决方案指南基础”和“二维数据码解决方案指南”。

14.2.5 操作符列表

clear_data_code_2d_model

删除2D数据代码模型并释放已分配的内存。
create_data_code_2d_model
创建一个2D数据代码类的模型。
deserialize_data_code_2d_model
反序列化一个序列化的二维数据代码模型。
find_data_code_2d
检测和读取图像中的二维数据代码符号或训练二维数据代码模型。

get_data_code_2d_objects

访问在搜索2D数据代码符号期间创建的图标对象。
get_data_code_2d_param
获取描述2D数据代码模型的一个或几个参数。
get_data_code_2d_results
获取在搜索2D数据代码符号期间累积的字母数字结果。
query_data_code_2d_params
为给定的2D数据代码模型获取可在其他2D数据代码操作符中使用的通用参数或对象的名称。
read_data_code_2d_model
从文件中读取2D数据代码模型并创建新模型。

serialize_data_code_2d_model
序列化一个2D数据代码模型。
set_data_code_2d_param
设置2D数据码模型的选定参数。
write_data_code_2d_model
将2D数据代码模型写入文件。

14.3 Sample-Based, 基于样本

本章包含基于样本的识别操作符。


14.3.1 基于样本的识别概念

通过基于样本的识别,可以根据纹理或颜色等特征来识别训练过的物体。这允许识别不携带条形码或数据代码的对象。与分类一章中描述的分类方法相比,基于样本的识别的准备和训练非常方便,不需要复杂的参数调优。基于样本的识别能够区分大量的物体。该识别对旋转、尺度和光照变化以及遮挡、杂波和适度的视角扭曲都具有鲁棒性。此外,该识别对物体的适度变形具有鲁棒性,并且在一定范围内,它甚至允许识别批量存储的产品。另一方面,这意味着如果物体看起来是相同的,那么它们就不能被区分开来,除非识别是针对其中一个特征进行的。注意,基于样本的识别只适用于有纹理的对象。
基于样本的识别只能同时识别一个对象。这意味着每个查询图像,或者更准确地说,每个查询图像的域,不能包含多个对象。

基于样本的物体识别“土豆”、“蓝莓”、“芝麻菜”和“香菇”。这些图像来自示例程序identify_vegetables.hdev。

下面简要介绍了使用基于样品的识别所需的步骤。

1.创建并准备一个示例标识符:

首先,必须通过创建和准备新的样例标识符来提供样例标识符
create_sample_identifier,
add_sample_identifier_preparation_data,
prepare_sample_identifier。
准备工作对于使样本标识符的内部数据结构适应要识别的对象类型是必不可少的。或者,可以使用write_sample_identifier将已经准备好的示例标识符写入文件,然后使用read_sample_identifier从文件中读取。
一个准备好的样本标识符可以看作是一个仓库,经过优化可以处理一组特定的对象。

2.训练样本标识符:

然后,必须用待识别的单个对象的样本训练所制备的样本标识符。对于这个,算子
add_sample_identifier_training_data和
train_sample_identifier
使用。注意,在任何时候都可以重新训练样本标识符。为此,可以使用操作符remove_sample_identifier_training_data从样本标识符中删除样本,并使用操作符add_sample_identifier_training_data将新样本添加到样本标识符中。如果待鉴定对象的种类变化不大,则不需要重复制备样品标识符。使用上图,培训对应于填充仓库。

3.应用样本标识符来识别对象:

最后,将训练好的样本识别器应用于对象的识别
apply_sample_identifier。

14.3.2 进一步的运算符来管理和控制样本标识符

除了上面提到的操作符之外,还可以使用以下操作符来管理样本标识符。使用remove_sample_identifier_preparation_data,可以删除添加到样本标识符的数据,以排除它们被用于准备。操作符set_sample_identifier_object_info和get_sample_identifier_object_info可用于为单个对象分配和查询标签,即名称。后一个操作符可以进一步用于确定关于可用于准备和训练的对象数量的一些附加信息。最后,操作符set_sample_identifier_param和get_sample_identifier_param可用于设置和检索样本标识符的控制参数。

14.3.3 术语表

下面介绍了在基于样本的鉴定中使用的最重要的术语:
对象
通过基于样本的识别来识别的对象。
对象索引
对象的索引。这个索引可以看作是对象的标签,它是在向SampleIdentifier添加准备数据或训练数据时设置的。对象索引是操作符apply_sample_identifier最重要的结果。使用操作符set_sample_identifier_object_info,可以为每个对象设置描述性名称,从而简化对识别结果的解释。
对象样本
一个物体的样本或视图。有时,也使用术语“样本图像”来指对象样本。
样本图像
如果重点在于图像,则该术语用作“对象样本”的同义词。

对象样本索引

对象样本的索引。注意,对于每个对象,该索引都是从0开始单独设置的。因此,对象样本索引仅与相应的对象索引一起是明确的。
准备
样本标识符的内部数据结构适应识别过程中可能出现的一组典型对象样本的特征。
准备对象
使用add_sample_identifier_preparation_data添加到示例标识符的对象。

准备样本
准备对象的对象样本。准备通常是基于每个对象的多个准备样本来完成的。
准备数据
收集所有准备样本。
训练
样本标识符的训练。在这一步中,样本识别器学习区分所有给定的对象。

训练对象

使用add_sample_identifier_training_data添加到样本标识符的对象,或者是将准备数据重用为训练数据的结果。与准备对象相反,所有训练对象都标有唯一的对象索引。
训练样本
训练对象的对象样本。训练通常是基于每个对象的多个训练样本完成的。
训练数据
所有训练样本的集合。
查询图像
一种图像,其中一个物体是可见的,应该用基于样本的识别来识别。

14.3.4 操作符列表

add_sample_identifier_preparation_data

将制备数据添加到现有的样品标识符中。
add_sample_identifier_training_data
将训练数据添加到现有样本标识符中。
apply_sample_identifier
使用示例标识符标识对象。
clear_sample_identifier
释放样本标识符的内存。
create_sample_identifier
创建一个新的示例标识符。

deserialize_sample_identifier
反序列化序列化的样本标识符。
get_sample_identifier_object_info
检索关于样本标识符的对象的信息。
get_sample_identifier_param
获取示例标识符的选定参数。
prepare_sample_identifier
使样本标识符的内部数据结构适应要标识的对象。
read_sample_identifier
从文件中读取一个示例标识符。

remove_sample_identifier_preparation_data
从样本标识符中删除准备数据。
remove_sample_identifier_training_data
从样本标识符中删除训练数据。
serialize_sample_identifier
序列化一个示例标识符。
set_sample_identifier_object_info
为样本标识符的对象定义名称或描述。

set_sample_identifier_param
设置样本标识的选定参数。
train_sample_identifier
训练一个样本标识符。
write_sample_identifier
将示例标识符写入文件。

转载自:https://blog.csdn.net/qq_45813590/article/details/132668932
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值