首页 > 代码库 > Android文字识别之tesseract的使用

Android文字识别之tesseract的使用

关于tesseract识别工具有Google提供的版本有tesseract-android-tools,不过还有一个tesseract-two也是非常好用的,这里我们使用的是tesseract-two。tesseract是用c++实现的,需要封装Java API用于Android平台的调用。所以在使用tesseract-two之前得下载Android-NDK ,下载NDK之后,解压到自己电脑的一个文件夹下,配置eclipse引用下来的NDK。

技术分享

 

解压下载来的NDK,因为要使用ndk-build该命令又为了方便起见,不用CD来CD去的~配置一下环境变量,在path中追加ndk所解压的目录。

技术分享

 

tesseract-two其实是Tesseract Tools for Android的一个git分支,选择它是由于操作简单,并且集成了leptonica,一个图形处理工具。所以可以在gitbub上下载来

https://github.com/rmtheis/tess-two

也可以通过git来获取想要的资源。

http://git-scm.com/download/win

资源都准备好了,然后我们使用NDK编译(Windows下的CMD进入),敲入如下的命令(编译的时间会有点久)

cd tess-two  ndk-build  android update project -t 1 --path .  ant release      cd ..  cd eyes-two  ndk-build  android update project -t 1 --path .  ant release  

 

eclipse里面的Android项目中导入编译好的类库,共三个项目,tess-two,tess-two-test 以及eyes-two。其中tess-two和eyes-two为android lib项目,供其它项目引用。

技术分享

 

然后编写Java代码,但是发现会出错。主要由于在/mnt/sdcard/目录下缺少语言包,将tessdata下面的两个语言包放到sd卡的根目录下面就可以了~

import com.googlecode.tesseract.android.TessBaseAPI;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.util.Log;public class MainActivity extends Activity {        private static final String TESSBASE_PATH = "/mnt/sdcard/";      private static final String DEFAULT_LANGUAGE = "eng";      private static final String CHINESE_LANGUAGE = "chi_sim";      private static final String TAG = "tesseract";        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                TessBaseAPI baseApi=new TessBaseAPI();        baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);          baseApi.setPageSegMode(TessBaseAPI.PSM_AUTO);                 //从资源里获取一张图片        Bitmap  bitmap = BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.ocr);        baseApi.setImage(bitmap);                         final String outputText = baseApi.getUTF8Text();         Log.i(TAG, "识别结果:" + outputText);        baseApi.end();            }    }

 

原图:

技术分享

识别结果:

技术分享

 

Android文字识别之tesseract的使用