隶属于:
C:\Users\Public\Documents\MVTec\HALCON-23.05-Progress\examples\hdevelop\OCR\Support-Vector-Machines
此例,基于支持向量机,SVM,write_ocr_trainf 写入分类器,read_ocr_trainf_names读取分类器,create_ocr_class_svm创建分类器,并用trainf_ocr_class_svm训练分类器,用do_ocr_multi_class_svm识别字符。
读图,并提取字符区域
写入文件读取文件,创建SVM分类器并训练
write_ocr_trainf (Characters, Image, Classes, TrainFile)
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
create_ocr_class_svm (8, 10, ‘constant’, ‘default’, CharacterNames, ‘rbf’, 0.02,
0.05, ‘one-versus-one’, ‘normalization’, 0, OCRHandle)
- 训练分类器。
trainf_ocr_class_svm (OCRHandle, TrainFile, 0.001, ‘default’)
识别字符
* 本示例程序展示了如何使用一个简单的基于SVM的OCR分类器。
dev_update_off ()
read_image (Image, 'letters')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_colored (12)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
get_file_path_in_tmp_dir ('letters.trf', TrainFile)
dev_display (Image)
gen_rectangle1 (Rectangle, 0, 0, Height - 1, 400)
reduce_domain (Image, Rectangle, Image)
* Segment the image
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold)
* 将字母“i”和“j”与其上面的点连接起来。
dilation_circle (Region, RegionDilation, 3.5)
* 计算正确的连通分量。
connection (RegionDilation, ConnectedRegions)
* 将每个连通分量(字符)还原为其原始形状。
intersection (ConnectedRegions, Region, RegionIntersection)
*按行对字符进行排序。
sort_region (RegionIntersection, Characters, 'character', 'true', 'row')
dev_display (Characters)
disp_message (WindowHandle, 'Training characters', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*计算每个字符的真实类别。
count_obj (Characters, Number)
Length := Number / 27
Classes := []
for J := 0 to 25 by 1
Classes := [Classes,gen_tuple_const(Length,chr(ord('a') + J))]
endfor
Classes := [Classes,gen_tuple_const(Length,'.')]
*从分割的字符中构建必要的训练文件。
write_ocr_trainf (Characters, Image, Classes, TrainFile)
*创建分类器。我们从训练文件中读取类别。
* 因此,程序的训练部分是通用的,可以用于训练任何OCR分类器
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
create_ocr_class_svm (8, 10, 'constant', 'default', CharacterNames, 'rbf', 0.02, 0.05, 'one-versus-one', 'normalization', 0, OCRHandle)
* 训练分类器。
trainf_ocr_class_svm (OCRHandle, TrainFile, 0.001, 'default')
*
* 现在在整个训练图像上测试分类器。
full_domain (Image, Image)
* 以与之前相同的方式分割字符。
binary_threshold (Image, Region, 'max_separability', 'dark', UsedThreshold1)
dilation_circle (Region, RegionDilation, 3.5)
connection (RegionDilation, ConnectedRegions)
intersection (ConnectedRegions, Region, RegionIntersection)
sort_region (RegionIntersection, Characters, 'character', 'true', 'row')
*分类
do_ocr_multi_class_svm (Characters, Image, OCRHandle, Class)
*
* 显示结果
area_center (Characters, Area, Row, Column)
dev_display (Image)
set_display_font (WindowHandle, 16, 'sans', 'true', 'false')
disp_message (WindowHandle, Class, 'image', Row - 16, Column + 8, 'blue', 'false')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
disp_message (WindowHandle, 'Classification result', 'window', 12, 12, 'black', 'true')
dev_set_check ('~give_error')
delete_file (TrainFile)
dev_set_check ('give_error')