Halcon —— 多种二维码检测

工业视觉实战:Halcon多类型二维码识别技术详解

在工业自动化场景中,兼容多种二维码类型是提高生产线灵活性的关键。本文将深入解析Halcon实现Data Matrix、QR Code和PDF417三种主流二维码的兼容识别方案,并重点解释核心算子参数。

一、多类型二维码识别流程

 

二、核心算子详解

1. 模型创建算子:create_data_code_2d_model
create_data_code_2d_model ('Data Matrix ECC 200',  // 二维码类型['default_parameters'],  // 参数组名称['maximum_recognition'], // 识别模式DataCodeHandle           // 输出模型句柄
)

参数详解表

参数类型可选值说明
类型string'Data Matrix ECC 200'工业级Data Matrix标准
'QR Code'通用二维码标准
'PDF417'堆叠式二维码
参数组tuple['default_parameters']平衡速度与精度
['high_speed']高速模式(牺牲精度)
['high_robustness']高鲁棒模式(复杂场景)
识别模式tuple['maximum_recognition']最大化识别率
['high_speed']高速识别模式
输出句柄HTuple-模型操作标识符

工业应用建议

  • 金属表面DPM码:'Data Matrix ECC 200' + ['high_robustness']

  • 物流标签:'PDF417' + ['default_parameters']

  • 产品溯源:'QR Code' + ['maximum_recognition']

2. 参数设置算子:set_data_code_2d_param
set_data_code_2d_param (DataCodeHandle,   // 模型句柄'polarity',       // 参数名称'light_on_dark'   // 参数值
)

关键参数表

参数名类型可选值说明适用场景
polaritystring'light_on_dark'浅色条码深色背景常规印刷
'dark_on_light'深色条码浅色背景激光雕刻
'any'自动识别极性混合场景
contrast_tolerancestring'low'低对比度容差高对比度环境
'high'高对比度容差低质量图像
'very_high'极高对比度容差反光表面
module_size_mininteger3-10最小模块尺寸(像素)微小二维码
perspective_distortionstring'low'低畸变容差平面标识
'high'高畸变容差曲面标识
3. 二维码识别算子:find_data_code_2d
find_data_code_2d (Image,               // 输入图像SymbolXLDs,          // 输出轮廓DataCodeHandle,      // 模型句柄[],                  // 通用参数名[],                  // 通用参数值ResultHandles,       // 结果句柄DecodedDataStrings   // 解码结果
)

执行流程解析

  1. 图像金字塔处理(自动)

  2. 定位特征点检测

  3. 解码数据区域

  4. 错误校验与纠错

  5. 输出结果

性能影响参数

* 设置超时(毫秒)防止卡死
set_data_code_2d_param(DataCodeHandle, 'timeout', 200)* 限制最大结果数(提高速度)
find_data_code_2d(..., 'max_num_results', 1, ...)

三、完整代码解析

 

for Index := 0 to |Selection|-1 by 1read_image (Image, Selection[Index])* 第一级:Data Matrix识别find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], _, DecodedDataStrings)count_obj (SymbolXLDs, Number)if (Number>0)disp_message('发现D码:'+ DecodedDataStrings)* 第二级:PDF417识别elsefind_data_code_2d (Image, SymbolXLDs1, DataCodeHandle2, [], [], _, DecodedDataStrings1)count_obj (SymbolXLDs1, Number1)if (Number1>0)disp_message('发现PDF码:'+ DecodedDataStrings1)* 第三级:QR Code识别elsefind_data_code_2d (Image, SymbolXLDs2, DataCodeHandle1, [], [], _, DecodedDataStrings2)count_obj (SymbolXLDs2, Number2)if (Number2>0)disp_message('发现QR码:'+ DecodedDataStrings2)elsedisp_message('未发现二维码')endifendifendifstop() * 按F5继续
endfor

四、工业级优化方案

1. 参数优化矩阵
场景关键参数推荐值效果提升
金属表面'glare_invariance''high'识别率+25%
'contrast_tolerance''very_high'识别率+15%
高速流水线'timeout'100处理速度+40%
'module_size_min'实际值×1.2速度+30%
曲面物体'perspective_distortion''high'识别率+35%
'num_modules_tolerance'3识别率+20%
2. 图像预处理技巧
* 对比度增强(低对比度场景)
emphasize(Image, Enhanced, 7, 7, 2.0)* 极性反转(深色背景)
invert_image(Image, Inverted)* ROI区域裁剪(固定位置)
gen_rectangle1(ROI, x1, y1, x2, y2)
reduce_domain(Image, ROI, ProcessedImage)

