字符提取的整个过程:提取图像当中每个字符区域→读取系统或者读取自定义分类器→识别字符do_ocr_single_class_mlp读取单个或者使用do_ocr_multi_class_mlp读取多个字符→处理识别结果。
分类器实现的过程?
- 创建分类器 create_ocr_class_mlp ()
- 训练分类器 train_class_mlp ()
- 写入omc文件 write_ocr_class_mlp ()
- 读取分类器 read_ocr_class_mlp ()
- 识别字符 do_ocr_single_class_mlp ()
- 释放分类器 clear_ocr_class_mlp ()
同一种分类器一般又分为两种:拒绝类和非拒绝类,处理分类器对输入的字符识别结果不确定或者置信度过低的情况。
下面是对图片中的字符提取的例子:


1.读取图片并设置参数
read_image (Image, '1')
dev_set_draw ('margin')
dev_set_line_width (2)
2. 均值滤波过滤
一般值可以选择 一般提取区域的1.1倍或者2倍
mean_image (Image, ImageMean, 30, 80)
3. 动态阈值分割
当原始图像与参考图像之间灰度值至少是5个时候,才会被归为目标区域
dyn_threshold (Image, ImageMean, RegionDynThresh, 7, 'light')
closing_circle (RegionDynThresh, RegionClosing, 3.5)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 300, 700)

4.对区域进行排序
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
shape_trans (SortedRegions, RegionTrans, 'rectangle1') // 转成矩形区域

5. 加载分类器
read_ocr_class_mlp ('SEMI_Rej.omc', OCRHandle)
invert_image (Image, ImageInvert)
6.提取多个字符并最后释放分类器
do_ocr_multi_class_mlp (RegionTrans, ImageInvert, OCRHandle, Class, Confidence)
dev_display (ImageInvert)
dev_display (RegionTrans)
area_center (RegionTrans, Area, Row, Column)
dev_get_window (WindowHandle)
for Index := 0 to |Class|-1 by 1
disp_message (WindowHandle, Class[Index], 'image', Row[Index]+30, Column[Index]-10, 'black', 'true')
endfor
clear_ocr_class_mlp (OCRHandle)
最终效果如下: