Section 33-Halcon实战宝典之OCR-2

Halcon OCR训练分SVM和MLP两种,Halcon提供了一些识别模型,是专门针对字符识别和检测的一种有效的图像处理算法。首先,要训练足够的样本,生成标准字符库,供字符识别使用;再次,调用已生产的标准字符库,对待测字符进行识别,判定待测字符是否符合标准。

OCR字符图像的特点是:背景复杂,存在如底纹、水印等噪声信息,同时存在 光照不匀、对比度小等因素的影响,故图像的干扰和噪声大。

OCR图像二值化流程:

1. 图像光照均匀性分析,获取图像光照分布图像。

2. 图像边缘分析、得到图像的边缘分布模型。

3. 图像模糊度计算,得到图像模糊权值。

4. 对图像进行局部分块处理,利用图像对应分块的特征,得到图像的局部二值化结果。

5. 对整幅图像局部二值化结果进行空白填充处理防止字符断裂,对分割的游离点进行分析剔除异常噪点。

相关算子

神经网络

1.clear_all_ocr_class_mlp

功能:清除所有创建的OCR分级器,释放分级器占据的存储空间。

2.clear_ocr_class_mlp

功能:清除所有创建的OCR分级器,释放所有的分级器占据的存储空间。

3.create_ocr_class_mlp

功能:利用MLP(多层感知器)创建一个新的OCR分级器。

4.do_ocr_multi_class_mlp

功能:给定区域字符和分级器的灰度图像值,计算出最好的类,将类返回到Class中。

5.do_ocr_single_class_mlp

功能:给定区域字符和分级器的灰度图像值,计算出最好的类,将类返回到Class中。

6.do_ocr_word_mlp

功能:功能与do ocr multiclass mlp相同,只是do ocr word mlp将字符组作为一个实体。

7. get_features_ocr_class_mlp

功能:为根据OCR分级器OCRHandle确定的字符计算其特征参数。

8.get_params_ocr_class_mlp

功能:返回一个OCR分级器的参数。

9.get_prep_info_ocr_class_mlp

功能:计算OCR分级器预设定矢量特性的信息。

10.read ocr class mlp

功能:从一个文件中读取OCR分级器。

11.trainf_ocr_class_mlp

功能:测试OCR 分级器的句柄。

12.write_ocr_class_mlp

功能:将OCR分级器的OCRHandle写入由文件名确定的文件中。

支持矢量机

1. clear_all ocr class svm

功能:清除所有的基于OCR分级器的SVM,释放相应的存储空间。

2. clear_ ocr_class_svm

功能:清除基于OCR分级器的一个SVM,释放相应的存储空间。

3. create_ocr_class_svm

功能:利用支持向量机创建一个OCR分级器。

4. do_ocr_multi_class_svm

功能:根据基于OCR分级器的SVM将大量字符分类。

5. do ocr single class svm

功能:根据基于OCR分级器的SVM将单个字符分类。

6. do_ocr_word_svm

功能:利用OCR分级器将一系列相关字符分类。

7. get_features_ocr_class_svm

功能:计算一个字符的特征。

8. get_params_ocr_class_svm

功能:返回一个OCR分级器的参数。

9. get_prep_info_ocr_class_svm

功能:计算基于OCR分级器的SVM的预定义特征矢量的信息内容。

10. get_support_vector_num_ocr_class_svm

功能:返回OCR分级器支持的矢量的数目。

11. get_support_vector_ocr_class_svm

功能:返回基于支持向量机的已测试OCR分级器中支持向量的索引。

12. read_ocr_class_svm

功能:从文件中读取基于OCR分级器的SVM。

13. reduce_ocr_class_svm

功能:根据一个减小的SVM来接近一个基于OCR分级器的SVM。

14.Trainf_ocr_class_svm

功能:测试一个OCR分级器。

15. write_ocr_class_svm

功能:将一个OCR分级器写入文件。

实例分析

dev_close_window ()

*获取图片

read_image (Image,'C:/Users/Administrator/Desktop/Test.png')

get_image_size (Image, Width,Height)

dev_open_window (0, 0, Width,Height, 'black', WindowHandle)

dev_display (Image)

*字符分割

rgb1_to_gray (Image,GrayImage)

threshold (GrayImage, Regions,0, 100)

connection (Regions,ConnectedRegions)

sort_region (ConnectedRegions,SortedRegions, 'character', 'true', 'row')

count_obj (SortedRegions,Number)

*逐个显示确定顺序

for Index := 1 to Number by1

dev_clear_window ()

select_obj (SortedRegions, ObjectSelected,Index)

dev_display (ObjectSelected)

stop ()

endfor

word:=['A','B','C','D','E','F','G']

*创建训练文件

TrainFile:='D:\\words_A_Z.trf'

*将图像区域与字符标识关联,保存到训练文件

write_ocr_trainf (SortedRegions,Image, word, TrainFile)

*创建OMC文件

FontFlie:='D:\\FontA_Z.omc'

*读取训练文件

read_ocr_trainf_names(TrainFile, CharacterNames, CharacterCount)

*创建神经网络分类器mlp

create_ocr_class_mlp (8, 10,'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)

*训练

trainf_ocr_class_mlp (OCRHandle,TrainFile, 200, 1, 0.01, Error, ErrorLog)

*保存训练结果

write_ocr_class_mlp (OCRHandle,FontFlie)

clear_ocr_class_mlp(OCRHandle)

*读取其他图片进行OCR识别

dev_close_window ()

read_image (Image1,'C:/Users/Administrator/Desktop/aa.png')

get_image_size (Image1, Width,Height)

dev_open_window (0, 0, Width,Height, 'black', WindowHandle)

dev_display (Image1)

text_line_orientation(ObjectSelected, Image1, 25, -0.523599, 0.523599, OrientationAngle)

rotate_image (Image1,ImageRotate, OrientationAngle, 'constant')

*字符分割

rgb1_to_gray (ImageRotate,GrayImage1)

threshold (GrayImage1, Regions2,0, 55)

connection (Regions2,ConnectedRegions1)

dev_display (Image1)

select_shape (ConnectedRegions1,SelectedRegions, ['area','height'], 'and', [563.54,58.089], [2249.07,120])

sort_region (SelectedRegions,SortedRegions1, 'character', 'true', 'row')

count_obj (SortedRegions1,Number1)

*字符识别,显示结果。

read_ocr_class_mlp (FontFlie,OCRHandle1)

do_ocr_multi_class_mlp(SortedRegions1, GrayImage1, OCRHandle1, Class, Confidence)

dev_display (Image1)

for j := 1 to Number1 by 1

select_obj (SortedRegions1,ObjectSelected1, j)

area_center (ObjectSelected1, Area, Row,Column)

disp_message (WindowHandle, Class[j-1],'window', Row+10, Column, 'black', 'true')

endfor

关注公众号Next8060,与万人一起关注HALCON机器视觉与图像处理。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180415G0V0OR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券