五、三种二维码特性对比

特性Data MatrixQR CodePDF417
数据容量最高中等
容错能力极强中等
方向检测360°全向三向定位双向定位
最小尺寸0.5×0.5mm1×1mm2×5mm
工业应用电子元件追踪产品溯源物流标签
识别速度35ms28ms42ms

六、常见问题解决方案

  1. 识别率低

       * 增加对比度容差set_data_code_2d_param(DataCodeHandle, 'contrast_tolerance', 'very_high')* 减小模块尺寸限制set_data_code_2d_param(DataCodeHandle, 'module_size_min', 3)
  2. 曲面识别失败

    * 启用高级畸变校正
    set_data_code_2d_param(DataCodeHandle, 'perspective_distortion', 'high')* 增加模块容差
    set_data_code_2d_param(DataCodeHandle, 'num_modules_tolerance', 4)
  3. 识别速度慢

     * 设置超时限制set_data_code_2d_param(DataCodeHandle, 'timeout', 100)* 限制结果数量find_data_code_2d(..., 'max_num_results', 1, ...)

七、完整工程建议

* 获取显示窗口
dev_get_window (WindowHandle)* 1. 创建三种二维码模型
* Data Matrix模型(工业D码)
create_data_code_2d_model ('Data Matrix ECC 200', ['default_parameters'], ['maximum_recognition'], DataCodeHandle)* QR Code模型(通用二维码)
create_data_code_2d_model ('QR Code', ['default_parameters'], ['maximum_recognition'], DataCodeHandle1)* PDF417模型(堆叠式条码)
create_data_code_2d_model ('PDF417', ['default_parameters'], ['maximum_recognition'], DataCodeHandle2)* 2. 设置模板参数(可选)
* 示例:设置QR码极性(深底浅码)
* set_data_code_2d_param (DataCodeHandle1, 'polarity', 'dark_on_light')* 3. 加载图像库
* 位置:C:/Users/22209/Desktop/halcon/2025.6.19/二维码/
list_files (ImageLibPath, 'files', Files)* 筛选图像文件(支持png/jpg)
tuple_regexp_select (Files, ['.(png|jpg)','ignore_case'], Selection)* 4. 创建日志文件
open_file(ResultPath + '识别日志.txt', 'append', LogHandle)
fwrite_string(LogHandle, '===== 二维码识别报告 =====\n')
fwrite_string(LogHandle, '开始时间: ' + date() + ' ' + time() + '\n\n')* 5. 循环处理图像
for Index := 0 to |Selection|-1 by 1* 读取图像 - 位置:ImageLibPath + Selection[Index]read_image (Image, Selection[Index])* 显示当前处理图像dev_display (Image)disp_message (WindowHandle, '处理中: ' + Selection[Index], 'window', 12, 12, 'black', 'true')* A. 尝试识别Data Matrix* 位置:ResultPath + 'DataMatrix_结果/'find_data_code_2d (Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)count_obj (SymbolXLDs, Number)if (Number > 0)* 保存成功结果dump_window (WindowHandle, 'png', ResultPath + 'DataMatrix_成功_' + Index$'03d' + '.png')* 显示识别结果disp_message (WindowHandle, '发现D码:'+ DecodedDataStrings, 'window', 40, 12, 'green', 'true')fwrite_string(LogHandle, Selection[Index] + ': DataMatrix - ' + DecodedDataStrings + '\n')* B. 尝试识别PDF417* 位置:ResultPath + 'PDF417_结果/'elsefind_data_code_2d (Image, SymbolXLDs1, DataCodeHandle2, [], [], ResultHandles1, DecodedDataStrings1)count_obj (SymbolXLDs1, Number1)if (Number1 > 0)* 保存成功结果dump_window (WindowHandle, 'png', ResultPath + 'PDF417_成功_' + Index$'03d' + '.png')disp_message (WindowHandle, '发现PDF码:'+ DecodedDataStrings1, 'window', 40, 12, 'blue', 'true')fwrite_string(LogHandle, Selection[Index] + ': PDF417 - ' + DecodedDataStrings1 + '\n')* C. 尝试识别QR Code* 位置:ResultPath + 'QRCode_结果/'elsefind_data_code_2d (Image, SymbolXLDs2, DataCodeHandle1, [], [], ResultHandles2, DecodedDataStrings2)count_obj (SymbolXLDs2, Number2)if (Number2 > 0)* 保存成功结果dump_window (WindowHandle, 'png', ResultPath + 'QRCode_成功_' + Index$'03d' + '.png')disp_message (WindowHandle, '发现QR码:'+ DecodedDataStrings2, 'window', 40, 12, 'orange', 'true')fwrite_string(LogHandle, Selection[Index] + ': QRCode - ' + DecodedDataStrings2 + '\n')* D. 识别失败处理* 位置:ResultPath + '失败案例/'else* 保存失败图像dump_window (WindowHandle, 'png', ResultPath + '失败_' + Index$'03d' + '.png')disp_message (WindowHandle, '未发现二维码', 'window', 40, 12, 'red', 'true')fwrite_string(LogHandle, Selection[Index] + ': 识别失败\n')endifendifendif* 用户交互disp_continue_message (WindowHandle, 'black', 'true')stop ()
endfor* 6. 释放资源
clear_data_code_2d_model (DataCodeHandle2)
clear_data_code_2d_model (DataCodeHandle1)
clear_data_code_2d_model (DataCodeHandle)* 7. 关闭日志
fwrite_string(LogHandle, '\n结束时间: ' + date() + ' ' + time() + '\n')
fwrite_string(LogHandle, '===== 报告结束 =====')
close_file(LogHandle)* 8. 显示完成消息
disp_message (WindowHandle, '处理完成! 结果保存在: ' + ResultPath, 'window', 12, 12, 'green', 'true')

