HalconOCR字符识别
一.OCR字符识别过程
1.获取图片
2.图像预处理
3.图像分割
4.生产识别用的分类器句柄
5.进行字符识别
6.关闭分类器句柄释放资源
二.神经网络多层感知方法识别OCR
1.生成识别的句柄器(read_ocr_class_mlp),从文件中读取 OCR 分类器。
算子参数:
(1).read_ocr_class_mlp( : : FileName : OCRHandle)
Ⅰ.FileName(输入分类器文件名)Halcon有许多自带训练好的字符分类器,可直接调用。
建议值:‘Document_0-9_NoRej.omc’、‘Document_0-9_Rej.omc’、‘Document_0-9A-Z_NoRej.omc’、‘Document_0-9A-Z_Rej.omc’、‘Document_A-Z+_NoRej.omc’、’ Document_A-Z+_Rej.omc’等…
Ⅱ.OCRHandle(输出OCR 分类器的句柄)
2.识别字符:识别单个字符(do_ocr_single_class_mlp),识别多个字符(do_ocr_multi_class_mlp)
算子参数:
(1).do_ocr_single_class_mlp(Character, Image : : OCRHandle, Num : Class,Confidence)
Ⅰ.Character(输入要识别的字符)
Ⅱ.Image(输入单通道图像字符的灰度值)
Ⅲ.OCRHandle(输入OCR 分类器的句柄)
Ⅳ.Num(输入要确定的最佳类别的数量)
Ⅴ.Class(输出使用 MLP 对字符进行分类的结果)
Ⅵ.Confidence(输出字符识别得分)(2).do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence)
Ⅰ.Character(输入要识别的字符)
Ⅱ.Image(输入单通道图像字符的灰度值)
Ⅲ.OCRHandle(输入OCR 分类器的句柄)
Ⅳ.Class(输出MLP 对字符进行分类的结果)
Ⅴ.Confidence(输出字符识别得分)
3.关闭分类器句柄(clear_ocr_class_mlp)
(1).clear_ocr_class_mlp( : : OCRHandle : )
Ⅰ.OCRHandle(输入OCR 分类器的句柄)
实例:
*设置已经训练好的分类器名称
FontName := 'Industrial_0-9A-Z_NoRej.omc'
dev_update_window ('off')
read_image (Image, 'engraved')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')
dev_display (Image)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*确定矩形内的灰度值范围
gray_range_rect (Image, ImageResult, 7, 7)
*像素图像反转
invert_image (ImageResult, ImageInvert)
threshold (ImageResult, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
dev_set_colored (6)
dev_set_draw ('margin')
dev_set_shape ('original')
dev_set_line_width (2)
dev_display (ImageResult)
dev_display (SortedRegions)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_set_shape ('rectangle1')
dev_display (Image)
dev_display (SortedRegions)
shape_trans (SortedRegions, RegionTrans, 'rectangle1')
area_center (RegionTrans, Area, Row, Column)
MeanRow := mean(Row)
count_obj (SortedRegions, Number)
read_ocr_class_mlp (FontName, OCRHandle)
for I := 1 to Number by 1
select_obj (SortedRegions, ObjectSelected, I)
*使用单个字符识别
do_ocr_single_class_mlp (ObjectSelected, ImageInvert, OCRHandle, 1, Class, Confidence)
disp_message (WindowHandle, Class, 'image', MeanRow - 80, Column[I - 1] - 10, 'yellow', 'false')
endfor
*使用多个字符识别
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, Class1, Confidence1)
disp_message (WindowHandle, Class1, 'image', 200, 300, 'green', 'false')
*释放资源
clear_ocr_class_mlp (OCRHandle)
效果图: