站长原创,版权所有ITEEDU,2011-06-29
刚刚进入公司实习,头一天就被分配了一个从未有所接触的东西,Ocr识别,并且给了个网址http://code.google.com/p/tesseract-ocr/,说是让阅读源码,编写一个调用tesseract-ocr的提取图片上文字信息的Ocr接口。
于是乎,开始我的工作之旅……
Tesseract是Ray Smith于1985到1995年间在惠普布里斯托实验室开发的一个OCR引擎,曾经在1995 UNLV精确度测试中名列前茅。但1996年后基本停止了开发。2006年,Google邀请Smith加盟,重启该项目。目前项目的许可证是Apache 2.0。该项目目前支持Windows、Linux和Mac OS 等主流平台。但作为一个引擎,它只提供命令行工具。
所谓OCR 即,Optical Character Recognition光学字符识别技术,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。
Tesseract使用C++开发,提供了一系列函数,在官网上还能下载到编译好的应用程序供测试。理论上Tesseract能够识别各种语言和符号,前提是你需要有对应语言的数据文件,官网上也可以下载到一些,例如英文、法文德文等,但没有中文。如果没有对应的语言数据文件,或者你对识别效果有特殊要求,你还以对它进行训练,通过提供图像文件和识别结果文件(box文件),Tesseract能够进行学习。
Tesseract能够读取tiff文件,可以是单色或者灰度的,但只能是非压缩格式的。如果需要读取压缩格式的tiff,需要依赖libtiff,然后重新编译。在Windows平台下,还支持bmp文件,效果不错。
简单试用了一下发现,对英文和数字的识别率还算可以,前提是书写得比较正规,对于一些简单的校验码也能够识别得七七八八。不过另外尝试了一比较变态的校验码(扭曲得比较厉害的),发现几乎无法识别,看来用它实现Anti-CAPTCHA还是有困难,不知道增加一些图像预处理过程会不会好的。另外,识别的速度好像有点慢,对于一个1千个单词左右的BMP文件,花费大约9秒钟时间。
最终测试发现,只要处理的图片上的文字比较大,且清楚,不管是英文还是汉语都是可以识别出来的。
而且,其有现成的语言包:英文包和汉语包等好多种语言支持包。采用英文包时,只能识别英文字符,采用汉语包时,不但可以处理英文字符,还可以处理汉语字符,包括英汉混合字符。