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 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB 长度和像素_Matlab中短时傅里叶变换 spectrogram和stft的用法

在Matlab中,做短时傅里叶变换需要使用函数spectrogram,而在Matlab2019中,引入了一个新的函数stft,下面我们就来看下这两个函数都如何使用。短时傅里叶变换的基本原理就是将数据分段加窗,做fft,在分段时会有…

Qt 【关于控件样式,鼠标进入、离开、点击】

比如举以下这个例子: QPushButton * okBtn; okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}"); //这个是最常规的样式 okBtn->setstylesheet("QPushButton{border-image:url(:/image/hello);}" //…

图像处理基础——灰度共生矩阵

标准定义如下:对于取定的方向θ 和距离 d, 在方向为θ的直线上, 一个像元灰度为 i, 另一个与其相距为 d 像元的灰度为 j 的点对出现的频数即为灰度共生矩阵第(i, j)阵元的值。 怎样理解呢?看起来好复杂呀 呜呜呜 小白理解:灰度共生矩阵就…

iphone查看删除的短信_iPhone12发布!刚买的苹果手机短信全部消失了怎么办?

原标题:iPhone12发布!刚买的苹果手机短信全部消失了怎么办?目前,人们的社交除了面对面交谈,用的最多的就是通过手机进行聊天,比如用QQ、微信和短信、邮件等方式,虽然短信不会用来一般的聊天&…

[唐诗]182宫中行乐词(其一)-李白

宫中行乐词(其一)-李白 小小生金屋, 盈盈在紫微。 山花插宝髻, 石竹绣罗衣。 每出深宫里, 常随步辇归。 只愁歌舞散, 化作彩云飞。

python基础之01数据类型-变量-运算浅解

python的数据类型 1 数字 数字分为整型(int),长整型(long),浮点型(float),复数(complex) 整型较为常用的功能: >>> a-4 >…

使用Caffe进行手写数字识别执行流程解析

之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examples实现对手写数字进行识别,这里详细介绍下其执行流程并精简了实现代码,使用Caffe对MNIST数据集进行train的文章可以参考 http://blog.csdn.net/fengbingchun/…

obs可以装手机吗?_原神PC和手机数据互通吗 PC和手机可以一起玩吗

在原神中,很多玩家都在PC端创建了角色,那么疑问来了,PC端与手机端的账号会是互通的吗?下面小编就为大家带来原神PC和手机数据互通吗的相关内容,一起来看看吧!更多攻略:原神攻略大全PC和手机数据…

学习linux第二周作业

第二周作业:本周作业内容:1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。touch,rm,mv,cp,file,ls,chmod,chown,ln,rename,touch 修改文件atime,如果文件不存在,那么创建该文件。rm&#xff1…

三维点云目标提取总结(续)

三维点云目标提取(续) 3.三维点云目标提取 3.1一般流程 先根据个人认识总结一下目标提取的一般性步骤: 如上所示,三维点云的目标提取关键性的两步即为:特征提取与选择、分类,是不是整个方法流程与图像中的目…

安卓高手之路之java层Binder

很多人一提到Binder就说代理模式,人云亦云的多,能理解精髓的少。 本篇文章就从设计角度分析一下java层BInder的设计目标,以及设计思路,设计缺陷,从而驾驭它。 对于【邦德儿】的理解, 从通信的角度来看,就是…

ftp改为sftp_浅谈 FTP、FTPS 与 SFTP

二狗子最近搭建了一个图片分享网站,每天都有好多人在他的网站上传许多照片,这些照片还会通过内部的逻辑同步到又拍云存储中,非常方便。但不久后问题就来了,由于刚开始的用户照片管理规划没有做好,随着用户上传的图片越…

如何解决秒杀的性能问题和超卖的讨论

2019独角兽企业重金招聘Python工程师标准>>> 最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。 ps:进入正文前先说一点个人感受,…

C# 从Excel中读取时间数据

之前写到从Excel中读取时间数据 //读取Excel数据Excel.Application xapp new Excel.Application();string filepath txt_Excel.Text;Excel.Workbook xbook xapp.Workbooks._Open(filepath, Missing.Value, Missing.Value,Missing.Value, Missing.Value, Missing.Value, Miss…

grid autosport额外内容下载慢_清理大王app下载-清理大王v1.0安卓下载

清理大王,下面由小编给大家介绍一下这款软件,该软件是一款非常不错的手机清理服务应用软件,清理大王app为用户提供了手机垃圾清理,内存加速,优化手机,解决手机卡顿的情况。感兴趣的朋友欢迎使用微侠下载&am…

(转)浏览器兼容的JS写法总结

-、元素查找问题1. document.all[name] (1)现有问题:Firefox不支持document.all[name] (2)解决方法:使用getElementsByName(name),getElementById(id)等来替代。 2. 集合类对象问题 (1)现有问题:IE中对许多集合类对…

java面试总结(第一天)

临近大学毕业,出来试试找工作,学c#出身,半路出家java,做过几个ssh、stringMVC的项目。基础知识不太扎实,勿喷 以下是我面试过程中遇到的问题 ----------------------------------------------------------------------…

怎么看cudnn的版本好_祖坟风水怎么看,好祖坟有什么征兆?

人们之所以看重祖坟的风水,是因为祖坟的风水与后代子孙的运势密切相关,可以说祖坟的风水好不好关系着子孙后代的运势顺不顺,因此对于祖坟的风水好坏人们是非常在意的,那么祖坟风水怎么看,好祖坟有什么征兆呢?下面是小编…

iOS - Swift SQLite 数据库存储

前言 采用 SQLite 数据库来存储数据。SQLite 作为一中小型数据库,应用 iOS 中,跟前三种保存方式相比,相对比较复杂一些。注意:写入数据库,字符串可以采用 char 方式,而从数据库中取出 char 类型&#xff0c…

Hibernate 多对多关联查询条件使用

from Brand as b inner join fetch b.styles as s where s.styleId? 转载于:https://www.cnblogs.com/cocoat/p/5427467.html