OCR技术浅析-无代码篇(1)

图像识别中最贴近咱们生活的可能就是 OCR 技术了。 OCR 的定义:OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用字符识别方法将形状翻译成计算机文字的过程。算法

今天就来简单分析下 OCR 技术的原理。网络

从总体上来讲,OCR通常分为两个大步骤:图像处理以及文字识别。函数

图像处理

识别文字前,咱们要对原始图片进行预处理,以便后续的特征提取和学习。这个过程一般包含:灰度化、二值化、降噪、倾斜矫正、文字切分等子步骤。每个步骤都涉及了不一样的算法。咱们如下面这张原始图片为例,进行每一个步骤的讲解。学习

1.灰度化

灰度化(gray processing),在RGB模型中,若是R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,所以,灰度图像每一个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。说通俗一点,就是将一张彩色图片变为黑白图片。优化

 

灰度化通常有份量法、最大值法、平均值法、加权平均法四种方法对彩色图像进行灰度化。人工智能

2.二值化

一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最经常使用的方法就是设定一个阈值T,用T将图像的数据分红两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(binaryzation)。spa

二值化的黑白图片不包含灰色,只有纯白和纯黑两种颜色。翻译

二值化里最重要的就是阈值的选取,通常分为固定阈值和自适应阈值。 比较经常使用的二值化方法则有:双峰法、P参数法、迭代法和OTSU法等。设计

3.图像降噪

现实中的数字图像在数字化和传输过程当中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减小数字图像中噪声的过程称为图像降噪(Image Denoising)。图片

图像中噪声的来源有许多种,这些噪声来源于图像采集、传输、压缩等各个方面。噪声的种类也各不相同,好比椒盐噪声,高斯噪声等,针对不一样的噪声有不一样的处理算法。

在上一步获得的图像中能够看到不少零星的小黑点,这就是图像中的噪声,会极大干扰到咱们程序对于图片的切割和识别,所以咱们须要降噪处理。降噪在这个阶段很是重要,降噪算法的好坏对特征提取的影响很大。

图像降噪的方法通常有均值滤波器、自适应维纳滤波器、中值滤波器、形态学噪声滤除器、小波去噪等。

4.倾斜矫正

对于用户而言,拍照的时候不可能绝对的水平,因此,咱们须要经过程序将图像作旋转处理,来找一个认为最可能水平的位置,这样切出来的图,才有多是最好的一个效果。

倾斜矫正最经常使用的方法是霍夫变换,其原理是将图片进行膨胀处理,将断续的文字连成一条直线,便于直线检测。计算出直线的角度后就能够利用旋转算法,将倾斜图片矫正到水平位置。

5.文字切分

对于一段多行文原本讲,文字切分包含了行切分与字符切分两个步骤,倾斜矫正是文字切分的前提。咱们将倾斜矫正后的文字投影到 Y轴,并将全部值累加,这样就能获得一个在y轴上的直方图。

直方图的谷底就是背景,峰值则是前景(文字)所在的区域。因而咱们就将每行文字的位置给识别出来了。

字符切分和行切分相似,只是此次咱们要将每行文字投影到 X轴。

但要注意的是,同一行的两个字符每每挨的比较紧,有些时候会出现垂直方向上的重叠,投影的时候将他们认为是一个字符,从而形成切割的时候出错(多出如今英文字符);也有些时候同一个字符的左右结构在X轴的投影存在一个小间隙,切割的时候误把一个字符切分为两个字符(多出如今中文字符)。因此相较于行切分,字符切分更难。

对于这种状况,咱们能够预先设定一个字符宽度的指望值,切出的字符若是投影超出指望值太大,则认为是两个字符;若是远远小于这个指望值,则忽略这个间隙,把间隙左右的“字符”合成一个字符来识别。

文字识别

预处理完毕后,就到了文字识别的阶段。这个阶段会涉及一些人工智能方面的知识,比较抽象,无法用图片表达,我尽可能讲得简单易懂一些。

1.特征提取和降维

特征是用来识别文字的关键信息,每一个不一样的文字都能经过特征来和其余文字进行区分。对于数字和英文字母来讲,这个特征提取是比较容易的,总共就 10 + 26 x 2 = 62 个字符,并且都是小字符集。对于汉字来讲,特征提取的难度就比较大了,由于首先汉字是大字符集;其次国标中光是最经常使用的第一级汉字就有3755个;最后汉字结构复杂,形近字多,特征维度就比较大。

在肯定了使用何种特征后,还有可能要进行特征降维,这种状况下,若是特征的维数过高,分类器的效率会受到很大的影响,为了提升识别速率,每每就要进行降维,这个过程也很重要,既要下降特征维数,又得使得减小维数后的特征向量还保留了足够的信息量(以区分不一样的文字)。

2.分类器设计、训练

对一个文字图像,提取出特征,丢给分类器,分类器就对其进行分类,告诉你这个特征该识别成哪一个文字。分类器的设计就是咱们的任务。分类器的设计方法通常有:模板匹配法、判别函数法、神经网络分类法、基于规则推理法等,这里不展开叙述。在进行实际识别前,每每还要对分类器进行训练,这是一个监督学习的过程。成熟的分类器也有不少,有 SVM,CNN 等。

后处理

其实就是对于分类器的分类结果进行优化,这通常就要涉及天然语言理解的范畴了。

首先是形近字的处理:举个栗子,“分”和“兮”形近,可是若是遇到“分数”这个词语,就不该该识别为“兮数”,由于“分数”才是一个正常词语。这须要经过语言模型来进行纠正。

其次是对于文字排版的处理:好比一些书籍是分左右两栏的,同一行的左右两栏不属于同一句话,不存在任何语法上的联系。若是按照行切割,就会把左行的末尾和右行的开头连在一块儿,这是咱们不但愿看到的,这样的状况须要进行特殊处理。

 

已有开源类库:tesseract-ocr

相关文章
相关标签/搜索