機器視覺Halcon檢測動態想要的特徵區域識別字符

光學字符識別是機器視覺領域非常重要的一個應用。機器視覺是集光學、機電和計算機三個領域的一門不算新的技術。此例子用的CNN神經網絡算子識別,調用的訓練庫是系統HDevelop自帶的
識別的圖片為電錶的屏幕截圖,用於提取電錶中間的一大串數字
要識別的圖片:
在這裏插入圖片描述

識別過程
1、閾值處理
mean_image(Image,Mean,15,15)
dyn_threshold(Image,Mean,Region,5,‘dark’)
dev_display (Region)
圖片效果:
在這裏插入圖片描述
2、執行代碼:
*連接字符
closing_rectangle1 (Region, RegionClosing1, 1, 5)
在這裏插入圖片描述

3、裁剪不要的,將不要的其他區域剪小
opening_circle (RegionClosing1, GuoRegion,2.2)
在這裏插入圖片描述

4、 *篩選區域
在調用select_shape 之前必須要調用連通區域方法connection 纔有效果,切記
*計算區域的連通組件
connection (GuoRegion, ConnPatterns)
在這裏插入圖片描述

5、篩選區域
select_shape (ConnPatterns, shapeRegion, ‘area’, ‘and’, 260, 99999)
在這裏插入圖片描述
6、去掉頭頂的紅槓
*去掉圖片頭頂的紅色橫槓
select_shape (shapeRegion, shapeRegion2, ‘width’, ‘and’, 10, 100)
在這裏插入圖片描述

7、求交集,與第一步處理後的區域求交集
*求交集 以區分的顏色模塊在前,原字符再後,才能單獨著色交集後的單體字符
intersection (shapeRegion2, Region, RegionIntersection)
dev_display(RegionIntersection)
在這裏插入圖片描述

8、最後用cnn卷積神經網絡識別
*排序
sort_region (RegionIntersection, SortedRegions, ‘character’, ‘true’, ‘row’)

dev_set_draw (‘margin’)
dev_set_shape (‘rectangle1’)
dev_display (SortedRegions)

shape_trans (SortedRegions, RegionTrans, ‘rectangle1’)
area_center (RegionTrans, Area, Row, Column)
MeanRow := mean(Row)
FontName := ‘Universal_Rej’
count_obj (SortedRegions, Number)
read_ocr_class_cnn (FontName, OCRHandle)
for I := 1 to Number by 1
select_obj (SortedRegions, ObjectSelected, I)
do_ocr_single_class_cnn (ObjectSelected, Image, OCRHandle, 1, Class, Confidence)
dev_disp_text (Class, ‘image’, MeanRow+30, Column[I - 1]-5, ‘green’, ‘box’, ‘false’)
endfor

識別結果:
在這裏插入圖片描述

Halcon HDevelop完整代碼:

dev_update_off()
read_image(Image,'d:/Desktop/vision/DBIAO01.png')
get_image_size(Image,Width,Height)

dev_close_window ()
dev_open_window (0, 0, Width*2, Height*2, 'black', WindowHandle)
set_display_font (WindowHandle, 30, 'mono', 'true', 'false')
dev_display (Image)

dev_set_line_width (2)

mean_image(Image,Mean,15,15)
dyn_threshold(Image,Mean,Region,5,'dark')
dev_display (Region)

 *clip_region (Region, RawSegmentation, 74.8873, 58.6812, 132.943, 312.194) 
*select_shape (Region, SelectedRegions, 'height', 'and',170,99999)
*gen_rectangle1 (ROI_0, 73.2924, 55.8125, 135.814, 312.938)

 *連接字符,以9度閉合畫圓圈
*closing_circle (CharCandidates, RegionClosing1, 1.5)
closing_rectangle1 (Region, RegionClosing1, 1, 5)
*去除不要的
opening_circle (RegionClosing1, GuoRegion,2.2)

*  fill_up (RegionClosing1, Solid)
* opening_rectangle1 (Solid, Cut, 5, 2)

*計算區域的連通組件
 connection (GuoRegion, ConnPatterns)
 *篩選區域
 select_shape (ConnPatterns, shapeRegion, 'area', 'and', 260, 99999)
 *去掉圖片頭頂的紅色橫槓
 select_shape (shapeRegion, shapeRegion2, 'width', 'and', 10, 100)

*求交集 以區分的顏色模塊在前,原字符再後,才能單獨著色交集後的單體字符
intersection (shapeRegion2, Region, RegionIntersection) 
dev_display(RegionIntersection)

 *排序
sort_region (RegionIntersection, SortedRegions, 'character', 'true', 'row') 

dev_set_draw ('margin')
dev_set_shape ('rectangle1')
dev_display (SortedRegions)

shape_trans (SortedRegions, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)
MeanRow := mean(Row)
FontName := 'Universal_Rej'
count_obj (SortedRegions, Number)
read_ocr_class_cnn (FontName, OCRHandle)
for I := 1 to Number by 1
    select_obj (SortedRegions, ObjectSelected, I)
    do_ocr_single_class_cnn (ObjectSelected, Image, OCRHandle, 1, Class, Confidence)
    dev_disp_text (Class, 'image', MeanRow+30, Column[I - 1]-5, 'green', 'box', 'false')
endfor


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章