注:若有冒犯,请问候留言,会尽快删除。
文章目录
- 注:若有冒犯,请问候留言,会尽快删除。
- 背景介绍
- OCR基本概念介绍
- 基础实现算法
- 深度学习方法
- 1. CNN(卷积神经网络)
- 2. RNN(循环神经网络) & LSTM(长短期记忆网络)
- 3. Attention机制
- 顶尖算法组合拳:CRNN + CTC
- 未来发展:Transformer登场(Vision Transformer,ViT)
- 总结
- END
背景介绍
- 知乎上看到一篇写的不错的文章,介绍了OCR 的基本概念和历史实现思路。
- 在此进行笔记摘录,笔记性质,无意冒犯。
- 原文链接:https://www.zhihu.com/question/366685668/answer/3608456631
OCR基本概念介绍
- OCR(Optical Character Recognition),光学字符识别。
- 目的:用计算机看图识字。
- 这活儿听上去不难,小时候上课抄作业咱不也靠眼睛一扫一抄吗?不过计算机就得靠算法来做这个活儿。(原作者描述的很形象,哈哈)
基础实现算法
- 最早的OCR算法基本都是基于图像处理的。(预处理+模板匹配)
- 边缘检测、灰度处理。
- 然后配上模式识别算法,比如模板匹配、特征提取啥的。
- 你可以理解成就是把字形切成一块一块的,然后跟它数据库里存的样本对比,看看哪个像,哪个不像。
- 这些传统的算法好处是速度快,资源占用少。
- 但缺点也明显:一碰到字歪了、字模糊了、或者字形不规则了,它就开始抓瞎,结果基本上就是“一看就是字,但就是不认识”。所以这玩意儿在应付像咱们手机拍的这种歪歪扭扭的图像时,基本等于玩儿完。
深度学习方法
1. CNN(卷积神经网络)
- CNN算是深度学习里的一员猛将了,大家都用它来做图像处理,OCR当然也不例外。CNN能干的活就是搞图像特征提取,它能自动从图像里找出那些有用的信息,比如边缘、线条、曲线啥的,再经过几层卷积,把这些信息逐层抽象,最后变成对字符的理解。
- 就像你拍一张图,CNN能从图像的不同部分提取到不同的特征,然后把这些特征汇总,搞出个“这玩意儿是个字”的结论来。
2. RNN(循环神经网络) & LSTM(长短期记忆网络)
- 光提取特征还不够,因为OCR不只是识别单个字符,还得考虑字符的顺序,这时候RNN就上场了。RNN擅长处理序列数据,比如文字、语音啥的,它能记住前面的信息,用来影响后面的识别。这就像你在看一段文字时,前后的字有关系嘛。
- LSTM是RNN的加强版,主要解决RNN容易忘事儿的问题。用了LSTM后,网络就能记住更长的上下文信息,识别结果更准了。
3. Attention机制
- 最后,还有个神器叫Attention机制,这玩意儿能让模型自动关注图像里那些重要的部分,比如一张图里哪儿有字,它就盯着哪儿看,不重要的地方一笔带过。这就像你在开会时,重点内容多看两眼,废话直接略过。
- Attention机制的加入让OCR模型在处理复杂图像时,识别效率和准确度都有了质的飞跃。
顶尖算法组合拳:CRNN + CTC
- 现在说说最顶尖的OCR算法,那肯定少不了CRNN(卷积循环神经网络)+ CTC(连接时序分类)。这套组合拳可是当前OCR领域的标杆,很多大厂的OCR引擎背后都是它。
- CRNN结合了CNN和RNN的优点,前面用CNN提取图像特征,后面用RNN处理字符序列,简直就是天作之合。而CTC呢,专门处理序列对齐的问题,因为有时候识别结果跟输入长度对不上,这时候CTC就能帮助网络在不需要手工对齐的情况下,搞定文字识别。
你用 OCR时,哪怕图片模糊不清或者字儿东倒西歪,这套算法组合依然能搞出个准儿来。
未来发展:Transformer登场(Vision Transformer,ViT)
- 不过话说回来,科技是不断进步的。现在Transformer架构
- (对,你没看错,就是那个火遍NLP的Transformer)也开始在OCR领域展露头角。比如Vision Transformer(ViT)就是用来处理图像的Transformer变种,这玩意儿比传统的CNN + RNN组合更牛,可以更好地处理复杂图像和长序列。
- 未来几年,估计Transformer架构会成为OCR的新宠,反正现在大厂都在疯狂搞这套东西,谁家搞得快,搞得好,谁就能在OCR领域继续称王。
总结
- 现在最顶尖的OCR算法,一定是深度学习的天下,像CRNN + CTC这种组合是目前的主流,但未来Transformer架构肯定会慢慢抢占市场。