Halcon自動化訓練OCR分類器舉例


 

進行OCR的時候,同一個字符,通常需要很多字符小圖,這樣圖片多了,才能訓練出健壯的分類器。如何自動化地執行該過程呢?我提供一種思路。

 

待訓練的圖片集如下:

其中,“文件夾0”和“文件夾1”中有多張圖片,例如“文件夾1”中的圖片是這樣的(圖片名稱第一個字符都是“1”):

 

訓練OCR分類器的完整代碼如下:

 1 set_font (200000, 'Arial'+'-Bold-20')  2 dev_set_draw ('margin')  3 
 4 ImageFolder := '第2行data'
 5 
 6 
 7 list_files (ImageFolder, ['files','follow_links','recursive'], ImageFiles)  8 tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)$','ignore_case'], ImageFiles)  9 
10 gen_empty_obj (Images) 11 gen_empty_obj (RegionChars) 12 Chars := [] 13 
14 for Index := 0 to |ImageFiles| - 1 by 1
15  read_image (Image, ImageFiles[Index]) 16  parse_filename (ImageFiles[Index], BaseName, Extension, Directory) 17  count_channels (Image, Channels) 18     if (Channels != 1) 19  rgb1_to_gray (Image, Image) 20  endif 21     
22     *取文件名的第一個字符(例如字符1可能有多張圖片,圖片原始名字可能為11.bmp、12.bmp、13.bmp……) 23     tuple_substr (BaseName, 0, 0, BaseNameReal) 24     
25     *增強圖像對比度 26  scale_image_max (Image, Image) 27     emphasize (Image, Image, 11, 11, 1) 28 
29     if (BaseNameReal == '.') 30         BaseNameReal := '.'
31  endif 32     
33     threshold (Image, Region, 0, 152) 34 *     binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold) 35     opening_circle (Region, Region, 1) 36     fill_up_shape (Region, Region, 'area', 1, 100) 37     
38     *將字符圖像、字符區域、字符文本分別添加到Images、RegionChars、Chars中 39  concat_obj (Images, Image, Images) 40  concat_obj (RegionChars, Region, RegionChars) 41     Chars := [Chars,BaseNameReal]  42     
43  dev_display (Image) 44  dev_display (Region) 45 endfor 46 
47 *1.1創建訓練文件 48 TrainFile:='Line2_Words.trf'
49 * delete_file(TrainFile) 50 
51 *1.2將字符區域、字符圖像與字符文本關聯,保存到.trf訓練文件中 52 for i:=1 to |Chars| by 1
53  select_obj(RegionChars, SingleWord, i) 54  select_obj(Images, SingleImage, i) 55     append_ocr_trainf(SingleWord,SingleImage,Chars[i-1],TrainFile) 56 endfor 57 
58 
59 ***********************************************************************
60 
61 *2.1確定字體分類器文件名 62 FontFile:='Line2_Words.omc'
63 
64 *2.2得到字符標識名(這一步非必須) 65 read_ocr_trainf_names(TrainFile, CharacterNames, CharacterCount) 66 
67 *2.3確定神經網絡隱藏層節點數 68 NumHidden := 80
69 
70 *2.4創建神經網絡分類器 71 create_ocr_class_mlp(42, 67, 'constant', 'default', CharacterNames, NumHidden, 'none', 10, 42, OCRHandle) 72 
73 *2.5訓練神經網絡 74 trainf_ocr_class_mlp(OCRHandle, TrainFile, 200, 1, 0.9, Error, ErrorLog) 75 
76 *2.6保存訓練結果 77 write_ocr_class_mlp(OCRHandle, FontFile) 78 
79 *2.7清除句柄 80 clear_ocr_class_mlp(OCRHandle)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM