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
英文地址,請注明出處:http://en.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…