Halcon快速入門

嵌入式視覺發表於2022-12-06

前言

工業智慧視覺應用主要涉及四個場景:識別、測量、定位、檢測。

  • 識別:識別物體的物理特徵,包括形狀、顏色、字元和條碼等,常見的應用場景是 OCR,讀取零部件上的字母、數字、字元等用於溯源。
  • 測量:把獲取到的影像畫素資訊標定成常用的度量衡單位,再透過精確計算出目標的幾何尺寸。
  • 定位:獲取目標的二維/三維位置資訊,常用語元件定位,用以輔助機器臂進行後續的抓取等動作。
  • 檢測:一般特指缺陷檢測,判斷產品是否存在缺陷,如零部件缺陷檢測等。

image

一,HALCON 概述

HALCON 是德國 MVtec 公司開發的一款綜合性的機器視覺標準軟體,擁有全球通用的整合開發環境(HDevelop)。它節約了產品成本,縮短了軟體開發週期——HALCON 靈活的架構便於機器視覺,醫學影像和影像分析應用的快速開發。在歐洲以及日本的工業界已經是公認具有最佳效能的機器視覺(Machine Vision)軟體。

MVTec 提供了 5 種軟體:HALCON、MERLIC、深度學習工具、介面、嵌入式視覺,其中 HALCON 是最核心和應用最廣的。

HALCON 主要提供的技術有:條形碼和二維碼讀取、BLOB 分析、物影像分類、計算光學成像、過濾技術、缺陷檢查、匹配、1D/2D/3D 測量、形態學處理、OCR 和 OCV、基於樣本的識別(SBI)、亞畫素邊緣檢測和線條提取技術、深度學習和 3D 視覺技術。

所謂 Blob 分析,即是從連通畫素中提取具有相同邏輯狀態的特徵 (Blob)。

更多技術的描述請參閱官網資料

image

1.1,HALCON 安裝

注意:HALCON 目前不支援 arm 處理器版的 M1 Pro 機器,而且目前主流是在 Windows 開發居多。

注意,需要先在官網註冊賬號,然後才能下載對應軟體,MVTec HALCON 提供兩個不同的軟體版本:HALCON 訂閱版 (HALCON Progress)HALCON 永久版 (HALCON Steady)。兩個版本是完全獨立的。 需要許可證,這意味著沒有可能從一個版本 "切換" 到另一個版本。

HALCON 下載安裝步驟如下所示:

  1. 進入 HALCON 官網,選擇產品版本、作業系統以及架構後就會下載對應版本軟體直接點選下載好的安裝包即可安裝。
  2. 安裝的詳細步驟截圖如下所示,試用版不用安裝 license 檔案,跳過即可。

image

image

image

image

二,HALCON 架構

HALCON 架構如下圖 2.1 所示。HALCON 機器視覺軟體的主要部分就是影像處理庫,其由超過 2000 多個運算元組成,當然我們也可以透過擴充包的形式開發自定義運算元,並在程式中使用。

image

HALCON 提供了通用的影像採集介面來支援不同的影像採集裝置(3D相機、相機等),包好特定裝置的實現庫會在程式執行時動態載入。

2.1,運算元

Operators。

我們使用 HALCON 庫中任何功能實際上都是透過運算元(Operators)完成的,每個功能都有多種實現方法,其可以透過運算元引數選擇。完整的運算元列表在 HALCON Operator Reference,其提供了 HDevelop, .NET, Python, C++, 和 C syntax 介面。HALCON庫提供的運算元的重要特徵如下:

  • 運算元之間沒有層次結構,所有運算元都是一個級別的。
  • 存在邏輯運算元。
  • 很多運算元可以使用並行加速技術。
  • 運算元的輸入輸出引數的排序是有標準化規則: 輸入圖示(iconic)、輸出圖示、輸入控制和輸出控制。

2.1.1,引數和資料結構

Quick Guide to HALCON Parameters and Data Structures

