Halcon 的 二維條碼處理 並不困難,困難的是得先讀完說明.........
此說明 以常見的 "Data Matrix ECC 200" 為主
主要會使用的Function有
1.建立二維條碼處理的 Handle reate_data_code_2d_model( : : SymbolType, GenParamNames, GenParamValues : DataCodeHandle)
SymbolType : 二維條碼的格式
GenParamNames:參數名稱 可空 或設定成 default_parameters
GenParamValues :參數 如果上者沒有設定則此也不可設定,如果上者 設定成 default_parameters ,則此參數可設定 下列三種 參數
Model parameter | 'standard_recognition' | 'enhanced_recognition' | 'maximum_recognition' |
Polarity | dark symbols on a light background | dark symbols on a light background and vice versa | dark symbols on a light background and vice versa |
Minimum contrast | 30 | 10 | 10 |
Module size (ECC 200, QR Code, Micro QR Code, Aztec Code) | 6 ... 20 pixels | >= 4 pixels (for sharp images >= 2) | >= 4 pixels (for sharp images >= 1) |
Module size (PDF417) - Width | 3 ... 15 pixels | >= 3 pixels (for sharp images >= 2) | >= 3 pixels (for sharp images >= 1) |
Module size (PDF417) - Aspect ratio | 1 ... 4 | 1 ... 10 | 1 ... 10 |
'small_modules_robustness' | 'low' | 'low' | 'high' |
Module shape | no or small gap between adjacent modules (< 10% of the module size) | bigger gaps are also possible, up to 50% of the module size (only for ECC 200, QR Code, Micro QR Code, and Aztec Code) | bigger gaps are also possible, up to 50% of the module size (only for ECC 200, QR Code, Micro QR Code, and Aztec Code) |
Maximum slant (ECC 200) | 10 degree (0.1745) | 30 degree (0.5235) | 30 degree (0.5235) |
Module grid (ECC 200) | fixed | any (fixed or variable) | any (fixed or variable) |
'finder_pattern_tolerance' (ECC 200) | 'low' | 'low' | 'any' |
'contrast_tolerance' (ECC 200) | 'low' | 'low' | 'any' |
'finder_pattern_tolerance' (Aztec Code) | 'low' | 'high' | 'high' |
Number of position detection patterns that are necessary for generating a new candidate (QR Code) | 3 | 2 | 2 |
HOperatorSet.CreateDataCode2dModel("Data Matrix ECC 200", "default_parameters", "maximum_recognition", hv_DataCodeHandle)
搜尋能力
standard_recognition < enhanced_recognition < maximum_recognition
當然搜尋時間也是隨著增加
2. 搜尋二維條碼 find_data_code_2d(Image : SymbolXLDs : DataCodeHandle, GenParamNames, GenParamValues : ResultHandles, DecodedDataStrings)
Image:搜尋的影像
SymbolXLDs:搜尋出的條碼輪廓
DataCodeHandle:建立條碼的搜尋控制
GenParamNames:一般為空值/或訓練模式
GenParamValues:一般為空值/訓練模式時可設定訓練參數種類
ResultHandles:結果控制
DecodedDataStrings:搜尋結果字串
一般模式搜尋
HOperatorSet.FindDataCode2d(Hbm, ho_SymbolXLDs, hv_DataCodeHandle, New HTuple(), New HTuple(), hv_ResultHandles, hv_DecodedDataStrings)
訓練模式搜尋
HOperatorSet.FindDataCode2d(Hbm, ho_SymbolXLDs, hv_DataCodeHandle, New HTuple("train"), New HTuple("all"), hv_ResultHandles, hv_DecodedDataStrings)
all 是訓練所有參數,可指定特定參數 訓練,請參照 Halcon 本身的參數說明
一般來說 all 就很好用的
3.參數設定 set_data_code_2d_param( : : DataCodeHandle, GenParamNames, GenParamValues : )
常見可設定的參數
polarity : 影像級姓
module_gap:二維條碼點相鄰狀況 no:相連 small:小距離 big:大距離
contrast_min:條碼與影像對比
timeout:搜尋時間上限
persistence:設定某些搜尋結果存在時間 -1 不紀錄品質檢測 0 :臨時 1:永久
contrast_tolerance : 條碼內部模糊對比容忍度
更多資料請看 Halcon 本身的說明
不同的條碼會有不一樣種類的參數可以設定
4.參數存檔 write_data_code_2d_model( : : DataCodeHandle, FileName : )
將建立好 或 設定 或 訓練好的 Handle 存檔
HOperatorSet.WriteDataCode2dModel(hv_DataCodeHandle, New HTuple("檔案路徑"))
5.參數讀檔 read_data_code_2d_model( : : FileName : DataCodeHandle)
HOperatorSet.ReadDataCode2dModel(New HTuple( "檔案路徑" ), hv_DataCodeHandle)
6.條碼品質檢測 get_data_code_2d_results( : : DataCodeHandle, CandidateHandle, ResultNames : ResultValues)
此Function 可取得很多資料,這邊主要以說明 品質檢測為主
Halcon 主要提供兩種品質檢測 isoiec15415 與 aimdpm 兩者的品質檢測
HOperatorSet.GetDataCode2dResults(CodeHandle, resHandle, "quality_isoiec15415", Quality) : 取得isoiec15415的品質資料 值 0 ~ 4
HOperatorSet.GetDataCode2dResults(CodeHandle, resHandle, "quality_isoiec15415_labels", QALabels) : 取得isoiec15415的品質項目名稱
HOperatorSet.GetDataCode2dResults(CodeHandle, resHandle, "quality_isoiec15415_values", QAValues) : 取得isoiec15415的品質直接量測數據
HOperatorSet.GetDataCode2dResults(CodeHandle, resHandle, "quality_aimdpm_1_2006", Quality) : 取得 aimdpm 的品質資料 值 0 ~ 4
HOperatorSet.GetDataCode2dResults(CodeHandle, resHandle, "quality_aimdpm_1_2006_labels", QALabels) : 取得 aimdpm 的品質項目名稱
HOperatorSet.GetDataCode2dResults(CodeHandle, resHandle, "quality_aimdpm_1_2006_values", QAValues) : 取得 aimdpm 的品質直接量測數據
其中 Quality 的分數可以轉換成 ANSI 的 A B C D E F