如何获取需要在tessbase.init(“目录”,“eng”)中使用的目录?

时间:2015-11-25 22:18:07

标签: java android ocr tesseract

所以我想弄清楚如何使用TessBase,我在baseApi.init(dataPath, "eng")收到错误。我得到的错误是:directory must contain tessdata。我无法弄清楚如何获取包含tessdata的目录。这是包含eng.traineddata的目录的image。这是我的代码:

    Bundle extras = data.getExtras();
    Bitmap photoBitmap = (Bitmap) extras.get("data");
    TessBaseAPI baseApi = new TessBaseAPI();
    //textcaptured.setText(DATA_PATH.toString());/*
    String dataPath = Environment.getExternalStorageDirectory().toString() + "/Android/data/" + getApplicationContext().getPackageName() +  "/";
    textcaptured.setText(dataPath);
    File tessdata = new File(dataPath);
    if (!tessdata.exists() || !tessdata.isDirectory()) {
        throw new IllegalArgumentException("Data path must contain subfolder tessdata!");
    }
    baseApi.init(dataPath, "eng");
    baseApi.setImage(photoBitmap);
    String recognizedText = baseApi.getUTF8Text(); // Log or otherwise display this string...
    baseApi.end();
    textcaptured.setText(recognizedText);

1 个答案:

答案 0 :(得分:1)

我推荐的最简单方式是 自己在SD卡中创建一个文件夹,并在其中放置一个带有子目录tessdata的目录,其中包含eng.tessdata结构,如下所示:

+SdCardOfPhone
--+YourAppName
----+tessdata
------eng.tessdata

现在您可以通过

指向该目录
    String datapath = Environment.getExternalStorageDirectory() + "/YourAppName/";        
    TessBaseAPI tessBaseAPI = new TessBaseAPI();        
    tessBaseAPI.init(datapath, "eng");

您还必须在AndroidManifest.xml文件中包含以下内容

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

出于测试目的,我不建议将eng.tessdata捆绑在项目中,这会增加构建时间和.apk文件的大小(> 17mb)。

将eng.tessdata捆绑在项目中的过程非常复杂,需要自己创建一个新目录,并在运行时将捆绑的数据复制到该目录。