1 首先需要到 github下载: tess-two 源码。https://github.com/rmtheis/tess-two
2 把下载后的tess-two-master.zip解压到D:\搜狗高速下载\tess-two-master
3 进入windows cmd 命令提示符模式
4 进入tess-two 目录下去,d:;cd D:\搜狗高速下载\tess-two-master\tess-two
5: 开始编译 d:\android-ndk-r14b\ndk-build.cmd -j4
这样系统会开始编译tess-ocr 需要的库
armeabi armea-v7a mips x86 4种不同的so,编译时间大约20分钟。
编译好的libjpgt.so,liblept.so,libpngt.so,libtess.so会保存在tess-two\libs目录下
如果需要定制不同的版本,比如一些64位的版本 arm64-v8a x86_64 mips64
那么就需要修改jni\Appliction.mk 为如下,那么系统就会编译7种不同的so
APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a x86_64 mips64
当然这些so 也可以和你的项目一起在android studio 里去编译。
具体操作如下:
1 把 tess-two 目录复制到你的项目的根目录下。
2 在settings.gradle 文件里添加include ‘:tess-two’
3 要编译so 就和一般的jni 配置一样去配置tess-two 下的build.gradle,使得它能编译jni。
这个过程比较长,这个的好处就是方便在线编译并修改一些算法,但是当要进行clean 项目的时候,就比较耗时间,大约全部编译一次 7个so,要40到50分钟。
4 把tess-two添加到项目里,在app 的build.gradle里添加下面
dependencies {
...
compile project(':tess-two')
}
这个整个tess-two 就成为你项目的一个module了。
5 Tess-two接口调用如下:
把要识别的图片,解码为bmp 格式后传给下面的doOcr(textbitmap,”/chi_sim”);
import com.googlecode.tesseract.android.TessBaseAPI;
public static String getSDPath() {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
if (sdCardExist) {
sdDir = Environment.getExternalStorageDirectory();// 获取外存目录
}
return sdDir.toString();
}
public String doOcr(Bitmap bitmap, String language) {
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(getSDPath(), language);
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
baseApi.setImage(bitmap);
String text = baseApi.getUTF8Text();
baseApi.clear();
baseApi.end();
return text;
}
要让系统能使用ocr,还需要把相关字符训练数据放到 sdcard 下的tessdata/ 目录下。
相关资源文件也可以到如下网址去下:
英文字符,eng.traineddata https://github.com/tesseract-ocr/langdata
中文字符,chi_sim.traineddata http://download.csdn.net/download/fu_shuwu/10021639