ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:60.79KB ,
资源ID:9395400      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9395400.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(光学字符识别解析.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

光学字符识别解析.docx

1、光学字符识别解析 光学字符识别系统摘要:本文设计了一系列的算法,完成了文字特征提取、文字定位等工作,并基于卷积神经网络(CNN)建立了字符识别模型,最后结合统计语言模型来提升效果,构建一个完整的OCR(光学字符识别)系统.在特征提取方面,抛弃了传统的“边缘检测+腐蚀膨胀”的方法,基于一些基本假设,通过灰度聚类、图层分解、去噪等步骤,得到了良好的文字特征,文字特征用于文字定位和模型中进行识别。在文字定位方面,通过邻近搜索的方法先整合特征碎片,得到了单行的文字特征,然后通过前后统计的方法将单行的文字切割为单个字符。在光学识别方面,基于CNN的深度学习模型建立单字识别模型,自行生成了140万的样本进

2、行训练,最终得到了一个良好的单字识别模型,训练正确率为99.7%,测试正确率为92.1%,即便增大图片噪音到15%,也能有90%左右的正确率.最后,为了提升效果,结合了语言模型,通过微信的数十万文本计算常见汉字的转移概率矩阵,由Viterbi算法动态规划,得到最优的识别组合。 经过测试,系统对印刷文字的识别有着不错的效果,可以作为电商、微信等平台的图片文字识别工具.关键字:CNN,特征提取,文字定位,单字识别1 研究背景和假设关于光学字符识别(Optical Character Recognition, OCR),是指将图像上的文字转化为计算机可编辑的文字内容,众多的研究人员对相关的技术研究已

3、久,也有不少成熟的OCR技术和产品产生,比如汉王OCR、ABBYY FineReader、Tesseract OCR等.值得一提的是,ABBYY FineReader不仅正确率高(包括对中文的识别),而且还能保留大部分的排版效果,是一个非常强大的OCR商业软件.然而,在诸多的OCR成品中,除了Tesseract OCR外,其他的都是闭源的、甚至是商业的软件,我们既无法将它们嵌入到我们自己的程序中,也无法对其进行改进. 开源的唯一选择是Google的Tesseract OCR,但它的识别效果不算很好,而且中文识别正确率偏低,有待进一步改进.综上所述,不管是为了学术研究还是实际应用,都有必要对OC

4、R技术进行探究和改进. 将完整的OCR系统分为“特征提取”、“文字定位”、“光学识别”、“语言模型”四个方面,逐步进行解决,最终完成了一个可用的、完整的、用于印刷文字的OCR系统. 该系统可以初步用于电商、微信等平台的图片文字识别,以判断上面信息的真伪.在本文中,假设图像的文字部分有以下的特征:1. 假设要识别的图像字体都是比较规范的印刷字体,如宋体、黑体、楷体、行书等;2. 文字与背景应该有比较明显的对比度;3. 在设计模型的时候,假设了图片文本是横向排版的;4. 文字的笔画应该有一定的宽度,不可以太细;5. 同一个文字的色彩应该最多是渐变的;6. 一般文字是通过比较密集的笔画成字的,并且很

5、多时候都具有一定的连通性.可以看到,这些特征都是常见的电商宣传海报等的常见特点,因此这些假设都是比较合理的.2 分析流程和实验平台 实验流程图本文的实验在CentOS 7 + Python 2.7的环境下完成. 其中,图像处理部分用到了下列拓展库:Numpy、SciPy、Pandas、Pillow;卷积神经网络模型用到了下述拓展库:Keras、Theano. 具体的实验配置后面会进一步谈到.3 特征提取作为OCR系统的核心,特征提取是希望找出图像中候选的文字区域特征,以便进行文字定位和文字识别. 模仿肉眼对图像与汉字的处理过程。传统的文本分割思路大多数是“边缘检测 + 腐蚀膨胀 + 联通区域检

6、测”,如论文1. 然而,在复杂背景的图像下进行边缘检测会导致背景部分的边缘过多(即噪音增加),同时文字部分的边缘信息则容易被忽略,从而导致效果变差. 如果在此时进行腐蚀或膨胀,那么将会使得背景区域跟文字区域粘合,效果进一步恶化.在本文中放弃了边缘检测和腐蚀膨胀,通过聚类、分割、去噪、池化等步骤,得到了比较良好的文字部分的特征,这些特征可以直接输入到文字识别模型中进行识别.由于每一部分结果都有相应的理论基础作为支撑,因此能够模型的可靠性得到保证. 特征提取流程图3.1图像的预处理首先将原始图片以灰度图像的形式读入,得到一个mn的灰度矩阵M,其中m,n是图像的长、宽. 这样读入比直接读入RGB彩色

7、图像维度更低,同时没有明显损失文字信息. 转换为灰度图事实上就是将原来的RGB图像的三个通道以下面的公式整合为一个通道: Y=0.299R+0.587G+0.114B (1)图像本身的尺寸不大,如果直接处理,则会导致文字笔画过小,容易被当成噪音处理掉,因此为了保证文字的笔画有一定的厚度,可以先将图片进行放大. 在实验中,一般将图像放大为原来的两倍就有比较好的效果了.不过,图像放大之后,文字与背景之间的区分度降低了. 这是因为图片放大时会使用插值算法来填补空缺部分的像素. 这时候需要相应地增大区分度. 经过测试,在大多数图片中,使用次数为2的“幂次变换”效果较好. 幂次变换为 (2)其中x代表矩

8、阵M中的元素,r为次数,在这里我们选取为2. 然后需要将结果映射到0,255区间: (3)其中Mmax,Mmin是矩阵M的最大值和最小值.3.2灰度聚类接着就对图像的色彩进行聚类. 聚类的有两个事实依据:1.灰度分辨率:肉眼的灰度分辨率大概为40,因此对于像素值254和255,在肉眼看来都只是白色;2.设计原则:根据一般的审美原则,在考虑海报设计、服装搭配等搭配的时候,一般要求在服装、海报等颜色搭配不超过三种颜色.更通俗地说,虽然灰度图片色阶范围是0,255,但能感觉到的整体的色调一般不多,因此,可以将相近的色阶归为一类,从而减少颜色分布,有效地降低噪音.事实上,聚类是根据图像的特点自适应地进

9、行多值化的过程,避免了传统的简单二值化所带来的信息损失.由于需要自动地确定聚类数目,因此传统的KMeans等聚类方法被抛弃了,而且经过测试,诸如MeanShift等可行的聚类方法又存在速度较慢等缺陷. 因此,自行设计了聚类方法,使用的是“核概率密度估计”的思路,通过求颜色密度极值的方式来聚类.核密度估计:经过预处理的图像,可以对每个色阶的出现次数进行统计,得到如图5的频率分布直方图: 图5:对预处理后的图像进行灰色阶统计可以看到,色阶的分布形成了几个比较突出的峰,换言之,存在一定的聚类趋势. 然而,直方图的统计结果是不连续的,一个平滑的结果更便于我们分析研究,结果也更有说服力. 将统计结果平滑

10、化的方法,就是核密度估计(kernel density estimation).核密度估计方法是一种非参数估计方法,由Rosenblatt和Parzen提出,在统计学理论和应用领域均受到高度的重视2. 当然,也可以简单地将它看成一种函数平滑方式. 我们根据大量的数据来估计某个值出现的概率(密度)时,事实上做的是如下估算: (4)其中K(x)称为核函数. 当h取为1,且K(x)取 (5)时,就是上述的直方图估计.K(x)这一项的含义很简单,它就是告诉我们在范围h内的xi都算入到x中去,至于怎么算,由K(xxi/h)给出. 可见,h的选择对结果的影响很大,h称之为带宽(bandwidth),它主要

11、影响结果的平滑性.如果K(x)是离散的,得到的结果还是离散的,但如果K(x)是光滑的,得到的结果也是比较光滑的. 一个常用的光滑函数核是高斯核: (6)所得到的估计也叫高斯核密度估计. 在这里,使用scott规则自适应地选取h,但需要手动指定一个平滑因子,在本文中,选取为0.2.对于示例图片,我们得到如图6的红色曲线的结果. 图6:频率分布的高斯核密度估计极大极小值分割:从图6中可以看出,图像确实存在着聚类趋势. 这表现为它有几个明显的极大值和极小值点,这里的极大值点位于x=10,57,97,123,154,极小值点位于25,71,121,142.因此聚类方法是:有多少个极大值点,就聚为多少类

12、,并且以极小值点作为类别之间的边界. 对于图3,可以将图像分层5层,逐层处理. 分层之后,每一层的形状如下图,其中白色是1,黑色是0.通过聚类将图像分为5个图层可见,由于“对比度”和“渐变性”假设,通过聚类确实可以将文字图层通过核密度估计的聚类方法分离开来. 而且,通过聚类分层的思路,无需对文字颜色作任何假定,即便是文字颜色跟背景颜色一致时,也可以获得有效检测.逐层识别:当图像有效地进行分层后,就可以根据前面的假设,进一步设计相应的模型,通过逐层处理的方式找出图像中的文字区域.连通性可以看到,每一层的图像是由若干连通区域组成的,文字本身是由笔画较为密集组成的,因此往往文字也能够组成一个连通区域

13、. 这里的连通定义为8邻接,即某个像素周围的8个像素都定义为邻接像素,邻接的像素则被定义为同一个连通区域.定义了连通区域后,每个图层被分割为若干个连通区域,也就是说,我们逐步地将原始图像进行分解,如图9. 图9 图像分解结构图抗腐蚀能力:将图像分解至连通区域这一粒度后,就不再细分了,下一步开始识别哪些区域是可能的文字区域. 这里要求文字具有一定的抗腐蚀能力. 因此先来定义腐蚀.腐蚀是一种图像上的形态学变换,一般针对于二值图像,对于二值图像中的非零像素(即取值为1的像素),如果它邻接的像素都为1,则保持不变,否则变为0,这里我们同样采用的是8邻接的定义. 可以看到,如果连通区域的边界线越长,那么

14、腐蚀运算对它的“伤害”就越大,反之,如果连通区域的边界线越短,那么腐蚀运算对它的“伤害”就越小.根据以上腐蚀的定义,可以给出一个对文字区域的要求:抗腐蚀要求文字所在的连通区域应当具有一定的抗腐蚀能力。一个面积较大的方形区域,它的抗腐蚀能力是很强的,因为它边界线很短,但这些区域明显不是文字区域,此外,抗腐蚀能力太弱也不可以,比如细长的线条,腐蚀之后可能就消失了,这些也不作为候选的文字区域,上一篇文章中分解后图层4的文字边界线就属于这一类型.这里可以定义一个抗腐蚀能力的指标:连通区域的抗腐蚀能力=该区域被腐蚀后的总面积/该区域被腐蚀前的总面积 (7)经过测试,文字区域的抗腐蚀能力大概在0.1,0.

15、9这个区间中.经过抗腐蚀能力筛选分解的5个图层,只保留抗腐蚀能力在0.1,0.9这个区间中的连通区域。池化操作:到现在为止,得到了5个特征层,虽然肉眼可以看到,文字主要集中在第5个特征层. 但是,对于一般的图片,文字可能分布在多个特征层,因此需要对特征层进行整合. 首先将5个特征层进行叠加,得到一幅整体的图像特征(称为叠加特征). 这样的图像特征可以当作最后的特征输出,但并不是最好的方法. 某个区域内的主要文字特征应该已经集中分布在某个特征层中,而不是分散在所有的特征层. 因此,得到叠加特征后,使用类似“最大值池化”的方式整合特征,步骤如下:1. 直接叠加特征,然后对叠加特征划分连通区域;2.

16、 检测每个连通区域的主要贡献是哪个特征层,该连通区域就只保留这个特征层的来源.经过这样的池化操作后,得到的最终特征结果如图11. 图11 池化后的特征后期处理:对于演示的这幅图像,经过上述操作后,得到的特征图11已经不用再做什么处理了. 然而,对于一般的图片,还有可能出现一些没处理好的区域,这时候需要在前述结果的基础上进一步排除. 排除过程主要有两个步骤,一个是低/高密度区排除,另外则是孤立区排除.密度排除一种明显不是文字区域的连通区域是低密度区,一个典型的例子就是由表格线组成的连通区域,这样的区域范围较大,但点很少,也就是密度很低,这种低密度区可以排除. 首先我们来定义连通区域密度和低密度区

17、:连通区域密度从一个连通区域出发,可以找到该连通区域的水平外切矩形,该区域的密度定义为连通区域密度=连通区域的面积外切矩形的面积原图像总面积外切矩形的面积(8)低密度区如果一个连通区域的密度小于16,那么这个连通区域定义为低密度区.直觉上的定义应该是连通区域的面积外切矩形的面积,但这里多了一个因子原图像总面积外切矩形的面积,目的是把面积大小这个影响因素加进去,因为文字一般有明显的边界,容易被分割开来,所以一般来说面积越大的区域越不可能是文本区域. 这里的参数16是经验值.低密度区排除是排除表格等线条较多的非文字区域的有效方法. 类似地,范围较大的高密度区也是一类需要排除的区域. 有了低密度区之

18、后,就很容易定义高密度区了:高密度区定义*如果一个连通区域以水平外切矩形反转后的区域是一个低密度区,那个这个连通区域定义为高密度区.这个定义是很自然的,但是却有一定的不合理性. 比如“一”字,是一个水平的矩形,于是翻转后的密度为0,于是这个“一”字就被排除了,这是不合理的. 解决这个问题的一个方案是:高密度区定义当且仅当下面条件满足时才被定义为高密度区:1+外切矩形的面积连通区域的面积外切矩形的面积原图像总面积外切矩形的面积16(9)这是在原来定义的基础上加上了1,防止了翻转后密度为0的情况.还有另外一种失效的情况,就是假如输入图片是单字图片,那么只有一个连通区域,且原图像总面积外切矩形的面积

19、接近于1,因此它就被判为低密度区,这样就排除了单字.这种情形确实比较难兼顾.一个可行的解决办法是通过人工指定是单字模式、单行模型还是整体图片模式,Google的Tesseract OCR也提供了这样的选项.孤立区排除的出发点是:文字之间、笔画之间应该是比较紧凑的,如果一个区域明显地孤立于其他区域,那么这个区域很可能不是文字区域. 也就是说,可以把孤立区给排除掉. 首先我们定义孤立区的概念:孤立区从一个连通区域出发,可以找到该连通区域的水平外切矩形,将这个矩形中心对称地向外扩张为原来的9倍(长、宽变为原来的3倍,如左图),扩展后的区域如果没有包含其他的连通区域,那么原来的连通区域称为孤立区.在大

20、多数情况,孤立区排除是一种非常简单有效的去噪方法,因为很多噪音点都是孤立区. 但是孤立区排除是会存在一定风险的. 如果一幅图像只有一个文字,构成了唯一一个连通区域,那么这个连通区域就是孤立的,于是这个文字就被排除了. 因此,要对孤立区加上更多的限制,一个可选的额外限制是:被排除的孤立区的占比连通区域的面积外切矩形的面积要大于0.75(这个值源于圆与外切正方形的面积之比/4).4 文字定位4.1 邻近搜索对提取的特征图进行连通区域搜索,得到的每个连通区域视为一个汉字. 这对于大多数汉字来说是适用,但是对于一些比较简单的汉字却不适用,比如“小”、“旦”、“八”、“元”这些字,由于不具有连通性,所以

21、就被分拆开了,如图13. 因此需要通过邻近搜索算法,来整合可能成字的区域,得到单行的文本区域.图13 直接搜索连通区域,会把诸如“元”之类的字分拆开邻近搜索的目的是进行膨胀,以把可能成字的区域“粘合”起来. 如果不进行搜索就膨胀,那么膨胀是各个方向同时进行的,这样有可能把上下行都粘合起来了. 因此,我们只允许区域向单一的一个方向膨胀. 正是要通过搜索邻近区域来确定膨胀方向(上、下、左、右):邻近搜索:从一个连通区域出发,可以找到该连通区域的水平外切矩形,将连通区域扩展到整个矩形. 当该区域与最邻近区域的距离小于一定范围时,考虑这个矩形的膨胀,膨胀的方向是最邻近区域的所在方向.既然涉及到了邻近,

22、那么就需要有距离的概念. 下面给出一个比较合理的距离的定义.距离图14 两个示例区域如上图,通过左上角坐标(x,y)和右下角坐标(z,w)就可以确定一个矩形区域,这里的坐标是以左上角为原点来算的. 这个区域的中心是. 对于图中的两个区域S和S,可以计算它们的中心向量差 (10)如果直接使用作为距离是不合理的,因为这里的邻近应该是按边界来算,而不是中心点. 因此,需要减去区域的长度: (11)距离定义为 (12)至于方向,由的幅角进行判断即可.然而,按照前面的“邻近搜索*”方法,容易把上下两行文字粘合起来,因此,基于横向排版假设,更好的方法是只允许横向膨胀:邻近搜索从一个连通区域出发,可以找到该

23、连通区域的水平外切矩形,将连通区域扩展到整个矩形. 当该区域与最邻近区域的距离小于一定范围时,考虑这个矩形的膨胀,膨胀的方向是最邻近区域的所在方向,当且仅当所在方向是水平的,才执行膨胀操作.有了距离之后,就可以计算每两个连通区域之间的距离,然后找出最邻近的区域. 将每个区域向它最邻近的区域所在的方向扩大4分之一,这样邻近的区域就有可能融合为一个新的区域,从而把碎片整合.实验表明,邻近搜索的思路能够有效地整合文字碎片,结果如图15. 图15 通过邻近搜索后,圈出的文字区域4.2 文本分割均匀切割:基于方块汉字的假设,事实上最简单的切割方法是均匀切割,也就是说不加任何判断,直接按照高度来将单行文本

24、切割为一个个的正方形图片. 这种思路可以应对大部分的单行文本,如下图上.均匀切割成单字当然,均匀切割的弊端也是很明显的. 大多数汉字都是方块汉字,但多数英语和数字都不是,因此如果出现中英文混排的时候,均匀切割就失效了,如上图下.统计切割从图15中可以看出,经过前面的操作,字与字都被很好地分离开了. 因此,另外一种比较简单的思路是对单行的文字图片进行垂直方向的求和,和为0的所在的列就是被切割的的列.用这种统计的思路可以很好地解决中英文混排的单行文字图片分割的问题,但是它也存在一定的弊端. 最明显的就是诸如“小”、“的”等字就被切割开为两部分了.前后比较一个更好的思路是结合前面两部分结果,通过比较

25、前后两部分区域是否组成方形来确定是否切割. 具体步骤是:1. 通过统计求和的思路,得出候选的切割线;2. 如果该候选切割线到左右两条候选切割线的距离之和超过宽长度的1.2倍,那么该候选切割线确定为切割线;3. 如果得到的区域是一个明显的长条矩形,并且没办法按照上面两个步骤切割,那个就均匀切割.这三个步骤比较简单,基于两个假设:1、数字、英文字符的底与高之比大于60%;2、汉字的底与高之比低于1.2. 经过测试,该算法可以很好地用于前面步骤所提取的图片文本特征的分割.5 文字识别(光学识别)5.1 模型选择在模型方面,选择了深度学习中的卷积神经网络模型,通过多层卷积神经网络,构建了单字的识别模型

26、.卷积神经网络是人工神经网络的一种,已成为当前图像识别领域的主流模型. 它通过局部感知野和权值共享方法,降低了网络模型的复杂度,减少了权值的数量,在网络结构上更类似于生物神经网络,这也预示着它必然具有更优秀的效果. 事实上,选择卷积神经网络的主要原因有:1.对原始图像自动提取特征:卷积神经网络模型可以直接将原始图像进行输入,免除了传统模型的人工提取特征这一比较困难的核心部分;2.比传统模型更高的精度:比如在MNIST手写数字识别任务中,可以达到99%以上的精度,这远高于传统模型的精度;3.比传统模型更好的泛化能力:这意味着图像本身的形变(伸缩、旋转)以及图像上的噪音对识别的结果影响不明显,这正

27、是一个良好的OCR系统所必需的.训练数据为了训练一个良好的模型,必须有足够多的训练数据. 幸运的是,虽然没有现成的数据可以用,但是由于只是做印刷字体的识别,因此,可以使用计算机自动生成一批训练数据. 通过以下步骤,构建了一批比较充分的训练数据:1.更多细节:由于汉字的结构比数字和英文都要复杂,因此,为了体现更多的细节信息,我使用4848的灰度图像构建样本,作为模型的输入;2.常见汉字:为了保证模型的实用性,从网络爬取了数十万篇微信公众平台上的文章,然后合并起来统计各自的频率,最后选出了频率最高的3000个汉字(在本文中我们只考虑简体字),并且加上26个字母(大小写)和10个数字,共3062字作

28、为模型的输出;3.数据充分:人工收集了45种不同的字体,从正规的宋体、黑体、楷体到不规范的手写体都有,基本上能够比较全面地覆盖各种印刷字体;4.人工噪音:每种字体都构建了5种不同字号(46到50)的图片,每种字号2张,并且为了增强模型的泛化能力,将每个样本都加上5%的随机噪音.经过上述步骤,我们一共生成了30624552=1377900个样本作为训练样本,可见数据量是足够充分的.在模型结构方面,有一些前人的工作可以参考的. 一个类似的例子是MNIST手写数字的识别它往往作为一个新的图像识别模型的“试金石”是要将六万多张大小为2828像素的手写数字图像进行识别,这个案例跟我们实现汉字的识别系统具

29、有一定的相似性,因此在模型的结构方面可以借鉴. 一个常见的通过卷积神经网络对MNIST手写数字进行识别的模型结构如图 图17 一个用作MNIST手写数字识别的网络结构 图18 本文用来识别印刷汉字的网络结构经过充分训练后,如图17的网络结构可以达到99%以上的精确度,说明这种结构确实是可取的. 但是很显然,手写数字不过只有10个,而常用汉字具有数千个,在本文的分类任务中,就共有3062个目标. 也就是说,汉字具有更为复杂和精细的结构,因此模型的各方面都要进行调整. 首先,在模型的输入方面,我们已经将图像的大小从28x28提高为48x48,这能保留更多的细节,其次,在模型结构上要复杂化调整,包括

30、:增加卷积核的数目,增加隐藏节点的数目、调整权重等. 最终网络结构如图18.在激活函数方面,选取了RuLe函数为激活函数 (13)实验表明,它相比于传统的sigmoid、tanh等激活函数,能够大大地提升模型效果;在防止过拟合方面,使用了深度学习网络中最常用的Dropout方式5,即随机地让部分神经元休眠,这等价于同时训练多个不同网络,从而防止了部分节点可能出现的过拟合现象.需要指出的是,在模型结构方面,事实上做了大量的筛选工作.比如隐藏层神经元的数目,就耗费了若干天时间,尝试了512、1024、2048、4096、8192等数目,最终得到1024这个比较适合的值.数目太多则导致模型太庞大,而

31、且容易过拟合;太少则容易欠拟合,效果不好.测试发现,从512到1024,效果有明显提升;而再增加节点效果没有明显提升,有时还会有明显下降.模型实现:模型在操作系统为CentOS 7的服务器(24核CPU+96G内存+GTX960显卡)下完成,使用Python 2.7编写代码,并且使用Keras作为深度学习库,用Theano作为GPU加速库(Tensorflow一直提示内存溢出,配置不成功. ).在训练算法方面,使用了Adam优化方法进行训练,batch size为1024,迭代30次,迭代一次大约需要700秒.如果出现形近字时,应该是高频字更有可能,最典型的例子就是“日”、“曰”了,这两个的特征是很相似的,但是“日”出现的频率远高于“曰”,因此,应当优先考虑“日”. 因此,在训练模型的时候,还对模型最终的损失函数进行了调整,使得高频字的权重更大,这样能够提升模型的预测性能.经过多次调试,最终得到了一个比较可靠的模型. 模型的收敛过程如下图. 训练曲线图:Loss(损失函数)和Acc(精度)模型检验:将从以下三个方面对模型进行检验. 实验结果表明,对于单字的识别效果,我们的模型优于Google开源的OCR系统Tesseract.训练集检验最终训练出来的模型,在训练集的检验报告如表1.从表1可以看到,即便在加入了随机噪音的样本中,模型的正确率仍然

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1