HALCON 運算元的引數有兩種基本型別:圖示資料和控制資料(iconic data and control data)。影像、區域(regions)和 XLD(擴充線描述) 屬於標誌性資料。

  • Images(影像)即包含畫素值的矩陣,由多個通道組成,其詳細定義可以參考《數字影像處理》書籍。這裡感興趣區域 ROI 指的是輸入影像的哪一部分割槽域會被處理,ROI 可以靈活定義,從簡單的矩形到一組未連線到畫素點都支援。
  • Regions 由一系列畫素組成。區域之中的畫素可以不互相連線,任意畫素集合都可以作為單個區域處理。
  • XLDS 包括所有基於輪廓和多邊形的資料。像 edges_sub_pix 這樣的亞畫素精度運算元將輪廓作為 XLD 資料返回。 輪廓是一系列 2D 控制點,由線連線。 通常,控制點之間的距離約為 1 個畫素。 除了控制點之外,XLD 物件還包含所謂的區域性和全域性屬性。 這些的典型示例是,例如,控制點的邊緣幅度或輪廓段的迴歸引數。 除了提取 XLD 物件外,HALCON 還支援進一步處理。 這方面的示例是基於給定特徵範圍的輪廓選擇,用於將輪廓分割成線、弧、多邊形或平行線。

控制資料(control data)包括控制程式碼和基本資料型別,如整數、實數、字串。

控制程式碼是對複雜資料結構的引用,例如,與影像採集介面或基於形狀匹配的模型的連線。 出於效率和資料安全的原因,在運算子之間傳遞的不是整個結構而是隻有控制程式碼。 控制程式碼是不能更改的神奇值(magic values),並且可能因執行和版本而異。 一旦所有引用被覆蓋,它們就會自動清除。 使用控制程式碼的示例有圖形視窗、檔案、套接字、影像採集介面、OCR、OCV、測量和匹配

2.2,擴充包

為了支援特殊硬體或實現新的演算法,HALCON 支援以 C 語言實現的自定義運算元。擴充包介面包含幾個預定義的例程和宏,用於在 C 中輕鬆處理影像資料和記憶體物件。成功整合新運算元後,它可以像任何其他 HALCON 運算元一樣使用。

2.3,介面

HALCON 支援Python、C、C++ 和 .NET 語言介面,對於·不同程式語言介面,其資料型別、類和運算元的命名會有所不同。

2.3.1,HALCON-Python 介面

讀取影像並計算連線區域(connected regions)數量的示例程式碼如下。

img = ha.read_image('pcb')
region = ha.threshold(img, 0, 122)
num_regions = ha.count_obj(ha.connection(region)) print(f'Number of Regions: {num_regions}')

2.3.2,HALCON-C 介面

C 介面是 HALCON 支援的最簡單的介面,每個運算元由 1 或 2 個全域性函式表示,其中運算元的名稱和引數序列和 HDevelop 語言相同。

因為 HALCON 運算元的本身就是由 C 語言實現的,所以 C 是原生介面,支援也是最好。

以下示例程式碼也是實現讀取影像並計算連線區域(connected regions)數量。

Hobject img;
read_image(&img, "pcb");
Hobject region;
threshold(img, &region, 0, 122);
Hobject connected_regions;
connection(region, &connected_regions);
Hlong num_regions = 0;
count_obj(connected_regions, &num_regions);
printf("Number of Regions: %" PRIdPTR "\n", num_regions);

2.3.3,HALCON-C++ 介面

C++ 介面比 C 介面複雜得多,應用了 C++ 物件導向程式設計的優點,包括自動型別轉換、構造和解構函式等。另外和 C 介面一樣,也為每個 HALCON 運算元提供了全域性函式,來實現程式化的程式設計風格(a procedural style of programming)。

讀取影像並計算連線區域(connected regions)數量的 C++ 介面實現程式碼如下。

HImage img{"pcb"};
HRegion region = img.Threshold(0, 122);
Hlong numRegions = region.Connection().CountObj();
std::cout << "Number of Regions: " << numRegions << '\n';

2.3.4,HALCON-.NET 介面

2.4,影像獲取介面

