• 大老板给我定的方向是文字识别。所以在回所之前先把基础知识看一下,相当于综述~
  • 我的方向与目前的文字识别区别在于,目前的文字识别输入主要是自然场景中的图像,从图像进行文字检测再继而文字识别;而我要做的输入是通过手写笔在特殊笔记本上书写后采集到的坐标点。但是还是先从目前的文字识别入手吧~
  • 在这个过程中目的有两个。首先是了解文字识别的步骤与经典算法,其次是学会使用深度学习框架。

参考文献:

  1. OCR文字识别用的是什么算法?
  2. 文字识别方法整理
  3. 一文读懂CRNN+CTC文字识别
  4. 场景文字检测—CTPN原理与实现
  5. 完全解析RNN, Seq2Seq, Attention注意力机制
  6. 【AI实战】手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法)

一、了解OCR

1. 单独文字识别:把OCR过程类比到模式识别过程

OCR是模式识别的一个领域,所以整体过程也就是模式识别的过程。

  1. 预处理:对包含文字的图像进行处理以便后续进行特征提取、学习。这个过程的主要目的是减少图像中的无用信息,以便方便后面的处理。在这个步骤通常有:灰度化(如果是彩色图像)、降噪、二值化、字符切分以及归一化这些子步骤。经过二值化后,图像只剩下两种颜色,即黑和白,其中一个是图像背景,另一个颜色就是要识别的文字了。降噪在这个阶段非常重要,降噪算法的好坏对特征提取的影响很大。字符切分则是将图像中的文字分割成单个文字——识别的时候是一个字一个字识别的。如果文字行有倾斜的话往往还要进行倾斜校正。归一化则是将单个的文字图像规整到同样的尺寸,在同一个规格下,才能应用统一的算法。
  2. 特征提取和降维特征是用来识别文字的关键信息,每个不同的文字都能通过特征来和其他文字进行区分。对于数字和英文字母来说,这个特征提取是比较容易的,因为数字只有10个,英文字母只有52个,都是小字符集。对于汉字来说,特征提取比较困难,因为首先汉字是大字符集,国标中光是最常用的第一级汉字就有3755个;第二个汉字结构复杂,形近字多。在确定了使用何种特征后,视情况而定,还有可能要进行特征降维,这种情况就是如果特征的维数太高(特征一般用一个向量表示,维数即该向量的分量数),分类器的效率会受到很大的影响,为了提高识别速率,往往就要进行降维,这个过程也很重要,既要降低维数吧,又得使得减少维数后的特征向量还保留了足够的信息量(以区分不同的文字)
  3. 分类器设计、训练和实际识别:分类器是用来进行识别的,就是对于第二步,你对一个文字图像,提取出特征给,丢给分类器,分类器就对其进行分类,告诉你这个特征该识别成哪个文字。在进行实际识别前,往往还要对分类器进行训练,这是一个监督学习的案例。成熟的分类器也很多,什么svm,kn,神经网络etc。
  4. 后处理:后处理是用来对分类结果进行优化的。第一个,分类器的分类有时候不一定是完全正确的(实际上也做不到完全正确),比如对汉字的识别,由于汉字中形近字的存在,很容易将一个字识别成其形近字。后处理中可以去解决这个问题,比如通过语言模型来进行校正——如果分类器将“在哪里”识别成“存哪里”,通过语言模型会发现“存哪里”是错误的,然后进行校正。第二个,OCR的识别图像往往是有大量文字的,而且这些文字存在排版、字体大小等复杂情况,后处理中可以尝试去对识别结果进行格式化,比如按照图像中的排版排列什么的,举个栗子,一张图像,其左半部分的文字和右半部分的文字毫无关系,而在字符切分过程中,往往是按行切分的,那么识别结果中左半部分的第一行后面会跟着右半部分的第一行诸如此类。
2. 传统文字识别:文字检测、文字识别

