halcon二维码识别简单案例

目录

二维码种类

​编辑 halcon 二维码识别调用算子步骤

     1.创建模型——create_data_code_2d_model( SymbolType, GenParamName, GenParamValue ,DataCodeHandle)

     2.设置参数 ——set_data_code_2d_param( DataCodeHandle, GenParamName, GenParamValue  )

     3.查找二维码——find_data_code_2d (Image, SymbolXLDs, DataCodeHandle,  'train', 'all', ResultHandles, DecodedDataStrings)

    4.清除模板——clear_data_code_2d_model (DataCodeHandle)

实例1:找一个二维码,测试其识别的结果是否正确。

效果图1

实例2

效果图2


二维码种类

常见类型:QR Code二维码、 Data Matrix二维码。

其他:Aztec Code二维码、Maxi Code二维码、Vericode二维码、PDF417二维码、Ultracode二维码、Code 49二维码、Code 16K二维码。

 halcon 二维码识别调用算子步骤

     1.创建模型——create_data_code_2d_model( SymbolTypeGenParamNameGenParamValue ,DataCodeHandle)

      参数1

   SymbolType(输入控制)  字符串(字符串)二维数据代码的类型。

默认值: “数据矩阵 ECC 200”

值列表:“Aztec Code”、“Data Matrix ECC 200”、“GS1 Aztec Code”、“GS1 DataMatrix”、“GS1 QR Code”、“Micro QR Code”、“PDF417”、“QR Code”

参数2

   GenParamName(输入控制)  属性名(-array)(字符串)可以为 2D 数据代码模型调整的通用参数的名称。

默认值: []

值列表:“additional_levels”、“candidate_selection”、“contrast_min”、“contrast_tolerance”、“default_parameters”、“finder_pattern_tolerance”、“mirrored”、“model_type”、“module_aspect”、“module_aspect_max”、“module_aspect_min”、“module_gap ” ' , 'module_gap_max' , 'module_gap_min' , 'module_grid' , 'module_size' , 'module_size_max', 'module_size_min' , 'module_width', 'module_width_max' , 'module_width_min' , 'persistence' , 'polarity' , 'position_pattern_min' , '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' ,'超时','版本','version_max','version_min'

参数3

   GenParamValue(输入控制)  属性值(-array)(字符串/整数/实数)可以为 2D 数据代码模型调整的通用参数的值。

默认值: []

建议值:“standard_recognition”、“enhanced_recognition”、“maximum_recognition”、“yes”、“no”、“any”、“dark_on_light”、“light_on_dark”、“square”、“rectangle”、“small”、“big” , 'fixed' , 'variable' , 'low' , 'high' , 'default' , 'extensive', 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 30, 50, 70, 90, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144

参数4

   DataCodeHandle(输出控制)  datacode_2d (句柄)用于使用和访问二维数据代码模型的句柄。

     2.设置参数 ——set_data_code_2d_param( DataCodeHandleGenParamNameGenParamValue  )

        参数1

   DataCodeHandle(input_control,状态被修改)  datacode_2d (句柄)二维数据代码模型的句柄。

参数2

   GenParamName(输入控制)  属性名(-array)(字符串)应为 2D 数据代码调整的通用参数的名称。

默认值: '极性'

值列表:'abort'、'additional_levels'、'candidate_selection'、'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_max' , 'module_gap_min' , 'module_grid', 'module_size' , 'module_size_max' , 'module_size_min' , 'module_width' , 'module_width_max' , 'module_width_min' , 'persistence' , 'polarity' , 'position_pattern_min' , 'quality_isoiec15415_aperture_size' , 'slant_max' , ' small_modules_robustness ' strict_model','strict_quiet_zone','string_encoding','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' , 'trained' , 'version' , 'version_max' , 'version_min'

参数3

   GenParamValue(输入控制)  属性值(-array)(字符串/整数/实数)为 2D 数据代码调整的通用参数的值。

默认值: 'light_on_dark'

建议值:“standard_recognition”、“enhanced_recognition”、“maximum_recognition”、“yes”、“no”、“any”、“dark_on_light”、“light_on_dark”、“square”、“rectangle”、“small”、“big” , 'fixed' , 'variable' , 'low' , 'high' , 'default' , 'extensive' , 'utf8' ,“语言环境”,“原始”, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 30, 50, 70, 90, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144

     3.查找二维码——find_data_code_2d (Image, SymbolXLDs, DataCodeHandle,  'train', 'all', ResultHandles, DecodedDataStrings)

       参数1

   Image(输入对象)  单通道图像 对象(字节)

