基于MSER和Tesseract的自然场景图像文字识别
2017-12-13蒋弘毅朱丽平欧樟鹏
蒋弘毅 朱丽平 欧樟鹏
摘要:针对传统OCR技术对自然场景下的图像文本识别率低的问题,设计和实现了自然场景的图像文字自动识别系统。该系统主要采用了改进的MSER场景文本定位算法,利用Tesseract对图像文字样本进行训练,然后进行场景图像文字识别,并在MFC环境下实现。实验结果表明,训练后的Tesseract库对场景图像文字识别有显著提升。
关键词:场景图像; 二值化; MSER; Tesseract; 文字识别
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2017)33-0213-04
Abstract: Aiming at the problem that the traditional OCR technology has low text recognition rate of natural scene image, the automatic text recognition system of natural scene image is designed and realized. The system mainly uses the improved MSER scene text localization algorithm, using Tesseract to train the image text samples, and then recognize the text of scene image, and realize the function in the MFC environment. The experimental results show that the trained Tesseract library has a significant improvement for the text recognition of natural scene image.
Key words: Scene image; binaryzation; MSER; Tesseract; text recognition
1 概述
自然场景中的文字往往携带有非常重要的信息,它能够被用来描述该图像的内容。很多由摄像设备拍摄的图片中,都存在或多或少的文字,比如车牌号码、商标文字、发票文字及數字等。通过识别图片中的文字,可以进一步理解图像的内容。传统的OCR(Optical Character Recognition,光学字符识别)技术对标准的印刷体文字识别率高,但对于背景受污染、非标准字体文字,识别率将极速下降[1]。
然而自然场景下的文字具有背景复杂、字体多样、噪声严重等特点,从而大大增加了文字识别的困难。冯永康等[2]提出了一种利用大漠插件结合小规模自建字库对非标准字体图像文字进行自动模糊识别方法,但需建立字库且耗时。陈梓洋等[3]利用分水岭算法对原图像进行预处理,再对预处理后的图像进行特征提取、划分区域,最后利用ISODATA算法进行二次处理,但识别结果不太理想。李月洁[4]提出一种深度学习的自然场景中特定文字图像优化识别方法。融合自然场景图像的纹理特征与边缘信息特征来获得文本图像候选区,利用深度学习来表述自然场景图像中底层语义识别特征与高层语义识别之间的关系,提取不同自然场景下的语义特征,并对不同特征进行分类,利用其分类的结果组建基于深度学习的文字图像优化识别模型,从而完成特定文字图像优化识别。胡文等[5]利用OpenCV在Android手机上设计了快递单文字识别系统,但系统仅给出了对数字的识别。
在对自然场景图像中的文字进行识别时,文字定位和文字识别算法是场景文字识别系统中的关键。文字定位方法目前比较成熟的有笔画宽度变换(Stroke Width Transform, SWT[6])和最大稳定极值区域(Maximally Stable Extremal Regions, MSER[7])。Tesseract OCR是一种字符图像识别引擎,最新版本为Tesseract 4.0[8],支持中文识别。但未经训练的Tesseract识别率不高,需要进行专门训练。
针对传统OCR技术对自然场景下的文本识别率低的问题,设计和实现了自然场景的图像文字自动识别系统。本系统首先将本地图片读取,对图片进行灰度化、二值化、去噪等预处理后,采用了基于OpenCV[9]的MSER文本定位算法进行文字定位和利用Tesseract引擎进行文字识别,并在MFC环境下实现。
2 系统结构
基于自然场景图像文字识别系统主要分为4个模块:获取文字图像模块、图像预处理模块、文字识别模块及保存识别结果模块。整个系统结构如图1所示,各个模块的主要功能如下。
获取文字图像模块:该模块的功能主要是从本地或特定设备获取文字图像,并将图像进行显示。
图像预处理模块:该模块的功能主要是将获取的文字图像经过一系列缩放、灰度化、去噪、二值化等图像预处理,然后进行文字定位。可由用户选择是否进行去噪和文字定位处理。使得从图像中提取的文字区域较为清晰且背景较为干净。
文字识别模块:用户可以选择需要识别的语种,确认后调用Tesseract引擎对图像预处理模块处理后的文字图像进行识别,并将识别结果显示在主页面的文本框中。
保存识别结果模块:用户可以按照自己的需求将识别的结果保存为txt或者doc文档,便于后续处理。
3 文字图像预处理
利用图像采集系统获取的自然场景文字图像为原始图像,需要进行一系列的预处理,主要有灰度化、去噪、二值化等操作,目的是尽量减少图像背景对文字区域的干扰。预处理的效果直接与后续的识别效果密切相关。
3.1 图像灰度化
自然场景下采集的文字图像通常为彩色,需要转换为灰度图像。采用加权平均法对图像进行灰度化处理。将彩色图像中的三个分量:红(R)、绿(G)、蓝(B)从人体生理学角度以不同的权值进行加权平均。在红绿蓝三色中,人眼对绿色的敏感最高,对蓝色敏感最低。当[Kr=0.30],[Kg=0.59],[Kb=0.11]时,得到的灰度图像比较合理。因此,按照式(1)对RGB三分量进行加权平均能得到较合理的灰度图像,更加接近于实景。
[f(i,j)=0.30R(i,j)+0.59G(i.j)+0.11B(i,j)] (1)
其中,[f(i,j)]表示灰度图像,[(i,j)]表示位于图像第[i]行和第[j]列的像素。
3.2 图像去噪
获得的灰度文字图像通常带有噪声,需要进行去噪处理。采用常用的中值滤波方法[10]实现。中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,在一定条件下可以克服线性滤波带来的图像细节的模糊问题,特别是针对被椒盐噪声污染的图像。
3.3 图像二值化
图像二值化总体上分为全局二值化和局部二值化。二者的区别主要为:全局二值化将整幅图像的灰度值作为参考,计算出一个单一的阈值[T]进行二值化。它将图像每个像素的灰度值与阈值[T]进行比较,若大于[T],则将该点像素值赋值为白色。否则,赋值为黑色。利用这种方法,图像二值化的速度较快,當图像中文字与背景的灰度值差异较大且整张图像灰度值变化较小时,该方法可以达到良好的效果。而局部二值化则将像素点邻域的灰度值信息作为参考来计算图像中每一个像素点的阈值。该方法虽然会降低二值化的速度,但在背景较为复杂或整张图片灰度值变化较大的情况下,较全局阈值法可以获得更好的处理效果。
由于自然场景下图像文字背景较为复杂,不可能直接用一个阈值来处理整张图片的二值化,本文采用的是局部二值化算法中的Wellner二值化算法[11],其原理如下。
按行扫描图像,用[P(i,j)]表示第[i]行第[j]列像素点的值,用[G(i,j)]表示第[i]行,第[j]个像素点以及前[S]个像素点灰度值之和,则计算公式如下
[G(i,j)=k=0s-1P(i,j-k)][G(i,j)] (2)
二值化时,利用以下公式判断该像素点值为0还是1。
[1,if(Pi,j 简单来说,如果该点的像素值小于[(G(i,j)S)(100-t100)][Gsi,jS*(100-t100)],则将该像素点赋值为1(黑色),否则,赋值为0(白色)。根据多次实验的结果,这里[S]和[t]的最佳取值分别为[S=width/8],[t=15]。 当计算[G(i,j)]时,采用的是前[S]个点像素值和的平均值来计算阈值,即前[S]个像素点所占的权重是一样的,但是在实际的图像中,离[j]越近的像素点对其影响越大。对计算[G(i,j)]的算法进行改进: [G(i,j)=P(i,j)+(1-1s)P(i,j-1)+(1-1s)2G(i,j-2)+…+(1-1s)s-1G(i,j-S-1)] (4) 某点像素值通过二值化为0或1,只与其所在行的前[S]个像素值有关。将公式进一步改进,将上一行第[j]列的前[S]个像素值也作为[G(i,j)]的计算要素,于是[G(i,j)]变为下式: [G(i,j)=12G(i,j)+12G(i-1,j)] (5) 第一行的[G(i,j)]值,初始化为[127S]。 获取的文字图像经过图像预处理后,得到其二值图像,如图2所示。 4 图像文字识别 图像文字识别过程主要分为文本的定位与识别。为了准确识别文字,必须进行文本定位。 4.1 基于改进的MSER场景文本定位 MSER算法最早是由Matas等在研究鲁棒性的宽基线立体重建时提出的,该算法借鉴了分水岭算法的思想,具有良好的稳定性、抗噪性、仿射不变和计算简单高效等特点。最初的MSER算法运行速度较慢,Nister等[12]对该算法进行优化,大大提高了运行速度。借助于OpenCV库,利用MSER算法,实现定位操作。改进的MSER算法的判别算子为: [q(i)=Qi-Qi-ΔQi-Δ] (6) 然而,通过这种方式检测得到的MSER内部灰度值是小于边界的,比如一个黑色背景中的白色区域,其中的白色区域是无法被检测到的。因此对原图进行一次MSER检测后,需要将图像的颜色进行反转,再做一次MSER检测,两次操作分别称为MSER+和MSER-。场景图像中的文本定位效果如图3所示。 4.2 基于Tesseract的文字识别 由于字体、大小、形状等多方面客观因素的影响,导致很多时候直接使用Tesseract识别效果很差,识别率低,对于一些不够清晰或者不同的字体,识别率极低。为了提高识别率,需要训练字库,训练过程如下。 (1) 将采集的若干张图片放在一个目录下,合成一个训练图片tiff; (2) 利用第一步生成的训练图片生成相应的Box文件; (3) 提取字符特征,生成字符特征文件; (4) 利用TessBoxEditor手动对每张图片中识别错误的字符进行校正并保存; (5) 生成字库文件,并在样本图片所在目录下创建一个批处理文件; (6) 合并多个训练文件后的字库文件。 通过对Tesseract的训练,可以大大提高识别的精度,同时使得文字识别将不再局限于标准字体,甚至能够支持较为规范的手写字体。
Tesseract引擎封装了多个API函数,包括设置文本识别字库、文本识别图像、获取识别后的文本,通过调用这些API函数,可以方便地识别图像中的文字,核心代码如下。
Tesseract::TessBaseAPI tess;
tess.Init(NULL, chice, Tesseract::OEM_DEFAULT);
//初始化Tesseract对象,其中chice为识别使用的字库
tess.SetImage((uchar*)im.data, im.cols, im.rows, 1, im.cols);
//设置被识别的图片
out = tess.GetUTF8Text();
//获取识别后的以UTF-8编码的文本
CEdit* pBoxOne;
pBoxOne = (CEdit*)GetDlgItem(IDC_EDIT1);
CString str1 = UTF82WCS(out);
//将TCHAR数组转换为CString
//删除缓冲区
for (int i = 0; i < str1.GetLength(); ++i)
{if (i % 55 == 0 && i != 0)
str += "\r\n";
str += str1[i];}
pBoxOne→SetWindowTextW(str);//获取识别结果并显示在文本框中
在实验中,只需要引入头文件和dll文件,并把字库文件与工程文件放在一起,便可调用Tesseract中的函数进行文字识别。利用训练后的Tesseract引擎识别后结果与未训练识别的结果如图4所示。
(a) 文字图像
(b) 未训练识别结果
(c) 训练后识别结果
图4 图像文字识别
通过比较图4(b)和(c),Tesseract经过训练后大大增加了识别的精度,并且可以识别不同的字体。为了验证算法的可靠性,对其他获取的自然场景文字图像进行识别,识别结果如图5所示。
(a) (b) (c)
(a1) (b1) (c1)
(d) (e) (f)
(d1) (e1) (f1)
图5(a)-(f)为获取的自然场景中的文字图像,来源于不同的场景,图5(a1)-(f1)为对应原图像中的文字识别结果。其中,图5(a1)-(e1)均准确的识别出了图像中的文字,没有错误,因为文字背景相对干净。图5(f1)识别出现错误,原因是“软件”二字背景颜色较为复杂,文本定位后未能完全清除背景对文字的干扰,难以完全分离文本和背景,造成识别失败。
5 结论
自然场景下的图像文字自动识别应用领域广泛,本文设计并实现了该系统。该系统一定程度上改善了传统文字识别技术在自然场景下识别率低的缺陷。系统通过读取文字图像,经过一系列灰度化、去噪、二值化等预处理,然后进行文本定位,将自然场景下图像中的文字较为干净地提取出来,通过训练过的Tesseract引擎将图像中的文字识别出来。但是本系统仍有一定的缺陷,对于背景较为复杂的自然场景图片,本系统难以将其中的文字精确的定位出来。即使准确定位,也难以将文本与背景分离,导致后面利用Tesseract引擎识别时识别率降低。同时,由于样本较少,导致Tesseract目前只能识别较为常规的字体,对于一些不常用的字体,也会降低识别率。针对以上两个问题,我们将在后续的研究中加大训练样本,改进识别算法以提高识别率。
参考文献:
[1] Ali H, Y. Ali Y ,Hossain E, et al. Character recognition using wavelet compression [C]. Proc. of 13th international conference on computer & information technology. Dhaka: IEEE, 2010: 452-457.
[2] 馮永康, 王艳红, 章立. 一种自动模糊识别文字图像的实现方法[J]. 电脑编程技巧与维护, 2015(15):82, 89.
[3] 陈梓洋, 王宇飞, 钱侃, 等. 自然场景下基于区域检测的文字识别算法 [J]. 计算机技术与发展, 2015, 25(7):230-233.
[4] 李月洁. 自然场景中特定文字图像优化识别研究与仿真[J]. 计算机仿真, 2016, 33(11):357-360.
[5] 胡文, 马玲玉. 基于OpenCV 手机拍照快递单文字识别的研究[J]. 哈尔滨商业大学学报:自然科学版, 2015, 31(5):564-568.
[6] B. Epshtein, E. Ofek, Y. Wexler. Detecting Text in Natural Scenes with Stroke Width Transform[C]. IEEE International Conference on Computer Vision and Pattern Recognition. CVPR, 2010: 2963-2970.
[7] J. Matas, O. Chum, M. Urban, et al. Robust wide-baseline stereo from maximally stable extremal regions [J]. Image & Vision Computing, 2004, 22(10):761-767.
[8] Tesseract 4.0 [EB/OL]. https://github.com/Tesseract-ocr/Tesseract/wiki/TrainingTesseract-4.00, 2017.1.
[9] OpenCV 3.2 [EB/OL]. https://github.com/opencv/opencv/releases/tag/3.2.0, 2016.12.23.
[10] 毛云星, 冷雪飞. OpenCV 3编程入门[M]. 北京: 电子工业出版社, 2015.
[11] P. D. Wellner. Adaptive thresholding for the digital desk [M]. Technical Report EPC-93-110, Rank Xerox EuroPARC, 1993.
[12] D. Nistér, H. Stewénius. Linear time maximally stable extremal regions [C]. Computer Vision, ECCV 2008. LNCS 5303, 2008: 183-196.