使用Tesseract OCR 提取复杂图像中的文字
Tesseract OCR 文字识别库识别率还是非常高的,但是前提是图像背景简单,如果有复杂的背景,识别率几乎为0.
下面介绍从具有复杂背景图像中应用 Tesseract OCR提取文字的关键技巧。以我做的提取运动员号码的项目为例。
测试图例:更多测试图例,请访问http://www.physoft.net/?p=554
1. 前处理。
前处理主要完成两个任务:
a. 定位:根据目标图像的特征定位目标的区域。如图例,需要定位每个运动员数字标签的标签区域。Tesseract 对以文字为主体的图像识别率还是非常不错的。所以我们需要将定位到的区域抠出来做后面的处理,再给Tesseract 识别。定位是非常困难的,涉及到目标图像的特征,一般来说是几何特征。但是因为图像复杂,特征常常也被其他物体破坏(物理上的破坏,或者光照、雾,遮挡破坏)。
b. 二值化:Tesseract 号称可以处理color图像,但是估计只有对二值化的图像,识别率才能达到可接受的程度。所以二值化可以极大的提高Tesseract识别率。将第一步定位到的局部图像二值化。这一步相对第一步要简单很多,但是仍然很具有挑战性。必定二值化的结果比较良好,否则 Tesseract 就有意见了。
前处理是成败的关键,也是最难的部分。前处理做好了,Tesseract 就听话了。前处理一般来说需要大量的图像处理技巧。
2. 错误文字的剔除:
a. 这一步相对简单,调用Tesseract,使用makebox参数,从output文件中获取提取到的结果,包括位置,大小。根据前处理中定位步骤中获取的几何特征,来过滤output中结果。如文字过宽,过小,顺序不对等。注意,Tesseract 输出的文字区域经常有区域重叠等现象,需要先使用程序重整。
b. 使用Tesseract的tord_display_ratings,根据准确度来淘汰低准确度的文字。
c. 多研究Tesseract配置
3. 除1,2外,Tesseract的training也是很重要的,而且train的样例越多越好。