输入图像。如果图像具有缩减域,则数据代码搜索将缩减到该域。这通常会减少操作员的运行时间。但是,如果数据代码未完全位于域内,则可能无法正确找到数据代码。在极少数情况下,可能会在域之外找到数据代码。如果这些结果是不希望的,则必须随后将其消除。

参数2

   SymbolXLDs(输出对象)  xld_cont(-array) 对象
围绕成功解码的数据代码符号的 XLD 轮廓。轮廓点的顺序反映了检测符号的方向。轮廓从左上角开始(参见 '方向' )并顺时针继续。 get_data_code_2d_results

       点的顺序SymbolXLDs

     参数3

  DataCodeHandle(input_control,状态被修改)  datacode_2d (句柄)二维数据代码模型的句柄。
    参数4
  GenParamName(输入控制)  属性名(-array)(字符串)用于控制操作员行为的(可选)参数的名称。

默认值: []

值列表:'specific_parallelization'、'stop_after_result_num'、'symbol_search'、'train'

    参数5

GenParamValue(输入控制)  属性值(-array)(整数/实数/字符串)可选泛型参数的值。

默认值: []

建议值:“all”、“model_type”、“symbol_size”、“version”、“module_size”、“small_modules_robustness”、“module_shape”、“polarity”、“mirrored”、“contrast”、“candidate_selection”、“module_grid” , 'finder_pattern_tolerance' , 'contrast_tolerance' , 'additional_levels' , 'image_proc ' , '基本的' , '默认' , 1, 2, 3, '启用' , '禁用'

    参数6
   ResultHandles(输出控制)  整数(-数组)(整数)所有成功解码的二维数据代码符号的句柄。
    参数7
 DecodedDataStrings(输出控制)  字符串(-数组)(字符串)图像中所有检测到的二维数据码符号的解码数据串。

    4.清除模板——clear_data_code_2d_model (DataCodeHandle)

   参数

DataCodeHandle(input_control,状态被修改)  datacode_2d (句柄)二维数据代码模型的句柄。

实例1:找一个二维码,测试其识别的结果是否正确。

实例代码如下:

dev_close_window ()
dev_open_window (0, 0, 300, 281, 'black', WindowHandle)
read_image (Image, 'E:/桌面/ccc/pingduoduo.jpg')
create_data_code_2d_model ('QR Code', [], [], DataCodeHandle)
*set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')
find_data_code_2d (Image, SymbolXLDs, DataCodeHandle,  'train', 'all', ResultHandles, DecodedDataStrings)
disp_message (WindowHandle, '识别结果:'+DecodedDataStrings, 'window', 12, 12, 'black', 'true')
clear_data_code_2d_model (DataCodeHandle)

实例2

read_image (Image, 'E:/桌面/ccc/hesuan.jpg')
lib_find_barcode (Image, Time, Code_Type, CodeResult)
**————————————lib_find_barcode(Image, Time, Code_Type, CodeResult)函数 ———————————————
*计数器
_index:=0
*读码超时时间
_timeOut:=1000
*读码类型
_codeType:=[]
*读码结果
_codeData:=[]
*已解码的区域
gen_empty_obj (_EmptyObject)
*二维码类型
_codeMode:=['Aztec Code', 'Data Matrix ECC 200', 'GS1 Aztec Code', 'GS1 DataMatrix', 'GS1 QR Code', 'Micro QR Code', 'PDF417', 'QR Code']
get_image_size (Image, Width, Height)
dev_open_window (0, 0,  Width, Height, 'black', WindowHandle)
dev_display (Image)
count_seconds (T1)
for i := 0 to |_codeMode|-1 by 1
    create_data_code_2d_model (_codeMode[i],[], [],DataCodeHandle)
    *设置超时时间
    set_data_code_2d_param (DataCodeHandle, 'timeout', _timeOut)
    *防止误识别设置,因为某些二维码模型没有这个属性,会报错所以try以下
    try
        set_data_code_2d_param (DataCodeHandle, 'strict_quiet_zone', 'yes')
    catch (Exception)
        continue
    endtry
     *开始识别 
    find_data_code_2d (Image,SymbolXLDs,DataCodeHandle, 'stop_after_result_num',1000,ResultHandles, DecodedDataStrings)
    dev_display (SymbolXLDs)
    count_obj (SymbolXLDs, Number)
    if (Number)
        *存读码类型
        for j := 1 to Number by 1
            *存解码类型
            _codeType[_index]:=_codeMode[i]
            *存解码数据
            _codeData[_index]:=DecodedDataStrings[j-1]
            _index:=_index+1
            select_obj (SymbolXLDs, ObjectSelected, j)
            *存二维码区域
            concat_obj (_EmptyObject, ObjectSelected, _EmptyObject)
        endfor
    endif
    *清除识别缓存
    clear_data_code_2d_model(DataCodeHandle) 
