*关闭窗体更新
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’)
*1获取训练图像
get_tmp_dir (TmpDir)
TrainFile := TmpDir + ‘/letters.trf’
dev_display (Image)
*2获取一个矩形,获取训练对象
gen_rectangle1 (Rectangle, 0, 0, Height - 1, 400)
*从图像裁剪出目标区域
reduce_domain (Image, Rectangle, Image)
*3分割训练对象
binary_threshold (Image, Region, ‘max_separability’, ‘dark’, UsedThreshold)
*4有两个特殊字符i+j需要连成一体分割,提取出来后用交集再重新还原
dilation_circle (Region, RegionDilation, 3.5)
*4分割字符
connection (RegionDilation, ConnectedRegions)
*5把分割开的字符还原,膨胀区域与原来的区域进行求交集,intersection交集,union1/union2并集,difference差集,complement补集
intersection (ConnectedRegions, Region, RegionIntersection)
*6按行坐标排列
sort_region (RegionIntersection, Characters, ‘character’, ‘true’, ‘row’)
*显示字符
dev_display (Characters)
*显示信息
disp_message (WindowHandle, ‘Training characters’, ‘window’, 12, 12, ‘black’, ‘true’)
*右下角显示’press f5 to continue’
disp_continue_message (WindowHandle, ‘black’, ‘true’)
stop ()
*字符个数
count_obj (Characters, Number)
Length := Number / 27
Classes := []
*将类添加到class里面,方便后面训练
*训练的时候准备好字符和字符区域以及 模板图像
for J := 0 to 25 by 1
Classes := [Classes,gen_tuple_const(Length,chr(ord(‘a’) + J))]
endfor
Classes := [Classes,gen_tuple_const(Length,’.’)]
*7保存训练文件,读取对象名称
write_ocr_trainf (Characters, Image, Classes, TrainFile)
*AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
*创建SVM分类器
create_ocr_class_svm (8, 10, ‘constant’, ‘default’, CharacterNames, ‘rbf’, 0.02, 0.05, ‘one-versus-one’, ‘normalization’, 0, OCRHandle)
- Train the classifier
*训练OCR-svm分类器
trainf_ocr_class_svm (OCRHandle, TrainFile, 0.001, ‘default’)
*8测试SVM分类器
full_domain (Image, Image) - Segment characters the same way as before
*阈值分割
binary_threshold (Image, Region, ‘max_separability’, ‘dark’, UsedThreshold1)
*膨胀
dilation_circle (Region, RegionDilation, 3.5)
*联通区域
connection (RegionDilation, ConnectedRegions)
*求交集,把i,j分开点和下面分开
intersection (ConnectedRegions, Region, RegionIntersection)
*根据字母顺序排列区域
sort_region (RegionIntersection, Characters, ‘character’, ‘true’, ‘row’)
*9分类
do_ocr_multi_class_svm (Characters, Image, OCRHandle, Class)
stop ()
*AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
*BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
read_ocr_trainf_names (TrainFile, CharacterNames1, CharacterCount)
create_ocr_class_mlp (8, 10, ‘constant’, ‘default’, CharacterNames1, 80, ‘none’, 10, 42, OCRHandle1)
trainf_ocr_class_mlp (OCRHandle1, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*以下翻译同上
full_domain (Image, Image)
-
Segment characters the same way as before
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’)
*9分类
do_ocr_multi_class_mlp (Characters, Image, OCRHandle1, Class1, Confidence)
*BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
*运用OCR有以下几个步骤
*1.准备好分割好的训练目标,按一定顺序排列数组Characters
*2.把对应的文字也对应的按顺序添加到数组中Classes
*3.write_ocr_trainf (Characters, Image, Classes, TrainFile)/read_ocr_trainf_names (TrainFile, CharacterNames, CharacterCount)
*4.创建OCR句柄create_ocr_class_mlp (8, 10, ‘constant’, ‘default’, CharacterNames1, 80, ‘none’, 10, 42, OCRHandle1)
*5.训练Ocr文件,trainf_ocr_class_svm (OCRHandle, TrainFile, 0.001, ‘default’)
*6.使用OcrHandle.
*只要把训练文件保存好以后,不管是MLP,SVM,都可通过以下三个步骤,创建OCR句柄。对图像进行分割
*接着do_ocr_multi_class_mlp (Characters, Image, OCRHandle1, Class1, Confidence)
*read_ocr_trainf_names (TrainFile, CharacterNames1, CharacterCount)
*create_ocr_class_mlp (8, 10, ‘constant’, ‘default’, CharacterNames1, 80, ‘none’, 10, 42, OCRHandle1)
*trainf_ocr_class_mlp (OCRHandle1, TrainFile, 200, 1, 0.01, Error, ErrorLog)
*