自己编译 tess-two几个库文件用于android OCR开发并合入你的工程项目

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

你可能感兴趣的:(Android,ocr)