HALCON 透過動態庫(Windows: 動態載入庫 DLLs, Linux: 共享庫 shared libraries)的形式為 50 多個影像採集卡和數百個工業相機提供採集影像的介面。庫名稱以字首 hAcq 開頭;HALCON XL 使用以 xl 結尾的庫。

HALCON 影像採集介面的更新會比 HALCON 庫本身更新更為頻繁。

成功安裝好影像採集裝置後,透過 open_framegrabber 運算元(需配置裝置的名稱和其他資訊)訪問裝置,透過 grab_image 運算元獲取影像。

2.5,I/O 介面

HALCON 對不同 I/O 裝置使用同一類運算元實現統一訪問。安裝好 I/O 裝置後,使用 open_io_device 運算元建立連線,指定 I/O 裝置介面的名稱;建立連線後,透過呼叫 open_io_channel 來開啟傳輸通道,然後使用 read_io_channelwrite_io_channel 運算元讀取和寫入值。

三,如何開發應用

官方推薦使用 HDevelop(HALCON 機器視覺庫的互動式開發環境) 進行快速原型設計。在開發好 HDevelop 程式後需要將其轉換為最終環境,方法有以下三種:

  • Start from Scratch: 從頭(scratch)開始編寫程式意味著手動將 HDevelop 程式碼翻譯成目標程式語言(C++、Python...)。
  • 匯出 HDevelop 程式碼: 使用 HDevelop 的程式碼匯出功能將您的 HDevelop 程式碼自動翻譯成目標程式語言。
  • 匯出庫專案::HDevelop 的庫匯出會生成一個即用型專案資料夾,包括目標語言的包裝程式碼和用於構建專案的 CMake 檔案。 HDevelop 的庫匯出使用 HDevEngine,一個充當直譯器的庫。

3.1,HDevelop

預設情況下,HDevelop 視窗入下圖 3.1 所示,視窗主要分為 3 類

  1. **圖形視窗: **顯示(中間)結果。即顯示影像、區域和 XLD 等標誌性資料。
  2. **程式視窗: **即輸入和編輯程式碼的地方。
  3. 變數視窗: 顯示所有變數。即顯示圖示變數(iconic variables)和控制變數。圖示變數包含圖示資料,控制變數包含控制資料。

image

3.2,示例程式

推薦觀看影片教程: Integrate HDevelop code into a C++ application using the Library Project Export

分步說明的描述可以參考 《quick_guide》 文件的3.2 節內容。

四,更多參考資料

HALCON 相關文件描述及下載連結彙總如下表所示。

REFERENCE MANUAL 參考手冊 下載連結 檔案大小
HALCON Operator Reference(HALCON 運算元參考資料) 下載 PDF
線上閱讀 (需要 Javascript)
24.8 MB
BASICS 基礎知識 下載連結 檔案大小
Quick Guide(快速指南) 下載 PDF 2.6 MB
Installation Guide(安裝指南) 下載 PDF 0.4 MB
HDevelop Users' Guide(HDevelop 使用者指南) 下載 PDF 6.2 MB
Solution Guide I - Basics(解決方案指南 I - 基礎知識) 下載 PDF 6.7 MB
Solution Guide II - A - Image Acquisition(解決方案指南 II-B - 影像採集) 下載 PDF 0.7 MB
Solution Guide II - B - Matching(解決方案指南 II-B - 匹配) 下載 PDF 3.4 MB
Solution Guide II - C - 2D Data Codes(解決方案指南 II-C - 二維碼) 下載 PDF 4.6 MB
Solution Guide II - D - Classification(解決方案指南 II-D - 分類) 下載 PDF 4.3 MB
Solution Guide III - A - 1D Measuring(解決方案指南 III-A - 1D 測量) 下載 PDF 1.2 MB
Solution Guide III - B - 2D Measuring(解決方案指南 III-B - 2D 測量) 下載 PDF 2.5 MB
Solution Guide III - C - 3D Vision(解決方案指南 III-C - 3D 視覺) 下載 PDF 14.2 MB
Technical Updates(技術更新) 下載 PDF 0.2 MB

本文由部落格一文多發平臺 OpenWrite 釋出!