欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Halcon中OCR的实现及关键函数解析

发布时间:2023/12/20 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Halcon中OCR的实现及关键函数解析 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

OCR的实现共分为两步,1是使用字符数据来训练OCR。2是使用OCR进行字符的识别

训练分类器

  训练分类器共分为4步:

1是使用阈值来分割字符区域

2是调用append_ocr_trainf函数将字符加入训练集;

3是创建分类器

4是调用trainf_ocr_class_mlp函数来训练分类器。

*对字符进行训练得到分类器 TrainingNames := ['F','M','1','4','A','4','2'] FontName := 'F:/YM_Project/SZWX/work_x32_MFOL2/function/MFOL2' TrainingFileName := FontName+'.trf' *当dev_set_check的参数为'~give_error'时,这次检测会被忽略,程序进入后面的操作。 dev_set_check ('~give_error') *删除指定位置的文件 delete_file (TrainingFileName) for i := 0 to |TrainingNames|-1 by 1select_obj (FinalNumbers, CharaterRegions, i+1)*将字符CharaterRegions添加到训练集TrainingFileName中append_ocr_trainf (CharaterRegions, FourthDarkImage, TrainingNames[i], TrainingFileName)disp_message (WindowID, TrainingNames[i], 'image', MeanRow-40, Column[i]-6, 'yellow', 'false') endfor *tuple_uniq( : : Tuple : Uniq) *相邻重叠的元组只保留一个。常用于tuple_sort( : : Tuple : Sorted)之后,tuple_sort是升序排列。 CharNames := uniq(sort(TrainingNames)) *创建mlp create_ocr_class_mlp (8, 10, 'constant', 'default', CharNames, 5, 'none', 10, 42, OCRHandle) *使用训练集来训练mlp trainf_ocr_class_mlp (OCRHandle, TrainingFileName, 200, 1, 0.01, Error, ErrorLog) write_ocr_class_mlp (OCRHandle, FontName) clear_ocr_class_mlp (OCRHandle)

使用分类器进行识别
  使用分类器进行字符识别的函数有两个:1是do_ocr_multi_class_mlp,该函数对一幅图像内的多个字符进行一次分类并输出分类结果。2是do_ocr_single_class_mlp,该函数是对一幅图像中的单个字符进行分类。两者的对比试验表明,后者的分类准确度要高,因此,下文使用do_ocr_single_class_mlp算子进行字符的分类。 
  分类的实现分为4步:1是读取分类器;2是读取图片;3是分割单个字符;4分类

*Step1根据分类器来分类 read_ocr_class_mlp (FontName, OCRHandle) *Step2读取图片获得每一个图像 read_image (Image, 'F:/YM_Project/SZWX/1024SZWX/SVS900_XFMT1X110_CR6030_S1_4.bmp') *Step3分割单个字符 gen_rectangle1 (Rectangle1, 43, 2243, 707, 3675) reduce_domain (Image, Rectangle1, ImageReduced1) crop_domain (ImageReduced1, ImagePart) median_image (ImagePart, ImageReduced1, 'circle', 3, 'mirrored') threshold (ImageReduced1, Regions, 84, 255) opening_circle (Regions, RegionOpening, 3.5) connection (RegionOpening, ConnectedRegions) select_shape (ConnectedRegions, Numbers, 'area', 'and', 1000, 9999) count_obj (Numbers, CharacterNums) ArrayConfidence := [] for IndexCharacter := 1 to CharacterNums by 1select_obj (Numbers, CharacterSelected, IndexCharacter) *Step4分类do_ocr_single_class_mlp(CharacterSelected, ImagePart, OCRHandle,1, Class, Confidence)ArrayConfidence := [ArrayConfidence,Confidence] endfor

关键函数解析

create_ocr_class_mlp( : : WidthCharacter, HeightCharacter, Interpolation, Features, Characters, NumHidden, Preprocessing, NumComponents, RandSeed : OCRHandle)WidthCharacter:输入被分割的字符缩放到指定的宽度 HeightCharacter: Interpolation:设置缩放的字符的缩放模式,对于多数应用而言,Interpolation = 'constant'。请注意:转换后的字符大小不能太大,因为分类器对较大尺寸的字符分类效果并不好。特别是,如果尺寸较大,一些小的分割误差会较大程度上影响分类的效果,一般情况下,sizes between 6x8 and 10x14 Features:分类的特征向量的长度 Characters:输出层神经元的个数;也就是是需要匹配的字符查阅表中字符的个数。 NumHidden:MLP中隐藏层神经元的个数 Preprocessing:矢量特征装换的预处理类型 NumComponents:匹配字符的数量 这两个参数主要是对输入的值进行预处理。RandSeed:初始化mlp OCRHandle:输出OCR_mlp分类器句柄

trainf_ocr_class_mlp( : : OCRHandle, TrainingFile, MaxIterations, WeightTolerance, ErrorTolerance : Error, ErrorLog)
训练一个神经网络分类器

do_ocr_multi_class_mlp(Character, Image : : OCRHandle : Class, Confidence)
使用OCR分类多个字符
Character是字符区域
Image是字符图片
OCRHandle是分类器句柄
Class是输出的类别
Confidence是输出的分类精度


do_ocr_single_class_mlp(CharacterSelected, ImagePart, OCRHandle,1, Class, Confidence)
分类单个字符,其分类效果比上述同时分类多个字符的效果要好
--------------------- 
作者:罗泽 
来源:CSDN 
原文:https://blog.csdn.net/u013698770/article/details/53842205 
版权声明:本文为博主原创文章,转载请附上博文链接!

总结

以上是生活随笔为你收集整理的Halcon中OCR的实现及关键函数解析的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。