圖片下載:https://weisupreme.github.io/tutorial/2018/08/08/halcon-ocr.html
訓練代碼:
*讀取圖片
read_image (Image, 'D:/github/CodeRecognition/test.png')
*反轉圖片,使前景爲白色,便於處理
invert_image (Image, ImageInvert)
*使用閾值分割,提取前景
threshold (ImageInvert, Region, 128, 255)
*計算連通域
connection (Region, ConnectedRegions)
*選擇符合要求的區域,即字符
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
*排序
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
*訓練****************
*計算字符個數
count_obj (SortedRegions, Number)
*創建訓練文件******
*標籤
words:=['2','0','1','7']
TrainFile:='D:/github/CodeRecognition/testWords.trf'
dev_set_check('~give_error')
delete_file(TrainFile)
dev_set_check('~give_error')
*生成訓練文件
for i:=1 to Number by 1
select_obj(SortedRegions, SingleWord, i)
append_ocr_trainf(SingleWord,Image,words[i-1],TrainFile)
endfor
*訓練ocr
FontFile:='D:/github/CodeRecognition/testWords.omc'
*讀取訓練文件
read_ocr_trainf_names(TrainFile, CharacterNames, CharacterCount)
NumHidden:=400
*自己創建神經網絡分類器
*create_ocr_class_mlp (10, 20, 'constant', 'default', CharacterNames, NumHidden, 'none', 10, 42, OCRHandle)
*這裏採用halcon預訓練模型;第二次及以後訓練先將文件名改爲FontFile,調用已訓練的參數繼續訓練
read_ocr_class_mlp('HandWritten_0-9.omc', OCRHandle)
*訓練
trainf_ocr_class_mlp (OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*保存參數到自己命名的文件
write_ocr_class_mlp(OCRHandle, FontFile)
*釋放內存
clear_ocr_class_mlp(OCRHandle)
識別代碼:
read_image (Image, 'D:/github/CodeRecognition/test.png')
invert_image (Image, ImageInvert)
threshold (ImageInvert, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 150, 99999)
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
*計算每一個字符區域中心
area_center (SortedRegions, Area, Row, Column)
FontFile:='D:/github/CodeRecognition/testWords.omc'
*讀取已訓練好的參數
read_ocr_class_mlp(FontFile, OCRHandle)
*識別
do_ocr_multi_class_mlp (SortedRegions, Image, OCRHandle, RecNum, Confidence)
*顯示在屏幕上
set_display_font (3600, 27, 'mono', 'true', 'false')
for i := 0 to |RecNum| - 1 by 1
disp_message (3600, RecNum[i], 'image', Row[i],Column[i], 'white', 'false')
endfor