endfor
count_seconds (T2)
Time:=T2-T1
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
* write_string (WindowHandle, '总耗时:'+Time)
disp_message (WindowHandle, ['总耗时:'+Time,'二维码类型:'+_codeType,'识别结果:'+DecodedDataStrings], 'window', 12, 12, 'black', 'false')
CodeResult:=DecodedDataStrings
Code_Type:=_codeType
return ()

  总结:本篇文字简单介绍了二维码类型,用halcon识别二维码的步骤及相关实例代码,代码后期还可以优化,这个是最简单版本。

关键点:要看二维码类型,不然无法读取二维码。

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: set_data_code_2d_param 'symbol_size' 是一种用于设置二维码中的符号大小的数据代码参数。二维码是一种能够储存大量信息的矩阵形式二维条码,由一系列黑白方块组成。而符号大小指的是二维码中每个方块的尺寸。 通过使用set_data_code_2d_param 'symbol_size',我们可以根据需要来调整二维码的符号大小。符号大小的设置会影响二维码的可读性和扫描的精确度。较小的符号大小可能会使二维码变得模糊,难以被扫描识别,而较大的符号大小可能会导致二维码过大,无法适应扫码设备的屏幕。 因此,在设置符号大小时,我们需要根据实际应用场景和扫描设备的限制来进行调整。对于需要在小尺寸屏幕上显示的二维码,我们可以选择较小的符号大小,以确保信息的清晰可见性。而在需要扫描大尺寸二维码的情况下,我们可以选择较大的符号大小,以提高扫描的准确性和速度。 总的来说,set_data_code_2d_param 'symbol_size' 提供了一个方便的参数来调整二维码的符号大小,以便满足不同应用场景和扫描设备的需求。我们可以根据具体情况来选择适当的符号大小,以确保二维码的可读性和扫描的准确性。 ### 回答2: set_data_code_2d_param 'symbol_size' 是一个用于设置二维码的参数指令。symbol_size 代表二维码中每个方块的大小。 在使用 set_data_code_2d_param 'symbol_size' 指令时,我们可以传入不同的数值来调整 symbol_size 的大小。symbol_size 的大小决定了二维码的密度和可读性。一般来说,symbol_size 越大,二维码中的方块也会变得越大,从而使二维码更容易被扫描和读取。 需要注意的是,调节 symbol_size 的大小时需要考虑到实际使用场景和需求。如果需要在较小的区域内放置二维码,可以选择较小的 symbol_size 以便更多的信息能够被存储在较小的面积内。然而,如果要确保二维码的可读性和扫描稳定性,较大的 symbol_size 可能更适合。 总之,通过 set_data_code_2d_param 'symbol_size' 指令,我们可以调整二维码的 symbol_size,以满足不同的需求和使用场景。 ### 回答3: `set_data_code_2d_param 'symbol_size`是一个函数或命令,用于设置二维码的符号大小。二维码是一种能够存储大量信息的矩阵条形码,由方块和空白区域组成。设置符号大小可以调整二维码的整体尺寸,使其适应不同的应用场景和需求。 通过`set_data_code_2d_param 'symbol_size`函数,我们可以传入参数来指定符号的大小。这个参数可以是一个数值,也可以是一个描述符号大小的字符串。具体参数格式可能因具体的编程语言或软件而有所不同,但通常可以设置为像素值或其他相对的表示单位。 调整二维码的符号大小可以影响二维码的容量和可读性。较大的符号大小可以容纳更多的信息,但同时也会增加二维码的尺寸,可能需要更大的扫描区域来识别。较小的符号大小则可能限制二维码可以容纳的信息量,但对于空间有限或尺寸要求较小的场景可能更适用。 根据具体的应用需求,我们可以根据需要调整符号大小,并通过`set_data_code_2d_param 'symbol_size`函数进行设置。调试阶段中,我们可以尝试不同的符号大小来找到适合应用的最佳尺寸。 总之,`set_data_code_2d_param 'symbol_size`函数是一个用于设置二维码符号大小的命令,通过调整符号大小可以调整二维码的尺寸和可读性,以适应不同的应用场景和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

susan花雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值