结果实例

 

  1. 错误处理机制

       tryfind_data_code_2d(...)catch (HException e)* 记录错误代码error_code := e.ErrorCode()* 9010: 未找到二维码* 9011: 解码失败endtry
  2. 性能监控

    * 计算处理时间
    start_time := time()
    * 识别操作...
    proc_time := (time()-start_time)*1000
  3. 结果日志

        * 保存识别结果open_file('result.log', 'append', FileHandle)fwrite_string(FileHandle, '图像:'+Selection[Index]+' 结果:'+DecodedDataStrings)close_file(FileHandle)

总结:Halcon的多类型二维码识别系统通过级联识别策略和参数优化,可满足复杂工业场景需求。关键在于:

  1. 根据应用场景选择合适的参数组合

  2. 实现鲁棒的图像预处理流程

  3. 建立完善的错误处理和日志机制

  4. 针对不同二维码类型进行专项优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84165.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓vscodeAI开发实例

前言 前些天发现了一个巨牛的人工智能免费学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 目录 一、安卓开发基础与工具链革新 1.1 Android Studio的局限性分析 1.2 VSCode在移动开发中的崛起 1.3 跨平台开发工具链对比…

③通用搜索---解析FastAdmin中的表格列表的功能

深度解析FastAdmin中的表格列表的功能-CSDN博客文章浏览阅读25次。本文将FastAdmin框架的CRUD功能配置要点进行了系统梳理。官方文档与开发经验相结合,详细介绍了菜单显示、TAB过滤、通用搜索、工具栏按钮、动态统计、快速搜索等17项功能的配置方法。包括字段渲染&a…

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_项目里程碑示例(CalendarView01_22)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

Python爬虫实战:获取Diesel电商数据并分析

1. 引言 在当今数字化时代,电商平台积累了海量的产品和用户数据。通过对这些数据的挖掘和分析,企业可以深入了解市场动态、消费者需求和竞争态势,从而制定更有效的营销策略和产品规划。Diesel 作为知名的时尚品牌,其在电商平台上的表现备受关注。本研究旨在通过 Python 爬…

Spring RestTemplate + MultiValueMap vs OkHttp 多值参数的处理

📌 Spring RestTemplate vs OkHttp:多值参数处理 一、MultiValueMap 与 FormBody 的差异 特性RestTemplate MultiValueMapOkHttp FormBody多值参数支持✅ 原生支持(add("key", "value") 自动追加)❌ 需显…

GelSight视触觉3D轮廓仪赋能Beomni人形机器人触觉遥测,开启人形机器人触觉应用新场景

在智能制造、航空航天等领域,传统机器人常面临操作精度不足、环境适应力弱等问题。GelSight触觉传感技术与Beomni人形机器人的融合,为这些场景提供了新可能 —— 通过亚微米级触觉感知能力,操作员可远程感知物体表面细节,在复杂环…

python设置word的字体颜色

这个错误是由于python-docx的RGBColor对象没有.rgb属性导致的。正确的属性访问方式是分别获取红、绿(g)、蓝(b)三个分量。以下是修复方案: 错误原因分析 RGBColor对象的结构如下: from docx.shared import RGBColorcolor RGBColor(255, 204, 51) pri…

推荐模型之GBDT-LR

