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机器视觉与图像处理。
领取专属 10元无门槛券
私享最新 技术干货