基于tesseract_ocr实现图片中汉字辨识

最近在研究视频字幕识别,写了一个小的程序,得到一些实验结果,同时也存在着一些问题,这里拿出来和大家分享下。
1.工具
(1)tesseract_ocr(识别汉字);
(2)vs2010;
(3)opencv244(其中涉及图像处理部分)。
这里我把自己用到的资料都上传了,链接奉上:
http://download.csdn.net/detail/zhancf/9227333

2.实现过程
准备好上述材料以后,按照步骤完成vs2010下opencv244和tesseract_ocr的安装后,就可以进行操作了。

首先,如果直接对一幅图像利用tesseract_ocr进行识别,识别的效果非常差,例如下图:
这里写图片描述

直接识别的结果为空,什么都没有识别出来。但是如果我们仅仅截取字幕部分进行识别呢?识别效果是怎样的呢?我们截取出字幕部分如下:
这里写图片描述
发现识别结果还是为空,无法识别。

我们发现直接将这些复杂的图片进行tesseract_ocr识别,想要识别里面的汉字是不现实的,因此,我们先对图像进行处理,然后进行识别,看看识别的效果如何?
(1)对上面截取的字幕进行二值化处理,并进行细化处理,得到如下所示图:(这步还有一些去噪的操作,详见最终的程序)
这里写图片描述
我们发现图中汉字存在很多小方块,看看这样的识别结果:铈交冒赔帐杨洁庸荃申外记雪问。正确率为6/14。
图片中的小方块对识别存不存在影响呢?试试便知。
(2)去除图片中汉字上的小方块
我们先对上述图片进行膨胀操作,然后再细化,得到如下的结果图。
这里写图片描述

上图中,图片中汉字的小方块已经被去除了,整体的效果还是比较理想的,但是我们发现上图中汉字的笔画过细,这会影响tesseract_ocr的识别结果,因此我们对它再进行膨胀操作,结果如下:
这里写图片描述
现在看上去效果还不错,我们看看识别结果:外交部部长畅洁属答中外记胄问。识别正确率为11/14。识别的结果还算满意。
(3)如果对最后得到的图片进行锐化操作,使汉字更加符合印刷字的特点,效果会更好。
这里写图片描述

识别结果:外交部部长畅洁属答中外记胄问。虽然识别与上述结果相同,但是经本人验证,锐化的识别效果更为理想。

3.实现结果
通过上述步骤操作之后,得到识别结果图。
这里写图片描述

4.结果分析
针对此次图片中汉字识别过程,存在以下问题亟待解决。
(1)准确率:整体来说,经过上述步骤,汉字识别准确率在70%-80%左右,准确率还比较低,很难正常应用;
(2)运行时间:此次识别总用时7.938s,耗时太长。其中图片处理花了2s左右,tesseract_ocr识别花了6s左右。

可能的解决方案:
(1)自己根据上述步骤得到的字体进行训练,得到训练样本,这将有效地降低识别错误率,但是比较耗时耗力。
(2)针对图像处理还有很大的提升空间,继续研究ing。。。

整个项目实现的代码链接:
http://download.csdn.net/detail/zhancf/9227591
需要自己配置下tesseract_ocr和opencv环境。

你可能感兴趣的:(程序研发)