- 前言
- 一,HALCON 概述
- 1.1,HALCON 安裝
- 二,HALCON 架構
- 2.1,算子
- 2.1.1,引數和資料結構
- 2.2,拓展包
- 2.3,介面
- 2.3.1,HALCON-Python 介面
- 2.3.2,HALCON-C 介面
- 2.3.3,HALCON-C++ 介面
- 2.3.4,HALCON-.NET 介面
- 2.4,影像獲取介面
- 2.5,I/O 介面
- 2.1,算子
- 三,如何開發應用
- 3.1,HDevelop
- 3.2,示例程式
- 四,更多參考資料
前言
工業智慧視覺應用主要涉及四個場景:識別、測量、定位、檢測,
- 識別:識別物體的物理特征,包括形狀、顏色、字符和條碼等,常見的應用場景是 OCR,讀取零部件上的字母、數字、字符等用于溯源,
- 測量:把獲取到的影像像素資訊標定成常用的度量衡單位,再通過精確計算出目標的幾何尺寸,
- 定位:獲取目標的二維/三維位置資訊,常用語元件定位,用以輔助機器臂進行后續的抓取等動作,
- 檢測:一般特指缺陷檢測,判斷產品是否存在缺陷,如零部件缺陷檢測等,

一,HALCON 概述
HALCON 是德國 MVtec 公司開發的一款綜合性的機器視覺標準軟體,擁有全球通用的集成開發環境(HDevelop),它節約了產品成本,縮短了軟體開發周期——HALCON 靈活的架構便于機器視覺,醫學影像和影像分析應用的快速開發,在歐洲以及日本的工業界已經是公認具有最佳效能的機器視覺(Machine Vision)軟體,
MVTec 提供了 5 種軟體:HALCON、MERLIC、深度學習工具、介面、嵌入式視覺,其中 HALCON 是最核心和應用最廣的,
HALCON 主要提供的技術有:條形碼和二維碼讀取、BLOB 分析、物影像分類、計算光學成像、過濾技術、缺陷檢查、匹配、1D/2D/3D 測量、形態學處理、OCR 和 OCV、基于樣本的識別(SBI)、亞像素邊緣檢測和線條提取技術、深度學習和 3D 視覺技術,
所謂 Blob 分析,即是從連通像素中提取具有相同邏輯狀態的特征 (Blob),
更多技術的描述請參閱官網資料,

1.1,HALCON 安裝
注意:HALCON 目前不支持 arm 處理器版的 M1 Pro 機器,而且目前主流是在 Windows 開發居多,
注意,需要先在官網注冊賬號,然后才能下載對應軟體,MVTec HALCON 提供兩個不同的軟體版本:HALCON 訂閱版 (HALCON Progress) 和 HALCON 永久版 (HALCON Steady),兩個版本是完全獨立的, 需要許可證,這意味著沒有可能從一個版本 "切換" 到另一個版本,
HALCON 下載安裝步驟如下所示:
- 進入 HALCON 官網,選擇產品版本、作業系統以及架構后就會下載對應版本軟體直接點擊下載好的安裝包即可安裝,
- 安裝的詳細步驟截圖如下所示,試用版不用安裝
license檔案,跳過即可,




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

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, ®ion, 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_channel 和 write_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 類:
- **圖形視窗: **顯示(中間)結果,即顯示影像、區域和 XLD 等標志性資料,
- **程式視窗: **即輸入和編輯代碼的地方,
- 變數視窗: 顯示所有變數,即顯示圖示變數(
iconic variables)和控制變數,圖示變數包含圖示資料,控制變數包含控制資料,

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 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539348.html
標籤:其他
