Halcon編程實驗-(5)漢字識別【目的:OCR識別訓練應用】

程序及流程

1.圖像矯正

2.對文字連通域進行區域提取分離
在這裏插入圖片描述
3.製作字符集,既形成trf文件,字符圖像與字符進行關聯
在這裏插入圖片描述

4.神經網絡訓練過程,生成omc文件
在這裏插入圖片描述
5.利用訓練結果中的omc文件,識別並顯示
在這裏插入圖片描述

環境

自己拍的一張圖片,無其他影響因素
在這裏插入圖片描述

相關代碼

//創建窗口
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

//文件讀取
read_image (Image, 'X:/Halcon/漢字識別.jpg')

//預處理
rgb1_to_gray (Image, GrayImage)
scale_image (GrayImage, ImageScaled, 1.97674, -213)//圖像線性變換

//區域圖像分割提取
threshold (ImageScaled, Regions, 0, 2)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','width','height'], 'and', [0,149.75,155.33], [53299.5,225.89,210.15])

//圖像矯正
union1 (SelectedRegions, RegionUnion)//合併所有區域
shape_trans (RegionUnion, RegionTrans, 'rectangle2') //變換區域形狀,rectangle2:最小外接矩形
orientation_region (RegionTrans, Phi)//區域方向計算,得到弧度Phi
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi , Row, Column, rad(180), HomMat2D)
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')//區域矯正操作
affine_trans_image (Image, ImageAffineTrans, HomMat2D, 'constant', 'false')//圖像矯正操作

//對文字連通域進行區域提取分離
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReduced)//對矯正後的圖形進行區域裁剪
rgb1_to_gray (ImageReduced, GrayImage1)
threshold (GrayImage1, Regions1, 0, 80)
connection (Regions1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 7803.64, 14949.4)
sort_region (SelectedRegions1, SortedRegions, 'first_point', 'true', 'column')//連通域排序操作
count_obj (SelectedRegions1, Number)//獲得連通域數量,既文字數量

//製作字符集,既形成trf文件,字符圖像與字符進行關聯
words :=['編','著','羅','超']
TrainFile :='X://Halcon//word.trf'
for Index := 1 to Number by 1
    select_obj (SortedRegions, SingleWord, Index)//拿出單獨連通域
    append_ocr_trainf (SingleWord, ImageAffineTrans, words[Index-1],TrainFile)//關聯文字連通域與字符
endfor

//生成omc文件
FontFile :='X://Halcon//word.omc'
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)

//神經網絡訓練過程------------------------
*創建神經網絡分類器
create_ocr_class_mlp (10, 30, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
*訓練分類器
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*保存omc文件
write_ocr_class_mlp (OCRHandle, FontFile)
*清除句柄
clear_ocr_class_mlp (OCRHandle)
//----------------------------------------

*識別文字
read_ocr_class_mlp (FontFile, OCRHandle1)//讀取訓練參數(omc文件)
do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OCRHandle1, Class, Confidence)//ocr識別操作,輸入圖形爲矯正裁剪過的圖像

//顯示識別結果
dev_display (ImageAffineTrans)
dev_display (SortedRegions)
for i := 1 to |Class| by 1
disp_message (WindowHandle,Class[i-1], 'image', Row+200 , Column+ i*200, 'blue', 'true')   
endfor

實驗結果

在這裏插入圖片描述

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