开源的OCR
tesseract-ocr
资格比较老,它由HP于1985年到1995年间开发,后来由google直接负责,经过谷歌进一步开发后,目前的tesseract-ocr有了显著的改进。tesseract-ocr和Leptonica图像库配合,可以读取多种图像格式,并将其转换成超过60种语言的文本。可以工作在Linux,Windows,Mac OSX等系统上,并且可以在android和iphone平台上编译。目前android版本在这个地址:https://code.google.com/p/tesseract-android-tools/, 这个版本需要下载很多关联的库文件!
https://github.com/rmtheis/tess-two,貌似tesseract-ocr-tool的一个分支,很多相关的库都已经配置好了,只要git clone下来编译,编译出现了permission权限的问题(文件的权限用chmod 777 ./) 。编译好的so文件在libs下。
安卓的OCR识别项目,直接用还是有点问题,需要调教,可以借鉴
esseract Open Source OCR Engine
OCR识别引擎,真正底层的东西。Tesseract OCR 文字识别库识别率还是非常高的,但是前提是图像背景简单,如果有复杂的背景,识别率几乎为0.
所以使用过程中应该做如下处理
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的样例越多越好。