一、概念 GBDT-LR模型由FaceBook(现在的Meta)团队于2014年在论文《Practial Lessons from Predicting Clicks on Ads at Facebook》中提出,目标是用于预测FaceBook的广告点击量(实际上广告和推荐领域很多算法模型都是共用的&#…

Java实现Excel图片URL筛选与大小检测

Java实现Excel图片URL筛选与大小检测 在数据处理场景中,我们常需筛选Excel中的图片URL。本文分享一个完整的Java方案,涵盖从读取图片URL到检测有效性、筛选大小,再到生成新Excel文件的全过程,同时讲解开发与优化过程,…

Java 实现后端调用 Chromium 浏览器无头模式截图的方案

Java 实现后端调用 Chromium 浏览器无头模式截图的方案 1. 使用 Playwright 优点:功能强大、支持多浏览器(Chromium/Firefox/WebKit)、支持异步操作。实现方式: 利用 Playwright 创建无头浏览器实例;使用 Java 的调度…

基于多模态文档解析与RAG的行业知识库构建技术指南

1. 技术背景 随着企业非结构化数据(扫描件、PDF、图像等)占比超过80%,传统关键词检索已无法满足精准问答需求。本文提出融合**计算机视觉(CV)与大语言模型(LLM)**的解决方案,关键技…

基于YOLOv11+PP-OCRv5深度学习的智能车牌检测与识别系统python源码+pytorch模型+评估指标曲线+精美GUI界面

【算法介绍】 智能车牌检测与识别系统借助当下前沿的 YOLOv11 算法以及 PP-OCRv5 算法,能够在复杂多样的环境场景中,快速且精准地达成实时车牌检测与识别任务。在现代交通管理领域,该技术意义重大,它能够推动涉及车辆识别与记录的…

[深度学习]全连接神经网络

目录 一、实验目的 二、实验环境 三、实验内容 3.1 完成解压数据集相关操作 3.2分析代码结构并运行代码查看结果 3.3修改超参数(批量大小、学习率、Epoch)并对比分析不同结果 3.4修改网络结构(隐藏层数、神经元个数)并对比分…

openEuler安装BenchmarkSQL

BenchmarkSQL是一个用于评估数据库性能的开源工具。它模拟TPC-C(Transaction Processing Performance Council)基准测试场景,该场景主要用于衡量数据库在处理大量并发事务时的能力。TPC-C测试场景模拟了一个典型的批发分销商的业务环境&#…

分库分表之优缺点分析

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注实战代码系列最新文章😉C实现图书管理系统(Qt C GUI界面版)SpringBoot实战系列🐷【SpringBoot实战系列】Sharding-Jdbc实现分库…

【2025年超详细】Git 系列笔记-4 git版本号及git相关指令运用。

系列笔记 【2025年超详细】Git 系列笔记-1 Git简述、Windows下git安装、Linux下git安装_displaying 2e144 commits. adjust this setting in -CSDN博客 【2025年超详细】Git 系列笔记-2 github连接超时问题解决_2025访问github-CSDN博客 【2025年超详细】Git 系列笔记-3 Git…

图像特征检测算法SuperPoint和SuperGlue

SuperPoint 背景与概述 :SuperPoint 是一个自监督的全卷积神经网络,用于提取图像中的兴趣点及其描述子。它在 2018 年由 Magic Leap 提出,通过在合成数据集上预训练一个基础检测器 MagicPoint,然后利用同胚适应技术对真实图像数据…

nginx 和 springcloud gateway cors 跨域如何设置

在跨域资源共享(CORS)配置中,Nginx 和 API Gateway(如Spring Cloud Gateway、Kong等)是两种常见的解决方案,它们的配置逻辑和适用场景有所不同。以下是详细对比和配置示例: 一、核心区别 维度NginxAPI Gateway定位反向代理/Web服务器微服务流量入口配置位置基础设施层应…

电路笔记(信号):一阶低通RC滤波器 一阶线性微分方程推导 拉普拉斯域表达(传递函数、频率响应)分析

目录 RC 低通滤波器电路一阶线性微分方程推导拉普拉斯域表达(传递函数)传递函数 H ( s ) H(s) H(s)频率响应(令 s j ω s j\omega sjω)幅频特性:相位特性:Bode 图(线性系统频率响应&#x…

【Git】删除远程分支时,本地分支还能看到

当远程仓库的分支被删除后,本地通过 git branch -a 或 git remote show origin 仍能看到这些分支的引用,是因为本地存储的远程跟踪分支(位于 refs/remotes/origin/)未被同步更新。以下是解决方法: 解决方案&#xff1…