二维条形码(2-Dimensional Bar Code )在水平和竖直方向的二维空间存储信息,其特点是信息容量大、安全性强、保密性高(可加密)、识别率高、编码范围广等。除此之外,二维条形码还可将汉字、图像等信息进行优化编码处理具有全方位识别,并可引入加密机制的功能。因此,二维条形码在证件识读、运输包装、嵌入式识别、电子数据交换等方面得到了广泛的应用。
二维条形码可分为堆叠式/行排式二维条形码和矩阵式二维码。堆叠式/行排式二维条形码在形态上是由多行一维条形码堆叠而成的;矩阵式二维条形码以矩阵的形式编码,在矩阵相应的元素位置上用"点"表示二进制"1",用"空"表示二进制"0"。
二维条形码技术的研究始于20世纪80年代末,目前已研制出多种码制,得到广泛应用的二维条形码有 QR 码、PDF417码、 DM 码和 CM 码。
QR 码是由日本 Denso 公司于1994年9月研制的一种矩阵式二维条形码符号,其全称为 Quickly Response ,含义为快速响应。 QR 码除具有一维条形码及其他二维条形码特点外,还可高效地表示汉字,在表示相同内容的情况下,其尺寸小于相密度的 PD F417条形码。 QR 码是目前日本主流的手机二维条形码技术标准,目前市场上的大部分条形码打印机都支持该条形码。
二维条形码技术的相关算子如下:
1):create _ data _ code _2d_ model (:: SymbolType , GenParamName ,GenParamValue : DataCodeHandle )
功能:创建二维条形码模型。
SymbolType :二维条形码类型。
GenParamName :二维条形码模型可调整的通用参数名称 GenParamValue :二维条形码模型可调整的通用参数值。
DataCodeHandle :使用和访问二维条形码模型的句柄。
在 DataCodeHandle 中,操作符返二维条形码模型的句柄,该句柄用于条形码的所有进一步操作,如修改模型、读取符号或访问符号搜索的结果。
2)set _ data _ code _2d_ param (:: DataCodeHandle , GenParamName , GenParamValue ;)
功能:设置二维条形码模型的选定参数。
DataCodeHandle :二维条形码模型的句柄。
GenParamName :二维条形码可调整的通用参数名称。
GenParamValue :二维条形码可调整的通用参数值。
使用 create _ data _ code _2d_ model 算子创建二维条形码模型时,也可以设置所有参数。可以使用 get _ data code _2d_ param 算子查询条形码模型的当前配置,再利用 query _ data _ code _2d_ params 算子返回一个列表,其中包含可为给定二维条形码类型设置的所有参数名称。
3): find _ data _ code _2d( Image : SymbolXLDs : DataCodeHandle , GenParamNames , GenParamValues : ResultHandles , DecodedDataStrings )
功能:检测并且读取二维条形码标志结果。
Image :输入图像,如果图像区域缩小为一个局部区域,则搜索时间减少,但同时也可制能出现由于条形码不完整而导致不能找到二维条形码的情况。
SymbolXLDs :被成功解码的二维条形码周边 XLD 轮廓。
DataCodeHandle :二维条形码模型句柄。
GenParamNames :可设置的参数名称。
GenParamValues :设置的参数对应的参数值。
ResultHandles :所有成功解码的二维条形码的句柄。
DecodedDataStrings :在图像中搜索到的二维条形码的解码字符结果。
在调用 find _ data _ code _2d算子之前,需使用 create _ data _ code _2d_ model 算子或 read _ data _ code _2d_ model 算子创建与图像中的二维条形码类型匹配的模型。如果要在图像中搜称索多个二维条形码标志,则可以选择参数" stop _ after _ result _ num "和请求的二维条形码标志数一起赋值给参数 GenParamNames 。
find _ data _ code _2d算子被执行后会自动返回识别出的二维条形码 XLD 轮廓和得到的解码结果句柄,解码结果句柄具体包括二维码的附加信息、搜索的方式以及解码结果。调用算子 get _ data _ code _2d_ results 并将其对应的参数 ResultHandles 中的模型句柄与参数" decoded _ data "一起设置,则会返回带有字符串字符的 ASCII 代码的元组。
4): clear _ data _ code 2d_ model (:: DataCodeHandle :)
功能:删除二维条形码模型并释放分配的内存。
DataCodeHandle :二维条形码模
set_data_code_2d_param详解
set_data_code_2d_param ( : : DataCodeHandle, GenParamName, GenParamValue : )
DataCodeHandle 数据代码句柄
GenParamName (生成参数名称
默认值: 'polarity'值列表: 'abort', 'additional_levels', 'contrast_min'、'contrast_tolerance', 'decoding_scheme'、 'default_parameters'、'discard_undecoded_candidates', 'finder_pattern_tolerance', 'format'、'mirrored'、'model_type'、'module_aspect', 'module_aspect_max', 'module_aspect_min'、'module_gap'、'module_gap_col', 'module_gap_col_max'、 'module_gap_col_min', 'module_gap_max'、'module_gap_min', 'module_gap_row', 'module_gap_row_max', 'module_gap_row_min', 'module_grid'、'module_size'、'module_size_max', 'module_size_min', 'module_width'、'module_width_max'、'module_width_min'、 '持久性'、'极性', 'position_pattern_min'、'quality_isoiec15415_aperture_size'、 'slant_max'、'small_modules_robustness'、'strict_model'、'strict_quiet_zone'、'symbol_cols'、'symbol_cols_max', 'symbol_cols_min', 'symbol_rows', 'symbol_rows_max'、'symbol_rows_min', 'symbol_shape', 'symbol_size'、'symbol_size_max', 'symbol_size_min'、 'timeout'、 'version', 'version_max'、'version_min'
GenParamValue 泛型参数的值 针对 2D 数据代码进行了调整。
所有数据代码类型:
(1)“default_parameters”:将所有模型参数重置为三个基本参数之一 默认设置 Standard、Enhanced 或 Maximum(请参阅以下摘要和create_data_code_2d_model).除了 parameter 值,则模型的训练状态将重置。值: “standard_recognition”,“enhanced_recognition”,“maximum_recognition”.如果 此参数与其他 参数,则该参数必须位于第一个位置。
ECC 200
(2)“symbol_cols_min”:元件中模块列的最小数量。取值范围:[10, 12, 14, ..144 ]
(3)“symbol_cols_max”:元件中模块列的最大数量。取值范围:[10, 12, 14, ..144 ]
(4):“symbol_rows_min”:元件中模块行的最小数量。
(5):“symbol_rows_max”:元件中模块的最大行数。
(6)“symbol_cols”:设置“symbol_cols_min”和“symbol_cols_max”设置为给定值。取值范围:[10, 12, 14, ..144 元]
(7)“symbol_rows”:设置“symbol_rows_min”和“symbol_rows_max”设置为给定值。取值范围:[8, 10, 12, ..144 元]
(8)“symbol_shape”:模块形状的可能限制 ('矩形'和/或'正方形').
symbol_shape | '任何' | '矩形' | '正方形' |
“symbol_cols_min” | >= 10 | >= 18 | >= 10 |
“symbol_cols_max” | <= 144 | <= 48 | <= 144 |
“symbol_rows_min” | >= 8 | >= 8 | >= 10 |
“symbol_rows_max” | <= 144 | <= 16 | <= 144 |
(9)“symbol_size_min”:设置“symbol_cols_min”和“symbol_rows_min”设置为给定值,并将“symbol_shape”自'正方形'.
(10)“symbol_size_max”:设置“symbol_cols_max”和“symbol_rows_max”设置为给定值,并将“symbol_shape”自'正方形'.
(11)“symbol_size”:设置“symbol_cols_min”,“symbol_cols_max”,“symbol_rows_min”和“symbol_rows_max”自 给定的值和“symbol_shape”自'正方形'.
QR-Code
(12)“model_type”:QR 码模型的类型。 旧的二维码模型'1'和更新的 Model'2'受支持。使用规格'任何'或'0'两种模型都被执行。
(13)“version_min”:最低元件版本。 元件版本直接链接到元件大小。 版本 1 的符号大小为 21x21 模数, 版本 2 = 25x25 个模块,依此类推,直到版本 40 = 177x177 模数。 Model 1 符号的最大尺寸为 73x73 = 版本 14。取值范围:[1 ..[40] (模型 1:[1 ..14])
(14)“version_max”:最大元件版本。取值范围:[1 ..[40] (模型 1:[1 ..14])
(15)'version':设置“version_min”和“version_max”设置为相同的值。
(16)“symbol_size_min”:模块中元件的最小大小。 此参数可用作“version_min”.取值范围:[21 ..177] (模型 1:[21 ..73])默认值:21
(17)“symbol_size_max”:模块中元件的最大大小。 此参数可用作“version_max”:取值范围:[21 ..177] (模型 1:[21 ..73])默认值:177
(18)“symbol_size”:设置“symbol_size_min”和“symbol_size_max”设置为相同的值。
Micro QR Code:
(19)“version_min”:最低元件版本。 元件版本直接链接到元件大小。 符号介于 11x11(版本 M1)和 17x17(M4 版)模块大小。取值范围:[1 ..4]默认值:1
(20)“version_max”:最大元件版本。取值范围:[1 ..4]默认值:4
(21)'version':设置“version_min”和“version_max”设置为相同的值。
(22)“symbol_size_min”:模块中元件的最小大小。 此参数可用作“version_min”.取值范围:[11 ..17]默认值:11
(23)“symbol_size_max”:模块中元件的最大大小。 此参数可用作“version_max”:取值范围:[11 ..17]默认值:17
(24)“symbol_size”:设置“symbol_size_min”和“symbol_size_max”设置为相同的值。
*PDF417:
(25)“symbol_cols_min”:码字中 symbol 中数据列的最小数量, 即,不包括 Start/Stop 的码字 形态和两个行指标。取值范围:[1 ..30]默认值:1
(26)“symbol_cols_max”:码字中 symbol 中的最大数据列数, 即,不包括 start/stop 的两个码字 模式和两个指标的 ID 和。取值范围:[1 ..30]默认值:20(增强:30)
(27)“symbol_rows_min”:元件中模块行的最小数量。取值范围:[3 ..90]默认值:5(增强:3)
(28)“symbol_rows_max”:元件中模块的最大行数。取值范围:[3 ..90]默认值:45(增强:90)
(29)“symbol_cols”:设置“symbol_cols_min”和“symbol_cols_max”设置为相同的值。
(30)“symbol_rows”:设置“symbol_rows_min”和“symbol_rows_max”设置为相同的值。
Aztec
(31)'format':Aztec 代码的格式:以空格分隔的列表,带有 值“紧凑”,“full_range”或'符文'.
(32)“symbol_size_min”:模块中元件的最小大小。取值范围:[11 ..151 元]默认值:11
(33)“symbol_size_max”:模块中元件的最大大小。取值范围:[11 ..151 元]默认值:151
(34)“symbol_size”:设置“symbol_size_min”和“symbol_size_max”设置为相同的值。
图中模块的外观:所有数据代码类型:
(35)'polarity':描述图像中符号的极性,即 该参数确定元件在 深色背景或浅色背景上的深色。值: “dark_on_light”,“light_on_dark”,'任何'.
(36)'mirrored':描述元件是否是镜像的或可以镜像的 (即 相当于交换元件的行和列)。值: '否',“是的”,'任何'
(37)'contrast_min':的前景和背景之间的最小对比度 符号(此度量对应于最小值 元件的前景和背景之间的渐变)。值:>=1默认值:30(增强:10)
(38)'small_modules_robustness':
(39)数据代码解码的稳健性非常小 模块大小。设置参数“small_modules_robustness”自'高'增加能够 解码模块大小非常小的数据代码。此外 在这种情况下,还应调整最小模块尺寸 因此,因此“module_size_min”和“module_width_min”(PDF417) 应设置为 分别是预期的最小模块大小和宽度。设置“small_modules_robustness”自'高'能 显著提高find_data_code_2d.因此,在默认情况下“small_modules_robustness”应设置为'低'. 如果“small_modules_robustness”设置为'高'接受的最大图像大小被一分为二(参见get_system “halcon_xl”).值: '低','高'违约: '低'(增强:'低', 最大:'高')
Datamatrix ECC 200, QR-Code, Micro QR Code, and Aztec Code:
(40)'module_size_min':图像中模块的最小大小(以像素为单位)。请 请注意,为了获得最佳读取性能,模块大小为 建议至少 3-4 像素。值: [1 ..100]默认值:6(增强:2、 最大值:1)
(41)'module_size_max':图像中模块的最大大小(以像素为单位)。值: [2 ..100]默认值:20(增强:100)
(42)'module_size':设置“module_size_min”和“module_size_max”设置为相同的值。
模块之间的间隙可以通过'module_gap*'参数,如下段落所述:可以指定相邻的 foreground 是否 模块是否已连接,或者 他们。 如果前台模块已连接并填充模块 space 时,可以将 gap 参数设置为'否'. 该参数设置为“小”如果有一个非常 两个模块之间的间隙小,即<模块尺寸的 10%。 它可以设置为“大”如果差距更大 (相对于模块大小:< 50%)。 如果 foreground 模块 - 尽管已连接 - 看起来更薄 它们被授权的空间(例如,由于 明亮的光源)。 如果前景模块仅显示为非常小的点, 通常, 对图像进行适当的预处理以进行检测或 扩展模块是必要的(例如,通过gray_erosion_shape或gray_dilation_shape).
(43)“module_gap_col_min”:元件列方向的最小间隙。值: '否',“小”,“大”
(44)“module_gap_col_max”:元件列方向的最大间隙。值: '否',“小”,“大”违约: “小”(增强:“大”)
(45)“module_gap_row_min”:元件行方向的最小间隙。值: '否',“小”,“大”
(46)“module_gap_row_max”:元件行方向的最大间隙。值: '否',“小”,“大”违约: “小”(增强:“大”)
(47)“module_gap_col”:设置“module_gap_col_min”和“module_gap_col_max”设置为相同的值。
(48)“module_gap_row”:设置“module_gap_row_min”和“module_gap_row_max”设置为相同的值。
(49)“module_gap_min”:设置“module_gap_col_min”和“module_gap_row_min”设置为相同的值
(50)“module_gap_max”:设置“module_gap_col_max”和“module_gap_row_max”设置为相同的值。
(51)“module_gap”:设置“module_gap_col_min”,“module_gap_col_max”,“module_gap_row_min”和“module_gap_row_max”设置为相同的值。
PDF417:
(52)“module_width_min”:图像中的最小模块宽度(以像素为单位)。值: [1 ..100]默认值:3(增强:2、 最大值:1)
(53)“module_width_max”:图像中的最大模块宽度(以像素为单位)。值: [2 ..100]默认值:15(增强:100)
(54)“module_width”:设置“module_width_min”和“module_width_max”设置为相同的值。
(55)“module_aspect_min”:最小模块纵横比(模块高度与模块宽度)。值:[0.5 ..20,0]默认值:1.0
(56)“module_aspect_max”:最大模块纵横比(模块高度与模块宽度)。值:[0.5 ..20,0]默认值:4.0(增强:10.0)
(57)“module_aspect”:设置“module_aspect_min”和“module_aspect_max”设置为相同的值。
ECC 200:
(58)“slant_max”:L 形取景器图案角度的最大偏差 从(理想)直角(角度指定 以弧度为单位,对应于发生的失真 打印元件时或在图像期间 收购)。取值范围:[0.0 ..0.5235]默认值:0.1745 = (增强:0.5235 = )
(59)“finder_pattern_tolerance”:搜索对缺陷的容忍度,或 部分遮挡的 Finder 模式。取景器模式 包括 L 形侧面以及相反的 交替侧。根据这个参数,不同的 在find_data_code_2d.在一种情况下 ('低'), 假设 finder 模式呈现为高 度,几乎没有干扰。在另一种情况下 ('高'),则取景器图案可能是缺陷或 部分遮挡而不影响识别,并且 符号的读取。 但是请注意, 在此模式下,用于品种搜索的参数 应通过使用set_data_code_2d_param因为否则, run-time 为find_data_code_2d可能显著 增加。 另请注意,这两种算法略有不同 在稳健性方面彼此相差。这可能会导致 根据 的值,结果会有所不同“finder_pattern_tolerance”即使 Finder symbol 的 pattern 不受干扰。例如,如果'高',则仅选中 module grid 的 对透视扭曲的稳健性是 减少。最后,如果“finder_pattern_tolerance”设置为'任何'两种算法都适用。值: '低','高','任何'违约: '低'(增强:'低'最大:'任何')
(60)“contrast_tolerance”:描述搜索相对于本地的容差 造影剂变化(例如,存在眩光或 reflections)。取决于参数的值 应用了两种不同的算法。如果“contrast_tolerance”设置为'高'这 在存在强烈局部对比的情况下稳定性 变体得到改进。在以下情况下“contrast_tolerance”设置为'低'这 算法在较强局部对比度的情况下稳定性较差 变体,但它更快并且仍然能够处理 正常情况下的造影剂变化 因此在大多数情况下应使用。如果“contrast_tolerance”设置为'任何'双 算法。值: '低','高','任何'违约: '低'(增强:'低', 最大:'任何')
(61)“module_grid”:描述模块的大小是否可以变化(在 specific range)或不执行。取决于此参数 使用不同的算法来计算模块的 center positions (居中位置)。如果设置为'固定'一 使用等距网格。允许可变模块大小 ('变量'),则网格仅与 取景器图案的交替侧。跟'任何'这两种方法都在 其他。请注意,的“module_grid”如果“finder_pattern_tolerance”设置为'高'.在这种情况下,等距网格为 假设。值: '固定','变量','任何'违约: '固定'(增强:'任何')
QR Code
(62)“position_pattern_min”:必须可见的位置检测图案数量 生成新的候选品种。取值范围:[2, 3]默认值:3(增强:2)
Aztec Code:
(63)“finder_pattern_tolerance”:搜索对缺陷或部分缺陷的容忍度 occluded finder 模式。根据此参数,不同的 在find_data_code_2d.在一种情况下 ('低'),它是 假设可以提取 Finder 图案的所有环。在 另一种情况 ('高'),则假定至少有一个 可以提取 Finder 图案的环。 因此,读取器的运行时间会增加,如果此 parameter 设置为'高'.值: '低','高'违约: '低'(增强:'高')
(64)“additional_levels”:为了提高 Aztec Code 阅读器的稳健性,许多 其他搜索级别(除了派生的搜索级别 最小和最大模块尺寸)可以通过 this 参数。请注意,这会增加 Reader 的 Reader,尤其是在未找到代码的情况下。取值范围:[0 ..阿拉伯数字]默认值:0
所有数据代码类型:
(65)'persistence':控制元件的某些中间结果是否 搜索方式find_data_code_2d被存储 临时或持久地在模型中。 的内存要求find_data_code_2d是 如果数据是临时存储的,则明显更小 (默认)。 另一方面,通过使用持久存储,它是 出于调试原因可以访问某些数据 在搜索符号之后,例如,调查为什么 无法读取 symbol。 的内存要求find_data_code_2d可以进一步 通过设置“持久性”设置为 -1 这样的 只有检索解码数据所需的数据是 与模型一起存储。请注意,印刷质量检查 不能与此设置“持久性”.值:-1 (仅解码数据) 、0 (临时) 、1 (持久)默认值:0
(66)'discard_undecoded_candidates':控制无法成功解码的候选项 存储在模型中。 将此参数设置为“是的”减少 模型消耗的内存。请注意,在这种情况下 无法查询有关未解码候选项的信息 用get_data_code_2d_objects或get_data_code_2d_results.值: “是的”,'否'违约: '否'
(67)'strict_model':控制find_data_code_2d而 检测可读取但不适合的符号 模型对元件的大小有限制。 它们可以被拒绝(严格模型,设置为“是的”) 或 返回的结果与它们的大小无关,并且 Size (LAX 模型,设置为'否').值: “是的”(严格)、'否'(不严格)违约: “是的”
(68)'timeout':通过使用此参数,可以中止find_data_code_2d在定义的时间段之后 毫秒。这在 必须确保最长的循环时间。之前获得的所有结果 超时可通过以下方式访问get_data_code_2d_results.传递值 less 或 等于 0 表示停用超时(默认)。时间精度约为 10 毫秒。它 取决于几个因素,包括计算机的速度, 图像大小和“timer_mode”设置方式set_system.find_data_code_2d如果 发生超时。检查find_data_code_2d已经 interrupted,请检查参数'aborted' (中止)在get_data_code_2d_results.请注意,如果find_data_code_2d在训练模式下运行。典型值: 'false', -1, 20 ..100.违约: 'false'
(69)'abort':使用此选项,可以中止find_data_code_2d来自另一个线程。什么时候set_data_code_2d_param称为 跟'abort'、find_data_code_2d跟 模型DataCodeHandle 数据代码句柄在另一个线程中运行是 请求中止。如果没有find_data_code_2d运行 使用此模型,不会发生任何事情。操作员find_data_code_2d可能不会立即返回。 它必须达到一个取消点,以确保正确清理。 根据不同的因素,例如计算机性能,此 最多可能需要 10 毫秒。此时之前,仍会返回所有解码结果。请注意, 如果满足以下条件,则忽略该参数find_data_code_2d运行 训练模式。注意:这是唯一具有数据代码句柄的操作,可以是 从不同的线程使用,无需额外的 同步。违约: '正确'(该值不被处理。
(70)“quality_isoiec15415_aperture_size”:参考图像,其质量分级符号 Contrast, Modulation, Reflectance Margin, 和 Fixed Pattern Damage 进行评估,是通过应用合成孔径获得的 (圆形均值滤镜)。此参数 将过滤器大小确定为模块大小的一部分。根据 对于标准,此值应选择在 0.5 到 0.8 之间 取决于应用程序。有关选择光圈的更多指导,请参阅 ISO/IEC 15415:2011 附录 D.2。取值范围:[0 ..1]默认值:0.8
除 Aztec 代码外的所有数据代码类型:
(71)“strict_quiet_zone”:控制find_data_code_2d而 检测可读取但显示缺陷的符号 他们的安静区。如果“strict_quiet_zone”设置为“是的”验证所有解码符号的静区 类似于用于印刷质量检查的方法。 不会返回静区成绩较差的符号 结果。他们'状态'设置为“缺少安静区”. 如果“strict_quiet_zone”设置为'否'(这是默认情况),所有可读符号都是 返回。值: “是的”,'否'违约: '否'
数据矩阵 ECC 200:
(72)“decoding_scheme”:控制 Data Matrix ECC 200 的解码步骤。设置此项时 自'原始',这允许读取出现 和纠错步骤符合 ISO/IEC 16022:2006,但其中 编码是自定义的。解码后的数据是已校正的数据, 使用“decoded_data”参数get_data_code_2d_results并且必须由 用户。
案例:
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
read_image (Image, 'E:/Halcon数据/测量程序/条形码识别/图片/104911.png')
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
area_center_xld (SymbolXLDs, Area, Row, Column, PointOrder)
dev_get_window (WindowHandle)
query_font (WindowHandle, Font)
FontWithSize := Font[0]+'-30'
set_font (WindowHandle, FontWithSize)
set_tposition (WindowHandle, Row+180, Column-100)
write_string (WindowHandle, DecodedDataStrings)
总结:Halcon二维码识别流程分为两步,1,创建模型,2,识别二维码
注意点:复杂环境下图像最好是做一下图像预处理,或者通过set_data_code_2d_param进行参数配置,以提高稳定性,准确性及检测时间等。
标签:条形码,min,max,symbol,module,Halcon,二维码,识别,data From: https://blog.csdn.net/2202_75557553/article/details/143499278