General OCR一般包含两步:

  • detection --> 找到包含文字的区域(proposals)
  • classification --> 识别区域(proposals)中的文字

文本检测(Text Detection):定位图片中的文本区域,而Detection定位精度直接影响后续Recognition结果。

目前已经有很多文字检测方法,包括:EAST/CTPN/SegLink/PixelLink/TextBoxes/TextBoxes++/TextSnake/MSR/…

文字识别(Text Recognition):识别水平文本行,一般用CRNN或Seq2Seq两种方法。

  • CRNN:CNN+RNN+CTC
  • CNN+Seq2Seq+Attention
3. 端到端的文字识别

在之前介绍的算法中,文字检测和文字识别是分为两个网络分别完成的,所以希望将OCR中的Detection+ Recognition合并成一个End2End网络


二、文本检测算法:CTPN

CTPN是在ECCV 2016提出的一种文字检测算法。CTPN结合CNN与双向LSTM深度网络,能有效的检测出复杂场景的横向分布的文字,效果如图1,是目前比较好的文字检测算法。CTPN是从Faster RCNN改进而来。

Q:什么是LSTM
为了实现对不定长文字的识别,就需要有一种能力更强的模型,该模型具有一定的记忆能力,能够按时序依次处理任意长度的信息,这种模型就是“循环神经网络”(Recurrent Neural Networks,简称RNN)。

LSTM(Long Short Term Memory,长短期记忆网络)是一种特殊结构的RNN(循环神经网络),用于解决RNN的长期依赖问题,也即随着输入RNN网络的信息的时间间隔不断增大,普通RNN就会出现“梯度消失”或“梯度爆炸”的现象,这就是RNN的长期依赖问题,而引入LSTM即可以解决这个问题。LSTM单元由**输入门(Input Gate)、遗忘门(Forget Gate)和输出门(Output Gate)**组成。


三、文本识别算法:CRNN+CTC

CRNN+CTC = CNN + RNN+ LSTM + CTC

  • 首先CNN提取图像卷积特征
  • 然后LSTM进一步提取图像卷积特征中的序列特征
  • 最后引入CTC解决训练时字符无法对齐的问题

基于RNN文字识别2种基本算法框架:

Q:什么是CTC
CTC(Connectionist Temporal Classifier,联接时间分类器),主要用于解决输入特征与输出标签的对齐问题。例如下图,由于文字的不同间隔或变形等问题,导致同个文字有不同的表现形式,但实际上都是同一个文字。在识别时会将输入图像分块后再去识别,得出每块属于某个字符的概率(无法识别的标记为特殊字符”-”),如下图:

由于字符变形等原因,导致对输入图像分块识别时,相邻块可能会识别为同个结果,字符重复出现。因此,通过CTC来解决对齐问题,模型训练后,对结果中去掉间隔字符、去掉重复字符(如果同个字符连续出现,则表示只有1个字符,如果中间有间隔字符,则表示该字符出现多次),如下图所示:

