天天看点

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

最近一个月在做互联网横幅图片中OCR的提取与矫正,主要是针对红色横幅体,在项目实践过程中遇到了一些问题,多亏了老师的帮助,基本完成了项目。现在分享一下我用到的一些方法,希望对大家有用。字符识别第二版

字符识别第二版

一、系统概况:

系统主要有三部分构成:横幅分割,横幅校正,字符识别。                                                                

     

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

                        

横幅分割:本系统主要是针对红色横幅体进行分割识别,在图片中横幅体的主要特征是颜色,将图像转换到YCbCr空间,对Cb和Cr分量设定阈值,将图像转化为二值图。横幅体的形状一般是矩形,面积在图像中占据一定的比例,而且长宽比有一定的规律,一般长宽比大于3:1。对二值图像进行连通域分析,取连通域面积较大的前三个连通域,这三个连通域中长宽比大于3:1且最佳外接多边形与矩形相似的为横幅区域。

横幅校正:1、横幅是否矫正的判定:首先确定横幅体的上下边沿,如下图所示:

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

根据横幅上下边沿的夹角确定是否需要校正。若需要校正,确定横幅体的四个边缘点:

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

计算左边两点之间的垂直距离L1和右边两个点的距离L2,若L1>L2,则透视变换以L1为标准即上沿的两个点的y坐标都变为L1上面点的纵坐标,透视变换采用的是opencv 的函数warpPerspective,校正后效果图:

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

(注:文字的上下边沿和横幅的上下边沿是平齐的,文字上下边沿的确定比横幅上下边沿更容易受干扰因素,比如阳光、阴影、和横幅的褶皱等,比如下图:一旦文字的边沿定位不好,校正就会出现错误。校正之后可以根据文字区域的纹理跳变情况进行扫描确定文字的上下边沿。

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版
自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

2、文字上下沿的确定:文字区域具有比较丰富的纹理特性,对校正后的横幅区域运用Canny边缘检测,对边沿检测图进行行扫描,记录每一行像素值从一到零和从零到一跳变的次数。从上边沿开始跳变次数第一个达到10的行,为文字上边沿,同理从下边沿开始第一个达到10的行,是文字的下边沿。

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版
自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

3、字符分割:根据文字行定位的结果将字符分割出来

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版
自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

字符识别:调用文通SDK进行字符识别。

二、系统存在的问题:

1、目前该系统已经能对大部分横幅体进行定位和校正,对于偏转很厉害的横幅校正后字体出现模糊。

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

校正后:

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版
自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版
自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

2、文通的SDK主要是针对图像中打印的标准文字识别率很高,如下图所示:

自然场景下图片中红色横幅文字的提取与矫正(OCR)字符识别第二版

对于横幅体的识别准确率不高,我认为主要有以下几个原因:

1、横幅体中的字体笔画太粗,而且存在形变(由于横幅摆放和拍摄的角度不同),即使经过校正液会存在比较模糊的情况,与标准的印刷体相差比较大。

2、文通SDK字符的训练库应该是基于扫描文档的常用字,没有加入横幅字体的训练,而我们识别的是横幅字体,鲁棒性不好。

3、从预处理校正部分提高识别率已经很困难了,核心的识别部分不是针对横幅设计的。

三、系统识别结果:

我已将系统的校正识别结果放在附件当中,一部分是识别结果较好的图片集,另一部分是识别结果较差的图片集。包含了原图像、校正好的图像、识别结果。

一、识别结果的结构包括:

PictureID:(图片名称)

文字内容

TotalNumOfCharacter:(图片中文字的数目)

二、系统的性能:平均处理每张图片消耗时间0.127911秒。不支持多线程。

 具体的代码由于涉及到项目的保密性,我就暂时不公开了,希望对大家有用。