HALCON示例程序train_characters_ocr.hdev使用SVM分類器訓練字體
小哥哥小姐姐覺得有用點個贊唄!
示例程序源碼(加注釋)
藍色字體均為算子解釋鏈接,可以前往查看解答
- 關于顯示類函數解釋
read_image (Image, ‘ocr/chars_training_01.png’) - 獲取單通道圖像的指針
get_image_pointer1 (Image, Pointer, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, ‘white’, WindowHandle)
set_display_font (WindowHandle, 12, ‘mono’, ‘true’, ‘false’)
dev_set_draw (‘margin’)
dev_set_line_width (2)
dev_display (Image)
dev_update_window (‘off’)
dev_update_pc (‘off’)
dev_update_var (‘off’) - 創建一個 SVM 分類器內容,從A-G
ClassNames := [‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,‘G’] - 創建OCR分類器
create_ocr_class_svm (8, 10, ‘constant’, [‘convexity’,‘num_holes’,‘projection_horizontal’,‘projection_vertical’], ClassNames, ‘rbf’, 0.02, 0.05, ‘one-versus-one’, ‘normalization’, 10, OCRHandle)
for i := 1 to 7 by 1
read_image (Image, ‘ocr/chars_training_’ + i$’.2d’)
dev_display (Image)
* halcon自定義函數大括號內為其代碼
get_regions (Image, SortedRegions)
{
dev_set_color (‘white’)
- 二值化
threshold (Image, Region, 0, 125) - 分割連通域
connection (Region, ConnectedRegions) - 通過面積篩選區域
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 50, 999999) - 對區域進行排序
sort_region (SelectedRegions, SortedRegions, ‘character’, ‘true’, ‘row’)
return ()
}- 對元素進行計數
count_obj (SortedRegions, NumberObjects)
for j := 1 to NumberObjects by 1 - 選取數組內指定元素
select_obj (SortedRegions, ObjectSelected, j)
if (i == 1 and j == 1)- 將訓練字符儲存到指定文件
write_ocr_trainf (ObjectSelected, Image, ClassNames[j - 1], ‘train_characters_ocr.trf’)
else - 向訓練文件中添加對象
append_ocr_trainf (ObjectSelected, Image, ClassNames[j - 1], ‘train_characters_ocr.trf’)
endif
dev_set_color (‘gray’)
dev_display (ObjectSelected)
disp_message (WindowHandle, ClassNames[j - 1], ‘window’, 10, 10 + (j * 20), ‘black’, ‘true’)
endfor
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
endfor
讀訓練文件并轉化為圖像
read_ocr_trainf (Characters, ‘train_characters_ocr.trf’, CharacterNames)
count_obj (Characters, NumberCharacters)
- 將訓練字符儲存到指定文件
- 對元素進行計數
for i := 1 to NumberCharacters by 1
select_obj (Characters, CharacterSelected, i)
dev_clear_window ()
dev_display (CharacterSelected)
disp_message (WindowHandle, CharacterNames[i - 1], ‘window’, 10, 10, ‘black’, ‘true’)
endfor
- 訓練OCR分類器
trainf_ocr_class_svm (OCRHandle, ‘train_characters_ocr.trf’, 0.001, ‘default’) - 縮減SVM分類器,以減少分類所用時間。
reduce_ocr_class_svm (OCRHandle, ‘bottom_up’, 2, 0.001, OCRHandleReduced) - 將訓練出的分類器寫入文件
write_ocr_class_svm (OCRHandleReduced, ‘font_characters_ocr’) - 清除OCR分類器
clear_ocr_class_svm (OCRHandle)
clear_ocr_class_svm (OCRHandleReduced)
stop ()
dev_clear_window ()
disp_message (WindowHandle, ‘No more lines to execute’, ‘window’, 10, 10, ‘black’, ‘true’)
處理思路
這個例子是主要講解了如何使用,SVM分類器進行OCR字符訓練。
后記
大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。