標籤:
網上大多是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
Android Studio裡面配置Tesseract