文字识别(输入为自然场景中的图像)相关推荐

  1. 文字识别技术在内容安全中的应用

    导读:文字在日常生活中发挥着重要的作用,甚至在考古发现中文字也作为识别文明的重要标志.特别是在当前短视频和内容爆炸的时代,文字广泛应用于人们观点的表达和传播以及商品营销等各个领域.这些内容中肯定会存在 ...

  2. 聚类技术---复杂网络社团检测_自然场景中交通标志牌检测~文末送书

    导读:近年来,交通标志牌检测技术已经成为智能驾驶公交车辆视觉导航系统和计算机视觉领域的热点之一. 本文为6月份刚出版的新书<智能驾驶技术:路径规划与导航控制>节选,探讨基于视觉协同显著性的 ...

  3. 自然场景中交通标志牌检测~文末送书

    导读:近年来,交通标志牌检测技术已经成为智能驾驶公交车辆视觉导航系统和计算机视觉领域的热点之一. 本文为6月份刚出版的新书<智能驾驶技术:路径规划与导航控制>节选,探讨基于视觉协同显著性的 ...

  4. C语言 提取软件文字,使用OCR文字识别软件如何将图中文字识别提取出来

    有时候我们上网看见了一些文字图片,上面的内容自己很喜欢,想要将文字保存下来,但是大家都知道图片上面的文字是不可以直接进行复制粘贴的,那这时候就需要识别提取图中文字了,具体怎样去操作呢?下面小编将在文字 ...

  5. 智能分析网关AI安全帽识别技术在工地场景中的应用及意义

    安全帽是建筑业.制造业等工业生产中重要的劳保工具,应用十分广泛且十分重要.但是在实际场景中,比如建筑工地或工厂流水线上,依然有很多工人忽视安全帽的重要性,同时,由于企业的监督不到位,因未佩戴安全帽而引 ...

  6. pytorch 解决图片文字识别, 输入图片的代码

    为了使用 PyTorch 解决图像文字识别问题,首先需要导入 PyTorch 相关的库和加载模型. 具体代码如下: import torch import torchvision.transforms ...

  7. python场景文字识别_针对复杂场景的 OCR 文本识别,推荐一个Python 库!

    大家好,我是 zeroing~ 1,前言 之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考 介绍一个Python 包 ,几行代码可实 ...

  8. 快递运单号与手机号识别在快递驿站场景中应用

    快递已成为人们日常生活离不开的一部分,也是商业服务重要的基础设施,跻身新经济的代表产业之一.2019年,我国快递业务量超635亿件,已经是10年前的27倍.但快递行业在高速发展的同时,也面临着巨大的末 ...

  9. swt text设置文本宽_应用笔画宽度变换(SWT)来检测自然场景中的文本

    Introduction: 应用背景:是盲人辅助系统,城市环境中的机器导航等计算机视觉系统应用的重要一步.获取文本能够为许多视觉任务提供上下文的线索,并且,图像检索算法的性能很大部分都依赖于对应的文本 ...

最新文章

  1. bzoj 3028 生成函数
  2. vivo不小心把内部自研技术方案写进了“年终总结”,我看了直接好家伙
  3. 组播穿越MPLS ×××+SSM
  4. 数学建模题目及论文_数学与运用数学专业论文题目帮助
  5. ActiveMQ目录结构
  6. K8s卸载清理flannel插件清理
  7. faster rcnn学习之rpn训练全过程
  8. php sqlsrv 分页,Php+SqlServer如何实现分页显示
  9. RegularExpressions(2) RegularExpressions 支持的正则表达式语法
  10. JavaScript数据结构——散列表(Hash table,也叫哈希表)
  11. 详解tomcat的连接数与线程池--转载
  12. 油猴插件官网下载及Userscript+安装教程
  13. 铁塔基站三相有功电能无线计量仪表外置互感器-安科瑞 顾月
  14. 会计行业最新的法律和准则
  15. OK6410内存及启动流程
  16. 如何区分光纤跳线的颜色?
  17. 微信语音(录音,上传,下载,播放,停止)
  18. 3dmax顶点动画导入unity_从3dmax如何导入物体到unity3d
  19. Navicat 中mysql查询使用占位符
  20. 【patch】CNN中 patch 是什么?patch 在CNN学习训练中是怎么起作用的?

热门文章

  1. 魔法诗~~~一套基于Vue开发的实用、高端、炫酷的响应式前端网页!!!
  2. 51单片机 | 外部中断实验
  3. C·cJSON库函数--cJSON_GetObjectItem
  4. vue项目不被百度收录怎么办、seo优化问题
  5. 一文读懂设计模式--策略模式
  6. 什么是OpCode?
  7. 嵌入式软件工程师—成长笔记#01
  8. 模糊查询的hql语句_hql语句拼接模糊查询
  9. Spring事务管理一:Spring事务管理的优点
  10. 计算机网络-传输层:TCP协议