OCR文字识别技术总结
Posted GoAI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OCR文字识别技术总结相关的知识,希望对你有一定的参考价值。
📝导读:在上一章中,我们对OCR的概念、发展历程等做了详细解读,并介绍了几种OCR识别方法,本章将继续针对OCR文字识别进行详细讨论,通过不同的OCR分类识别数据集进一步介绍常用的几种OCR算法,对比传统OCR与深度学习OCR。首先是传统OCR识别方法,下面内容将从我国OCR研究历程开始展开。这篇文章将对OCR技术进行分类描述,
本系列目录:
1️⃣OCR系列第一章:OCR文字识别技术总结(一)
2️⃣OCR系列第二章:OCR文字识别技术总结(二)
一、我国OCR发展过程:
我国的印刷体汉字识别研究是从上世纪70年代末起步的,至今己有近三十年的发展历史,大致可以分成如下三个阶段:
1.探索阶段(1979一1985)
在对数字、英文、符号识别研究的基础上,自上世纪70年代末,国内就有少数单位的研究人员对汉字识别方法进行了探索,发表了一些论文,研制了少量模拟识别软件和系统。这个阶段漫长,成果不多,但是却孕育了下一个阶段的丰硕果实。
2.研制阶段(1986~1988)
1986年初到1988年底,这三年是汉字识别技术研究的高潮期,也是印刷体汉字识别技术研究的丰收期。总共有11个单位进行了14次印刷体汉字识别的成果鉴定,这些系统对样张识别能达到高指标:可以识别宋体、仿宋体、黑体、楷体,识别的字数最多可达6763个,字号从3号到5号,识别率高达99.5%以上,识别速度在286微机条件下能够达到10~14字/秒,但对真实文本识别率大大下降,这是由于以上系统对印刷体文字形状变化(如文字模糊、笔划粘连、断笔等)的适应性和抗干扰性比较差造成的。但是这三年研制的识别系统为印刷体汉字识别系统的实用化打下了基础,是识别系统从研制到实用化必经的过程。
3.实用阶段(1989一至今)
印刷体汉字识别自1986年掀起高潮以来,清华大学电子工程系、中国科学院计算所智能中心等多家单位分别研制并开发出了实用化的印刷体汉字识别系统。目前,印刷体汉字识别技术的研究热点已经从单纯的文字识别转移到了表格的自动识别与录入,图文混排和多语种混排的版面分析、版面理解和版面恢复,名片识别,金融票据识别和古籍识别等内容上。紫光文通推出的名片识别系统、身份证识别系统(e验通)和“慧视”屏幕文字图像识别系统等等新的识别系统的出现,标志着印刷体汉字识别技术的应用领域得到了广阔的扩展。
国家高技术研究发展“863”计划、国家重点科技攻关计划、国家自然科学基金和军事基础研究基金都对印刷体汉字识别这一研究课题予以极大的重视和大力的支持。目前,印刷体汉字识别和联机手写汉字识别走向实用化,其技术水平和当前世界最高水平并驾齐驱。
总结: 以上第一部分介绍我国OCR发展历程,从过程中可以发现,我国的光学字符识别研究相对国外起步较晚,但是发展十分迅速。从早期简单的单体识别发展到多种字体混合排列的多体识别,从中文印刷材料的识别发展到中英文混排印刷材料的双语言识别, 目前各个系统都可以支持简、繁体汉字的识别,同时支持中, 英,韩等多国文字的识别系统,对于简单版面可以进行效的定量分析,同时汉字识别率已经可以达到98%以上,以下第二部分将从不同字体展开对OCR技术描述。
OCR数据集分类
-
按输入方式分类
1.印刷体文字
2.手写体文字(由扫描仪输入/由手写板输入)
-
按识别字符集分类
1.英文,中文,日文,韩文等
2.中文及少数民族语言,常用各种字体
常规的OCR文字识别处理的过程包括:
1、图像输入、预处理:二值化图片、噪声去除、倾斜较正;
2、版面分析:把页面分为横排文本、竖排文本、表格、图片等不同区域,帮助字符切割、识别OCR;
3、设置语种:选择需要什么OCR语种的引擎程序;
4、输出结果:输出OCR识别结果为原版原样的优质文件;
二、传统印刷体文字识别
OCR技术的兴起便是从印刷体识别开始的,印刷体识别的成功为后来手写体的发展奠定了坚实的基础。印刷体识别的主要流程大致分为以下几个部分:图像预处理;版面处理;图像切分;特征提取、匹配及模型训练、匹配;识别后处理。
2.1 图像预处理
输入文本经过扫描仪进入计算机后,由于纸张的厚薄、光洁度和印刷质量都会造成文字畸变,产生断笔、粘连和污点等干扰,所以在进行文字识别之前,要对带有噪声的文字图像进行处理。由于这种处理工作是在文字识别之前,所以被称为预处理。预处理一般包括灰度化、二值化,倾斜检测与校正,行、字切分,平滑,规范化等等。
2.1.1灰度化
通过外设采集的图像通常为彩色图像,彩色图像会夹杂一些干扰信息,灰度化处理的主要目的就是滤除这些信息,灰度化的实质其实就是将原本由三维描述的像素点,映射为一维描述的像素点。转换的方式和规则有很多,在这里不详细介绍。
2.1.2 二值化
经过灰度处理的彩色图像还需经过二值化处理将文字与背景进一步分离开,所谓二值化,就是将灰度值(或者彩色值)图像信号转化成只有黑(l)和白(0)的二值图像信号。二值化效果的好坏,会直接影响灰度文本图像的识别率。二值化方法大致可以分为局部阈值二值化和整体阈值二值化。目前使用较多的日本学者大津提出的“大津法”
2.1.3倾斜校正
印刷体文本资料大多是由平行于页面边缘的水平(或者垂直)的文本行(或者列)组成的,即倾斜角度为零度。然而在文本页面扫描过程中,不论是手工扫描还是机器扫描,都不可避免地会出现图像倾斜现象。而倾斜的文档图像对后期的字符分割、识别和图像压缩等工作将产生很大影响。为了保证后续处理的正确性,文本图像进行倾斜检测和校正是十分必要的。
文本图像的倾斜校正分为手动校正和自动校正两种。手动校正,是指识别系统提供某种人机交互手段,实现文本图像的倾斜校正。自动校正,是指由计算机自动分析文本图像的版面特征,估计图像的倾斜角度,并根据倾斜角度对文本图像进行校正。
文本图像的倾斜检测方法有许多种,主要可以划分为以下五类:基于投影图的方法,基于Houhg变换的方法,基于交叉相关性的方法,基于Fourier变换的方法和基于最近邻聚类方法。
1.最简单的基于投影图的方法是将文本图像沿不同方向进行投影。当投影方向和文字行方向一致时,文字行在投影图上的峰值最大,并且投影图存在明显的峰谷,此时的投影方向就是倾斜角度。
2.Huogh变换也是一种最常用的倾斜检测方法,它是利用Hough变换的特性,将图像中的前景像素映射到极坐标空间,通过统计极坐标空间各点的累加值得到文档图像的倾斜角度。
3.Fourier变换的方法是利用页面倾角对应于使Fourier空间密度最大的方向角的特性,将文档图像的所有像素点进行Fourier变换。这种方法的计算量非常大,目前很少采用。
4.基于最近邻聚类方法,取文本图像的某个子区域中字符连通域的中心点作为特征点,利用基线上的点的连续性,计算出对应的文本行的方向角,从而得到整个页面的倾斜角。
三、手写体文字识别
手写体识别较印刷体识别难度较高,而在手写体识别中脱机手写体识别难度又比联机手写体识别高。这也是脱机手写体识别还未成功应用的主要原因。
联机手写体文字识别又被称为实时(或者在线)手写体识别,即:人在书写文字的同时,机器根据所书写文字的笔划、笔顺等特征进行识别。联机手写体文字识别是依靠电磁式或压电式等手写输入板来完成的,当用户使用光笔在输入板上写字的时候,光笔在板上的运动轨迹(板上的坐标)会被转化为一系列的电信号,这些电信号能够串行地输入到计算机中,从这些电信号我们可以比较容易地抽取笔划和笔顺的信息,从而进行文字识别。
脱机手写体文字识别又被称为离线手写体文字识别:由书写者预先将文字写在纸上,然后通过扫描仪转换成文字图像,再由计算机识别成相应文字。由于每个人书写习惯的不同,所以脱机手写体文字的类型是多种多样的,而且既便同一个人在不同情况下写出来的文字也会有变化,这些都给脱机手写体文字识别带来了巨大的困难。
脱机手写体文字识别处理流程和技术手段大致和印刷体识别相似,但是由于手写体随意性较大,因此对文字图像的行列切分、字切分带来了较大的困难,根据文种不同,切分的方法也有所不同,例如:在手写体蒙古文字中内蒙古大学的研究学者采用了一种基于字符外接多边形的寻找切分点的字切分算法,取得了不错的切分效果。
联机手写体识别的处理流程,主要是利用笔划顺序作为序列模型,加上字符结构特征、笔顺方向特征、笔画数量特征作为空间模型,的组合式模型,完成识别任务。
总结: 从上部分可以看出,传统的OCR识别主要基于图像处理(二值化、连通域分析、投影分析等)和统计机器学习(Adaboot、SVM),提取图片上的文本内容;用到的计算机视觉算法库主要有OpenCV、Halcon、VisionPro等,出于开源、多语言支持和方便易用的考虑,我们通常采用OpenCV进行开发。
四、OCR识别效果影响因素
1.图片:质量通常建议150dpi以上
建议扫描仪分辨率设置为300DPI规格的参数;手机拍照的话建议摄像头像素为500万像素以上的摄像头;
2.颜色:通常对彩色识别不好,黑白的图片较高
常规的传统的OCR识别要求为白底黑字或者浅底黑字;如果是彩色背景图片的文字则需要特殊的OCR识别程序,比如文通视频文字识别系统;
3.字体:
目前全世界范围内的OCR技术都是针对“宋体印刷字”的字形做识别库的,若是是手写识别率低。
4.程序:
好的OCR程序遇到好的图片,识别效果才会优秀;在这里推荐北京文通科技推出的OCR程序,包括OCR-SDK开发包产品、OCR技术识别文档APP产品等等。
记住:数据本身质量+数据预处理很重要!
传统OCR与深度学习OCR比较
传统OCR文字识别方法:基于图像处理(二值化、投影分析)和统计机器学习SVM等提取图片文本内容,使用OpenCV等。
Opencv可以参考我的这篇文章:https://blog.csdn.net/qq_36816848/article/details/123805173
基于深度学习的OCR文字识别方法:利用卷积神经网络自动提取图像特征且提取的特征鲁棒性更强、识别效果更好,因此近几年的ocr文字识别方法一般都基于深度学习实现。
五、深度学习OCR识别方法
深度学习介绍
计算机视觉是利用摄像机和电脑代替人眼,使得计算机拥有类似于人类的对目标进行检测、识别、理解、跟踪、判别决策的功能。计算机视觉的应用包括文字识别、图片分类、目标检测和图像质量评价等方向。
总结:深度学习的出现打破了传统机器学习主要依赖于人工进行特征,而在深度学习无需人们手动进行特征提取,由机器⾃动提取的很大程度上解决数据集处理过程的不便。以下对深度学习优缺点进行总结。
深度学习资料可参考我的这篇文章:https://blog.csdn.net/qq_36816848/article/details/122286610
卷积神经网络CNN
总结:此处CNN不做过多介绍,只需记住其两个重点:局部连接+权重共享
具体学习资料可以参考我的这几篇博客:https://blog.csdn.net/qq_36816848/article/details/121576741
1. CRNN+CTC
CRNN论文翻译:
CRNN介绍:
近几年来,CRNN在计算机视觉文本识别领域取得不错成果。CRNN是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。CRNN网络实现了不定长验证结合CNN和RNN网络结构,使用双向LSTM循环网络进行时序训练,并在最后引入CTC损失函数来实现端对端的不定长序列识别,
CRNN总结
CRNN网络结构包含三部分,从下到上依次为:
1.卷积层,使用深度CNN,对输入图像提取特征。
2.循环层,使用双向RNN(BLSTM)对特征序列进预测,输出预测标签(真实值)分布。
3.转录层,使用 CTC 损失,把从循环层获取的一系列
标签分布转换成最终的标签序列。
1.卷积层
卷积:提取图像特征 池化:为了降维减少计算量
CRNN卷积层由标准的CNN模型中的卷积层和最大池化层组成,自动提取出输入图像的特征序列。与普通CNN网络不同的是,CRNN在训练之前,先把输入图像缩放到相同高度(图像宽度维持原样),论文中使用的高度值是32。
论文中该CNN结构输出的特征图大小为 ,若输入图片高度为32,宽度为100,则特征图的大小为(1, 24,
512)。这个结果可以认为图片从左到右被分割成了24块,每块大小的 特征维度 为512。
提取的特征序列中的向量是从特征图上从左到右按照顺序生成的,每个特征向量表示了图像上一定宽度上的特征,论文中使用的这个宽度是1,就是单个像素。 特别强调序列的顺序是因为在之后的循环层中,先后顺序是LSTM训练中的一个重要参考量。
2.循环层
转录就是 RNN 对每个像素的预测转换为标签序列的过程。
CRNN的循环层由一个双向LSTM循环神经网络构成,预测特征序列中的每一个特征向量的标签分布(真实结果的概率列表),循环层的误差被反向传播,最后会转换成特征序列,再把特征序列反馈到卷积层,这个转换操作由论文中定义的“Map-to-Sequence”自定义网络层完成,作为卷积层和循环层之间连接的桥梁。
LSTM原理参考:LSTM原理介绍_GoAl的博客-CSDN博客
CRNN完整网络结构图:
从整个网络中可以看出,卷积层是由一系列的卷积、最大池化、批量归一化等操作组成,由标准的CNN模型中的卷积层和最大池化层组成,结构类似于VGG网络。
CRNN模型计算公式:
CRNN模型计算详细流程:
总结:CRNN文字识别方法在我的这篇文章中进行了详细介绍,可以供大家参考:https://blog.csdn.net/qq_36816848/article/details/121723891
2. CRNN+Attention(ASTER)
ASTER方法概述 本文方法主要解决不规则排列文字的文字识别问题,论文为之前CVPR206的paper(Robust Scene Text
Recognition with Automatic Rectification,方法简称为RARE)的改进版。
主要思路
针对不规则文字,先矫正成正常线性排列的文字,再识别;
整合矫正网络和识别网络成为一个端到端网络来训练;
矫正网络使用STN,识别网络用经典的sequence to sequence + attention
方法框架和流程
方法ASTER全称为Attentional Scene TExt Recognizer with Flexible Rectification,包括两个模块,一个用来矫正(rectification network),另一个用来识别(recognition work),如下图所示。
模型结构总览
整体的模型架构以下三块:
TPS(Thin-Plate-Spline):分为localization network和grid sampler,前者用于回归出控制点,后者用于在原图上进行网格采样;
encoder:卷积神经网络用的是resnet,语言模型使用的是BiLSTM,需要说明的是在后续的DTRB论文中语言模型会单独拆分出来,在这里还是和原论文保持一致;
decoder:使用的是基于bahdanau attention的decoder,这里用了两个LSTM decoder。一个从左到右,一个从右到左,进行双向的解码。
特征提取层
本文的特征提取层跟FAN一致,都是先经过resnet,然后经过双向的LSTM,最终得到形状为(B, W, C)的三维特征向量,其中B代表batch size, W是time steps,C是channels.比如说根据原文,当输入大小为(32, 100)时,输出就是(B, 25, 512)
总结:
ASTER在一般attention based的encoder-decoder基础上,加上了TPS作为矫正模块,可以部分缓解由于弯曲文字导致的识别不准确问题。后续也有不少论文是沿着这个方向进行改进的,比如说MORAN、ESIR等等。
CRNN+Attention详细学习可参考我的这篇文章:
https://blog.csdn.net/qq_36816848/article/details/123014991
总结:以上内容主要介绍传统OCR文字识别方法和基于深度学习OCR主流的两种文字识别方法,后续将继续对其进行补充,此章未完待续!
以上是关于OCR文字识别技术总结的主要内容,如果未能解决你的问题,请参考以下文章
印刷字符识别基于matlab OCR印刷字母+数字识别含Matlab源码 1861期