51Halcon机器视觉

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 2819|回复: 3

[资料] Halcon中二维码解析函数解码率和时长的优化方法

[复制链接]
  • TA的每日心情
    点赞
    2 小时前
  • 签到天数: 951 天

    连续签到: 11 天

    [LV.10]以坛为家III

    378

    主题

    1547

    帖子

    7258

    积分

    Rank: 9

    积分
    7258

    突出贡献优秀版主荣誉管理论坛元老切换助手验证会员最佳新人

    发表于 2017-3-3 10:03:56 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    Halcon中条码解析函数包容多种条码类型且简单强大。现有的‘Data Matrix ECC 200’、‘QR Code’和‘PDF417’等广泛使用的条码均能解析。简单是通过默认参数即可对多种条码进行解析;强大是指通过设定条码的参数能够获得更高的解码率以及大幅度的降低解码时间。
    1. 解码入门——默认参数的使用
           Halcon中的解码共分为3步:一是创建解码模型;二是对图片进行解码;最后是清除模型。
    1. 1创建解码模型
           创建解码模型的函数如下:
    create_data_code_2d_model (: : SymbolType, GenParamNames, GenParamValues : DataCodeHandle)
           其中,SymbolType是二维码模型,Halcon10支持‘Data Matrix ECC 200’、‘QR Code’和‘PDF417’共3种类型。
           GenParamNames是二位码模型的属性。如果是默认属性,其值为‘default_parameters’。除了默认属性之外,还有各种不同的二维码属性,这些属性需要根据二维码的实际情况来设置。
            GenParamValues是属性的值。如果是默认属性,则有3种级别的值:
    ‘standard_recognition’、‘enhanced_recognition’、‘maximum_recognition’。
           其中,standard_recognition的解码能力一般,而maximum_recognition的解码能力最强。但凡事均具有两面性,这三种级别的值在提高了解码率的同时,也提高了解码失败时的解码时长。而且使用高级别的解码函数在解不出来的情况下,解码时长甚至有达到6s的情况,这在工业控制领域内绝对是无法忍受的。不过,我们可以通过设置参数来调整,这正是本文的第二节要讲述的内容。
           如果不是默认属性,就根据实际属性和实际的二维码图片来设置属性的值。
           DataCodeHandle是该函数所创建模型的句柄,是输出控制变量。
    1.2 解码
           在建立了模型之后,使用如下解码函数,就可以在输入图像Image中进行解码了。
    find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamNames, GenParamValues : ResultHandles, DecodedDataStrings)
           其中,Image是输入的二维码图像。
           SymbolXLDs是解码成功后找到并输出的二维码边缘。
           DataCodeHandle是create_data_code_2d_model创建的二维码模型句柄。
           GenParamNames是解码函数的属性名,默认值为 []。
           GenParamValues是解码函数的属性值,默认值为 []。
           ResultHandles和DecodedDataStrings输出值,分别是解码结果句柄和解出来的二维码字符串。
    1.3清除模型
           良好的编程习惯之一即是及时清理内存。使用clear_data_code_2d_model函数能清理创建的二维码模型。
    clear_data_code_2d_model (DataCodeHandle)
           DataCodeHandle是创建的二维码模型句柄。
    1.4 默认模型程序示例
           通过以上3个步骤,建立模型、解码和清除模型内存就能轻松的进行解码了。下面是程序示例
    *创建模型create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle) 该模型默认属性是‘default_parameters’,默认属性值是 ‘standard_recognition’。实际上,为了获得更好的解码结果,可以将属性值置为‘enhanced_recognition’、‘maximum_recognition’。*读取图片read_image (Image, 'E:/驱动/py/20160801/001501_4_Mic .bmp')*解码find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \                   ResultHandles, DecodedDataStrings)默认为空,也可以使用‘train’, ‘all’配套属性参数,在这种方式下,模型会自主微参数来达到最好的解码效果。find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, ‘train’, ‘all’, \                   ResultHandles, DecodedDataStrings)*清除模型clear_data_code_2d_model (DataCodeHandle)create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2 解码升级——解码参数的设置
           在解码入门之后,下面介绍的就是本文的重头戏。在工业级别的解码器上,首先要考虑的需求有两个,一是解码率尽可能高,二是CT时间尽可能短,也就是解码所耗费的时间尽可能短。因此,如果简单使用最大化解码的参数,在无法解码的情况下就会导致解码耗时过长,而不使用最大化解码参数,则解码率会有所下降。那么,“世上安得双全法,不负如来不负卿”。而下文介绍的,便是既能获得高解码率,又能降低解码时长的方式。其重点在与解码模型的建立与其解码参数的设置。
    2.1 解码模型的参数
           首先,为了获得高解码率,必须要使用如下函数建立解码模型
    create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandle)
           同时,在建立解码模型之后,调用如下函数对模型进行参数的修正。
           (1)其中最终要的参数之一是解码时长的设置,如果解码函数在一定时长范围内难以解出条码,直接将条码丢弃也是一种弃车保帅的明智之举。而如下参数设置函数能实现
    set_data_code_2d_param (DataCodeHandle, 'timeout', 200)
           如下函数能将解码时长限制在200ms内,这意味着,及时解不出条码,200ms之后制动放弃该条码的解析。
           (2)就是条码极性的设置,所谓极性是指条码颜色和条码底色。如下函数设置指明,条码较亮,而底色较暗。如果实际图片与设置的极性吻合,就能有较好的检测的结果。注意:如果极性设置与实际相反,则会严重的降低解码率。
    set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')
           (3)条码的基本特征设置,二维码的基本特征包括码粒数、码粒像素大小。比如二维码码粒数,ECC 200的条码每行大约有18个码粒。而每个码粒所占的像素大小需根据实际的情况来设置。注意:如下代码的参数需为偶数。
    *码粒个数设置set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', 16)set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', 20)*码粒像素设置set_data_code_2d_param (DataCodeHandle, 'module_size_min', 10)set_data_code_2d_param (DataCodeHandle, 'module_size_max', 14)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
           通过这些设置,极大的减小了解码时长,另一方面,也能保障有较高的解码率。
    2.2 示例create_data_code_2d_model ('Data Matrix ECC 200', 'default_parameters', 'maximum_recognition', DataCodeHandle)set_data_code_2d_param (DataCodeHandle, 'timeout', 200)set_data_code_2d_param (DataCodeHandle, 'polarity', 'light_on_dark')set_data_code_2d_param (DataCodeHandle, 'symbol_size_min', 16)set_data_code_2d_param (DataCodeHandle, 'symbol_size_max', 2)set_data_code_2d_param (DataCodeHandle, 'module_size_min', 10)set_data_code_2d_param (DataCodeHandle, 'module_size_max', 14)read_image (Image, 'E:/驱动/py/20160801/001501_4_Mic .bmp')find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], \                   ResultHandles, DecodedDataStrings)clear_data_code_2d_model (DataCodeHandle)
    无效附件更新 权限提升操作 删帖申请 举报以及其他需要帮助请加入QQ群:214663141 广告位招商 有意者联系
  • TA的每日心情
    窃喜
    2019-9-17 13:45
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    19

    帖子

    73

    积分

    Rank: 1

    积分
    73

    切换助手验证会员

    发表于 2018-2-25 17:55:36 | 显示全部楼层
    QR码方向/mark点应如何定位?

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    开心
    2019-11-29 08:37
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    0

    主题

    11

    帖子

    107

    积分

    Rank: 1

    积分
    107
    发表于 2019-11-10 11:13:20 | 显示全部楼层
    谢谢分享知识,学习了

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    该用户从未签到

    0

    主题

    10

    帖子

    14

    积分

    Rank: 1

    积分
    14
    发表于 2019-11-17 22:27:56 | 显示全部楼层
    学习了

    1.发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    2.提问请组织好自己的逻辑,标题注明大概是什么问题,问题内容写详细,需提供问题症状、错误代码、截图、位置等等信息,不要让别人去猜你想问啥;

    3.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    4.回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    有问题需要咨询站长?| 申请友链| 小黑屋| 手机版| Archiver|  

    粤ICP备15095995号-2 粤公网安备44030602000670号

    CopyRight © 2015-2020 51Halcon机器视觉. Tencent Cloud X3.4.

    快速回复 返回顶部 返回列表