Android Studio里面配置Tesseract


網上大多是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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM