1、利用MLP(多层感知器)创建一个新的OCR分级器;
create_ocr_class_mlp(: WidthCharacter,HeightCharacter,Interpolation,Features,Characters,NumHidden,Preprocessing,NumComponents, RandSeed,OCRHandle)
WidthCharacter (input_control) 字符的宽度
HeightCharacter (input_control) 字符的高度
Interpolation (input_control) 字符缩放样式'nearest_neighbor', 'bilinear', 'constant', 'weighted'
Features (input_control) 用于分类的特征
'default', 'pixel', 'pixel_invar', 'pixel_binary', 'gradient_8dir', 'projection_horizontal', 'projection_horizontal_invar', 'projection_vertical', 'projection_vertical_invar', 'ratio', 'anisometry', 'width', 'height', 'zoom_factor', 'foreground', 'foreground_grid_9', 'foreground_grid_16', 'compactness', 'convexity', 'moments_region_2nd_invar', 'moments_region_2nd_rel_invar', 'moments_region_3rd_invar', 'moments_central', 'moments_gray_plane', 'phi', 'num_connect', 'num_holes', 'cooc', 'num_runs', 'chord_histo'
Characters (input_control) 要读取的字符集的所有字符.
NumHidden (input_control) 对MLP隐藏单元数.
Preprocessing (input_control) 用于转换特征向量的预处理类型
NumComponents (input_control) 预处理参数:变换特征的个数
RandSeed (input_control) 随机数生成器的种子值,用于初始化具有随机值的MLP。
OCRHandle (output_control)
2、编写样本训练分类器名称
ClassNamesImage := ['hexagon','hexagon','hexagon','circle','circle','circle','polygon','polygon','polygon']
3、将样本写入列车文件append_ocr_trainf(Character, Image : : ClassNamesImage[J], 'train_metal_parts_ocr.trf' )
Character:要训练的特征
Image:特征的灰度值
4、用训练样本训练OCR分类器
trainf_ocr_class_mlp (OCRHandle, 'train_metal_parts_ocr.trf', 200, 1, 0.01, Error1, ErrorLog1)
OCRHandle OCR分类器的句柄
TrainingFile 培训文件名称
MaxIterations 优化算法的最大迭代次数
WeightTolerance 优化算法两次迭代中MLP权重差的阈值
ErrorTolerance 优化算法两次迭代训练数据上MLP平均误差的阈值。
Error 训练数据中MLP的平均误差
ErrorLog 训练数据上的MLP的平均误差作为优化算法迭代次数的函数。
5、 用OCR分类器对单个字符进行分类
do_ocr_single_class_mlp(Character, Image : : OCRHandle, Num : Class, Confidence)
Character 待识别字符
Image 特征的灰度值
OCRHandle OCR分类器的句柄
Num 确定最佳分类数
Class MLP分类特征的结果
Confidence 得分
6、清除分类器
clear_ocr_class_mlp (OCRHandle)
参考例程:classify_metal_parts_ocr.hdev