Tesseract On Android第一篇:开发环境搭建

开发环境说明: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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值