android app来实现通过手机照相识别文本信息。后来查到网上有现成的Fork of Tesseract Tools for Android。调试了两天才把程序调通,现在看起来过程还是挺简单明了的。
我做这个工程的时候,主要参考了下面一些资料
1、android摄像头获取图像,参考了stopit的博文
这里他描述的很简单详细
2、ocr这块我参考了黑暗伯爵和gautam的博文
黑暗伯爵的博文:
gautam的博文:http://gaut.am/making-an-ocr-android-app-using-tesseract/
非常感谢这三位位牛人提供的指导,但我觉得有些初学者刚做起来还是有点不知所措,所以我想再写一篇傻瓜式的文章。如果有错误的地方希望大家多多指点。
好吧,那么我们开始创建我们的工程
1、编译tess-two
(1)下载NDK,安装NDK,将NDK根目录加入到环境变量PATH
(2)在https://github.com/rmtheis/tess-two下载tess-wo。其中有三个子目录eyes-two、tess-two-test、tess-two。这里我们后面只用到tess-two
(3)在命令行中进入tess-two的目录下。 输入ndk-build
其实这步理论上也可以省略,黑暗伯爵的博文中有编译完成的tess-two供大家使用,不过我先采用他的没有调试成功,所以我建议大家还是自己编译。NDK我是直接百度下载的,操作系统是win7,后面采用NDK进行编译的时候,编译了很长时间,大家耐心等等。
2、将tess-two当做library文件来使用
(1)将tess-two导入到eclipse。 File -> Import -> Existing Projects into workspace -> tess-two directory.
(2)右击该工程 Android Tools -> Fix Project Properties,
(2)右击该工程 Properties -> Android ,在project build target中,选择一个较新的android版本,并在Is Library前点上勾,点击OK。
Fix Project Properties可以消除的一些错误,我却没能完成。后来我在右击该工程->build path->configure build path 的soure中添加了res和gen文件夹,在library中add library加入了android class path container和JRE8。这样tess-two工程才没有错误了。
3、在自己的工程中,把tess-two当做一个library project
(1)在自己的工程中右击该工程-> Properties -> Android -> Library -> Add, 选择 tess-two.这样我们就可以在自己的工程中使用TessBaseAPI了。
到这基本就算是成功了。
(2)使用TessBaseAPI必要的代码
//新建一个TessBaseAPI
TessBaseAPI baseApi=new TessBaseAPI();
//初始化API
//android下面,tessdata肯定得放到sd卡里了,如果直接将tessdata文件夹放在SD卡得根目录下,我们这可以这样写初始化
File path = Environment.getExternalStorageDirectory();//获取SD卡根目录
baseApi.init(path.getAbsolutePath(),"eng");//英文是eng,简体中文是chi_sim,目测应该就是tessdata文件夹中.tessdata文件的文件名
//设置要ocr的图片bitmap,这个我是采用摄像头获得的图片位图,大家也可以从文件获得,只要得到bitmap就行
baseApi.setImage(bitmap);
//根据Init的语言,获得ocr后的字符串
String text= baseApi.getUTF8Text();
//释放bitmap
baseApi.clear();
//如果连续ocr多张图片,这个end可以不调用,但每次ocr之后,必须调用clear来对bitmap进行释放
//释放native内存
baseApi.end();
4、下载tessdata
tessdata数据文件决定了TessBaseAPI可以识别那些文字。下载地址:http://code.google.com/p/tesseract-ocr/downloads/list
我们将数据文件解压后,直接将其中的tessdata文件夹放入SD卡中,如果不放入根目录下,API初始化代码可以改成如baseApi.init("mnt/sdcard","eng"),其中mnt/sdcard为tessdata文件夹所在的目录。注意,放入SD卡的时候必须有tessdata文件夹,没有该文件夹会报错。
大概这些了,希望大家多多指点,如果在调试该程序的过程中遇到一些问题,也可以一起讨论,谢谢!