重要开源!CNN-RNN-CTC 实现手写汉字识别

640?wx_fmt=gif

向AI转型的程序员都关注了这个号👇👇👇

机器学习AI算法工程  公众号: datayx



手写汉字脱机识别的困难

手写汉字脱机识别跟印刷汉字识别系统同属光符阅读器OCR的范畴。它们的识别对象都是二维的方块汉字,工作原理相同,系统构成也基本相似,但手写汉字脱机识别问题更多,困难更大。

手写汉字脱机识别为什么那么困难呢?我们认为:最根本的原因是手写汉字的字形变化太大!我国有一句俗语:“人心不同,各如其面”。这句话对手写汉字的字形也完全适用。可以说,不同的人书写的字是千差万别,各不相同,即使是同一个人所写的同一个字,往往也因时、因地而有明显的变化。我们知道,脱机汉字识别的对象是方块汉字的图形,用于识别的特征是根据汉字图形提取的,因而字形变化对识别结果具有决定性的影响。


手写汉字的一些特点:

①基本笔画变化。印刷体汉字的笔画基本上是横平竖直,折笔(乛、乙、く)的拐角大都是尖锐的钝角、锐角或直角,因而折笔基本上可以看做是由折线段所组成。我国手写汉字的笔画大都不具备上述的特点:横不平、竖不直,直笔画变弯,折笔的拐角变为圆弧,等等,例如,“品”字的三个“口”变成三个圆圈,“阝”变成“”;有时把较短的笔画变为“点”,有时则在起笔或折笔的拐角处增加额外的“笔锋”等。

②笔画该连的不连,不该连的相连,这种情况十分普遍。它不是由于干扰等客观原因而产生,主要是由于书写者的习惯而造成的。应,笔画的长短及部件的大小也发生变化。以图4.l(a)的钢笔字帖为例,“担、打、报、择”几个字的偏旁“扌”,其竖笔长短不一,“阳、队、陈、陶”的部首“阝”也大小不同,它们在整字中的位置就有差异。方块汉字字形是一种艺术,书写时要求笔画及部件的形态和相互关系,尽量彼此协调,使整字字形结构匀称美观,因此上述笔画与部件的大小、位置变化,客观上是不可避免的。此外,由于书写者文化水平、习惯等的不同,他们所写的字差别就更大。样本属于比较工整的字样,但字形变化仍相当明显。这说明即使是同一个人写的字也有一定的差异。笔画长短、部首大小及位置等的变化,使我们难以仿照印刷体汉字识别的办法事先确定它们的位置,按规定区域提取笔画或部首特征。

a)一种钢笔字帖的字样;

(b)我国IAAS-4M手写标准汉字库字样;

(c)一般的手写字字样

上面讨论的几种手写字样大体上都是比较工整的楷书,它们字形尚有明显的差别,更何况日常见到的各种手稿或书信中的字,其差别会更大。我国主要的手写字体有楷书、行书和草书三种,如图4.2所示。可以看出,同一个字的笔画和字形几乎迥然不同,相差甚远。草书的字甚至文化较高的人有时也不认识,要求计算机能自动识别这样的手写字显然是不可能,也是不合理的。

因此,对用于计算机自动识别的手写汉字应有所要求。具体地说,对构成汉字的笔画及其相互关系,应有必要的规定和限制,不能无约束地随意书写。这种字叫做“限制性手写汉字”。显然,这种限制不能太严,规定不能过于复杂,否则用户难以适应,识别系统也不容易推广应用。另一方面,对书写的要求也不宜太宽,否则难以使系统具有足够高识别率。这是一个不容易解决的矛盾。通常对书写的基本要求有如下几点:

①书写工整,笔画横平竖直,粗细均匀;

②不同笔画不连笔书写,联机识别时,应按常规笔顺书写。

③每个字符应写在规定方格内(通常为6mm×6mm~12mm×12mm),字符大小尽量一致,笔画不应超出方格。

上述要求并不复杂,但实际上很难完全做到,即使是文化水平较高的人,除非曾经受过书写工程字的训练,否则也不易按上述规定自始至终地书写。这就是手写字符识别的困难所在。





开源项目

CRNN(CNN+RNN+CTCLoss)


完整代码 以及预训练模型 获取方式:

关注微信公众号 datayx  然后回复 汉字识别 即可获取。


如何去测试

1.加载模型,将模型放入./model/中


2.向test_img_list中添加需要测试的图片列表

test_img_list = ['/home/tony/ocr/test_data/00023.jpg'
]


3.运行模型

python3 test_crnn.py

如何去train

1.处理train 数据集

python3 ./utils/make_data.py

2.训练网络

python3 train.py   


效果展示


640?wx_fmt=png





阅读过本文的人还看了以下:




















不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

640?wx_fmt=jpeg

长按图片,识别二维码,点关注


640?wx_fmt=png

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CNN-RNN-CTC是一种用于语音识别的深度学习模型。这个模型结合了卷积神经网络(CNN),循环神经网络(RNN)和连续标签分类(CTC)的算法。 首先,卷积神经网络(CNN)被用来从原始语音信号中提取特征。CNN通过一系列卷积和池化操作,可以有效地捕捉到语音信号中的时频特征。这些特征在后续的处理中起到了很重要的作用。 其次,循环神经网络(RNN)在特征提取后的序列数据上进行处理。RNN具有记忆功能,可以处理变长的序列数据。这使得RNN能够更好地建模语音信号的时序关系,从而提高语音识别的性能。 最后,连续标签分类(CTC)是一种解决无对齐标签序列训练问题的方法。在语音识别中,输入序列和输出序列之间的对齐是未知的,这使得传统的监督学习方法难以应用。CTC通过引入一个空白标签和重复标签,可以将输入序列的输出序列映射到最有可能的标签序列。通过优化CTC损失函数,我们可以训练模型来进行语音识别,并且不需要进行手工的对齐。 总而言之,CNN-RNN-CTC模型将卷积神经网络的特征提取能力,循环神经网络的序列建模能力和连续标签分类的对齐能力相结合,能够有效地解决语音识别中的训练问题,提高语音识别的性能。 ### 回答2: CNN-RNN-CTC是一种常用的深度学习模型,适用于序列标注任务,如语音识别或文本识别。该模型结合了卷积神经网络(CNN)、循环神经网络(RNN)和连续条件随机场(CTC)的优势。 首先,CNN经常被用于图像处理任务,能够有效提取图像特征。在CNN-RNN-CTC模型中,CNN用来对输入的声学特征或图像进行特征提取,将其转化为更适合序列任务的形式。 其次,RNN是一种能够处理序列数据的神经网络,能够捕捉到数据的时间依赖关系。在CNN-RNN-CTC模型中,RNN用来对CNN提取的特征进行进一步处理,从而得到更加准确的序列标注结果。 最后,CTC是一种解决序列对齐问题的方法。在CNN-RNN-CTC模型中,CTC用来实现无对齐标签的序列学习,可以自动进行对齐和标注的训练。它中的条件随机场层可以根据输入序列和标签序列之间的对应关系,计算出最可能的标签序列。 综上所述,CNN-RNN-CTC模型能够利用CNN提取输入的特征,RNN处理序列数据,CTC解决标签对齐问题,从而有效地解决序列标注任务。在语音识别或文本识别等方面有较好的应用效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值