关于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();
} }
原图:
识别结果: