網上大多是eclipse的項目,因為我用的是AS,所以說一下怎么配置。
身份證圖片資料來自百度。
一、導入相關文件
其實我們不用自己編譯,可以把別人項目編譯好的jar包和so庫直接拿來用。因為識別的效果只與字庫有關,要識別什么字體自己選用字庫就行。
1、新建libs文件夾,導入jar包
2、在main文件夾下新建jniLibs文件夾,把armxxxx兩個文件復制過去。
注意so庫不能亂放,不然會出現java.lang.UnsatisfiedLinkError異常。
3、我已經在github上提供了so庫和jar包的資源了,可以直接下載使用。
配置好的路徑:

二、實例代碼
1、要實現識別功能,手機下要放一個tessdata文件夾,這是我們的字庫。我的github項目上提供了下載,包括中英文。
2、直接在代碼中調用api,傳入字庫路徑和字庫名字
3、傳入圖片,獲取結果
4、識別需要一點時間,為了不讓app開啟就卡死,我用了handler
5、因為要讀取根目錄下的tessdata文件,所以app得加上讀取SD卡的權限,不然會報錯
public class MainActivity extends AppCompatActivity {
private Bitmap srcBitmap;
EditText editText;
String result;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
editText.setText(result);
}
};
editText = (EditText)findViewById(R.id.editText);
srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
new Thread(new Runnable() {
@Override
public void run() {
result = doOcr(srcBitmap,"/chi_sim");
Message msg = new Message();
handler.sendMessage(msg);
}
}).start();
}
/**
* 進行圖片識別
*
* @param bitmap
* 待識別圖片
* @param language
* 識別語言
* @return 識別結果字符串
*/
public String doOcr(Bitmap bitmap, String language) {
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(getSDPath(), language);
// 必須加此行,tess-two要求BMP必須為此配置
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
baseApi.setImage(bitmap);
String text = baseApi.getUTF8Text();
baseApi.clear();
baseApi.end();
return text;
}
/**
* 獲取sd卡的路徑
*
* @return 路徑的字符串
*/
public static String getSDPath() {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED); // 判斷sd卡是否存在
if (sdCardExist) {
sdDir = Environment.getExternalStorageDirectory();// 獲取外存目錄
}
return sdDir.toString();
}
}
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.binbin.tesseracttest.MainActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/test"
android:layout_centerHorizontal="true"
android:layout_marginTop="103dp"
android:id="@+id/imageView" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="識別結果"
android:id="@+id/editText"
android:layout_below="@+id/imageView"
android:layout_centerHorizontal="true"
android:layout_marginTop="99dp" />
</RelativeLayout>
權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
三、效果圖

最后是Github上的項目地址:
https://github.com/wzb19960208/TesseractSample
