开发环境说明:Android Studio2.3+Tesseract3.05
一、获取谷歌开源OCR引擎动态库
1. 原生态编译
原生态编译会涉及很多的源文件,编译过程可以参考这篇外文博客:
http://www.codepool.biz/making-an-android-ocr-application-with-tesseract.html
出现的问题(待解决):
(1) 下载的资料包里面,引导步骤和这篇博客描述的不太一样
(2) 编译libjpeg的时候,提示源码目录里面没有“编译规则”(里面没有android.mk文件)
因此,我们直接编译GitHub上面的开源项目源码就可以了,原生态编译待更新。
2. 直接编译Github上面的开源项目
Github上面有一个优秀的开源项目,解决了安卓平台上使用tesseract繁琐地编译各种源码包的问题。项目中集成了tesseract源码及其所需要的依赖库,还编写好了android.mk文件,直接使用NDK进行编译即可得到安卓平台能够使用的动态库文件(xxx.so)。
开源项目Github下载地址:https://github.com/rmtheis/tess-two
微软收购Github之后,原本的Github上大部分的数据资源地址都进行了迁移(听说都迁到Git-tow上了),这个地址已经失效,不过我已经提前下载好源码包了,文末有下载链接(Tess-two-master.rar)。解压到当前文件夹,之后的目录结构如下图:
README.md文件里面有关于整个目录下所有资源的介绍,从这个文件里面,可以获取到关于这个开源项目的几条重要信息:
(1) Tesseract版本号和各种依赖库以及依赖库的版本号
(2) 要求Android 2.3系统以上
(3) 在安卓系统中,字库存放的目录有着严格的规定:必须存放在根目录下的tessdata目录里面。
(4) 如何使用Android Studio进行编译、如何在安卓系统中使用tesseract
(5) 获取资料文档的链接地址
(6) 其他
注:解压之后的这个目录很重要,接下来的编译操作是基于这个目录进行的。
编译生成动态库的两种方式
2.1)直接将源码集成到AS[ Android Studio简写为AS ],然后使用AS进行编译
这种方式是将整个tess-two目录拷贝到AS工程里面,然后修改便编译规则,通过AS编译器使用NDK进行编译,这种方式编译容易出错。
2.2)单独编译
在Windows使用NDK命令进行单独编译,编译得到动态库之后,再拷贝到AS工程里面进行库的应用。使用这种方式就比较简单,也不容易出错。接下来,详细介绍编译过程。
二、NDK编译tesseract
使用NDK编译tesseract,得到共享库文件,才能集成到Android Studio中去使用。首先新建一个目录来存放最终的结果文件,比如我新建了一个目录“mytess”(随便在哪里新建都可以,就是新建一个普通的目录文件而已),该目录用于存放编译得到的最终库文件。
1. 打开DOS命令行,进入tess-two目录,如下图:
2. 使用NDK进行编译
NDK版本不能太高,并且要选合适的版本,编译的时候才不会出错。经过多次尝试,使用这个压缩包:android-ndk-r13b-windows-x86_64.zip 能够顺利编译(文末有下载链接),并且得到的库也能使用。直接将该压缩包解压到某个目录下即可,最好是放到Android Studio的安装包管理目录下,便于查找(其实解压到哪里都可以,方便自己查找即可),比如:
因为要使用ndk命令来进行编译,所以,要么将可执行文件的路径添加到系统环境变量里面,重启windows生效,要么在使用的时候,指定可执行文件的绝对路径(这里笔者使用第二种方式,指定可执行文件命令坐在的绝对路径)。
在编译之前,先简单分析一下编译的脚本文件。
2.1)分析编译脚本
进入jni目录下。也就是这个目录tess-two-master\tess-two\jni
简单分析两个xxx.mk文件,如下。
Android.mk :用于指定相关的源码目录,内容如下
LOCAL_PATH : = $(call my-dir) TESSERACT_PATH := $(LOCAL_PATH)/com_googlecode_tesseract_android/src LEPTONICA_PATH := $(LOCAL_PATH)/com_googlecode_leptonica_android/src LIBJPEG_PATH : = $(LOCAL_PATH)/libjpeg LIBPNG_PATH : = $(LOCAL_PATH)/libpng
# Just build the Android.mk files in the subdirs include $(call all-subdir-makefiles) |
Application.mk:用于指定,编译生成哪些目标平台可用的库
APP_STL := gnustl_static APP_ABI := armeabi armeabi-v7a x86 mips APP_OPTIM := release APP_PLATFORM := android-9 APP_CPPFLAGS += -fexceptions -frtti NDK_TOOLCHAIN_VERSION := clang
|
arm架构的手机CPU是目前主流架构,几乎占有了100%的市场占有率。下面是不同的CPU架构简单的对比
(1) mips/mips64:现在已经很少用于手机了,可以忽略 (2) x86/x86_64 :x86架构的手机市场占有率为1%一下 (3) armeabi :这是比较老,比较旧的版本,没有对浮点数运算的硬件支持 (4) meabi-v7a : 目前的主流,2011年以后生产的大部分安卓设备都使用它 (5) arm64-v8a :第8代,64位的ARM处理器,比较少的设备在使用。 |
在这个脚本里面,指定编译生成四种平台可用的库文件,当然我们也可以自由删减,加快编译速度,修改这一行即可(记得不同的平台选项,使用空格隔开)。
APP_ABI := armeabi armeabi-v7a x86 mips
2.2)编译
使用DOS命令行进入tess-two目录,输入编译命令进行编译,编译命令为:
D:\andriod_studio\NDK\android-ndk-r13b\ndk-build.cmd -j8 |
注:NDK路径---D:\andriod_studio\NDK\android-ndk-r13b,如下:
参数:-j8是为了加快编译速度
DOS命令行如下
编译中
编译完毕
编译完之后,tess-tow目录下多了一个目录libs,该目录里面有已经编译好的几个目标平台可用的共享库。
对于安卓移动设备来说,我们只需要关心这两个目录即可:armeabi、armeabi-v7a。这里把这四个目录都拷贝出来,放到mytess目录下。
三、AS工程中使用tesseract相关的JAVA源码以及动态库的引用
方式1:直接集成源码
Tesseract集成到AS里面,除了需要上面编译得到的动态库文件之外,还需要集成相关的JAVA源码(以JNI的方式来使用),这部分源码位于:E:\tess-two-master\tess-two\src\com,也就是整个googlecode目录下的xxx.java文件。
配置的时候,直接将整个googlecode目录复制到AS项目里面的src/main/java目录下即可。可将这部分源码复制到“mytess”目录里面去(后面具体的使用这种方式配置AS工程的时候会用到)。
方式2:打包相关源码
可以先将这部分源码打包,之后在AS工程中导入jar包即可。xxx.jar只里面只有xxx.class文件和清单文件,不包含任何资源文件。 那么该如何打包? 答:借助Android Studio来进行打包,所以接下来,首先要完成这部分工作。
对比两种方式:如果直接使用源码,那么可以自己修改某些源码。如果打包成jar,那么只能查看而修改不了,但是打包成jar的话,优点是方便移植。不管是方式1还是方式2,都需要依赖动态库文件xxx.so。
四、使用AS打包源码
1. 新建工程
首先,新建一个简单的AS工程,工程名为MakeJar,如下:
一路选择默认设置,最后选择一个空的Activity模板,完成创建,如下:
2. 新建类库模块并编译
2.1) 新建一个类库模块
选择Android Library
这里可以使用默认的库模块名,也可以自由更改。
创建完成
这个模块和app模块是同一级的,并且具有相似的目录结构。
这样就可以建立一个类库了,把要打包的java源码放到类库的xxx/src/main/java目录下,因此,我们把Googlecode目录复制进去。复制过来之后,需要同步一下工程,就可以看到添加进来的源码了。
最后进行打包操作,如下:
等待执行完成后,类库源码模块就被打包成了jar包,默认的输出目录是类库的mylibrary/build/intermediates/bundles/debug目录下,并且默认的名称为classes.jar。如下(文末附有下载这个工程的链接):
把classes.jar拷贝出来,放到mytess目录下。
到此为止,前期工作已经做好了,所有需要用得到资源文件,已经都统一拷贝到了mytess目录下。该目录下一共就有三大类文件:
(1)动态库文件
(2)tesseract相关源码文件[xxxx.java]
(3)jar包[xxx.class]
目录里面的内容如下(文末附有下载这个目录的链接):
接下来,就可以开始配置工程(分别使用上文中的方式1和方式2)。
下一篇:Tesseract On Android第二篇:配置AS工程
附:各种资源文件下载链接
开源项目tess-two-master源码包下载链接:https://pan.baidu.com/s/1VS9qB-MAvf6qtbZ_IlkdmA
NDK下载链接 :https://developer.android.google.cn/ndk/downloads/
MakeJar工程下载链接 :https://pan.baidu.com/s/1yn_KsUsago3YPhqMakWXUw
mytess目录下载链接 :https://pan.baidu.com/s/1EisVKv6aVybu5df3D5dm_g