關於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();
} }
原圖:
識別結果: