如上圖,創建文件夾,分別存儲需要訓練的字符圖片。
代碼如下:
dev_set_draw ('margin')
*將0-9、A-Z存入字符數組中
CharH := []
for i := 0 to 9 by 1
CharH[i] := chr(round(i + ord('0')))
endfor
for i := 10 to 36-1 by 1
CharH[i] := chr(round(i-10 + ord('A')))
endfor
NumChar := |CharH|
TrainFile := 'D:/IPI/Halcon12Projects/字符訓練.trf'
for Indexfile:=0 to |CharH| - 1 by 1
Path:='D:\\IPI\\訓練0-9A-Z\\'+CharH[Indexfile]
list_files (Path, 'files', ImageFiles)
for Index := 0 to |ImageFiles|-1 by 1
read_image (Image, ImageFiles[Index])
*將字符添加到訓練文件中
append_ocr_trainf(Image,Image,CharH[Indexfile],TrainFile)
endfor
endfor
*查詢訓練文件中的字符
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
*創建OCR分類器
create_ocr_class_svm (8, 10, 'constant', 'default', CharacterNames, 'rbf', 0.02, 0.001, 'one-versus-one', 'normalization', 0, OCRHandle)
*訓練
trainf_ocr_class_svm (OCRHandle, TrainFile, 0.001, 'default')
*寫入本地
FontFile := 'D:/IPI/Halcon12Projects/字符訓練.omc'
write_ocr_class_svm(OCRHandle,FontFile)
* 釋放內存
clear_ocr_class_svm (OCRHandle)
*使用自己創建的分類器進行字符識別
*讀取本地分類器
read_ocr_class_svm (FontFile, OCRHandle)
*字符識別
list_files ('D:/IPI/字符測試','files', Files)
for Index := 0 to |Files|-1 by 1
read_image (Image, Files[Index])
do_ocr_single_class_svm( Image, Image, OCRHandle, 1, Class)
disp_message (3600, Class, 'window', 40, 221, 'black', 'true')
endfor
clear_ocr_class_svm (OCRHandle)
***************************************完***********************************************
***************************使用分類器識別*********************************
* read_image(Image,'C:/Users/研發/Pictures/Camera Roll/無標題.png')
* draw_rectangle1 (3600, Row1, Column1, Row2, Column2)
* gen_rectangle1(Rectangle, Row1, Column1, Row2, Column2)
* reduce_domain(Image, Rectangle, ImageReduced)
* threshold (ImageReduced, Region, 0, 128)
* connection (Region, ConnectedRegions)
* select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 15, 99999)
* sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'row')
* shape_trans (SortedRegions,RegionTrans,'rectangle1')
* count_obj (RegionTrans, Number)
* area_center (RegionTrans, Area, Row, Column)
*讀取訓練的分類器
* read_ocr_class_mlp ('D:/IPI/Halcon12Projects/字符訓練.omc',OcrHandle)
*識別
* for i:=0 to Number-1 by 1
* do_ocr_multi_class_mlp (SortedRegions, ImageReduced, OcrHandle, Class, Confidence)
* disp_message (3600, Class[i], 'window', Row[i]+40, Column[i], 'black', 'true')
* endfor
* clear_ocr_class_mlp (OcrHandle)
PS:本文參考網絡及書籍