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

How to get the directory that needs to be used in tessbase.init("directory", "eng")?

所以我想弄清楚如何使用 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);

我推荐的最简单方法是 自己在你的 sdcard 中创建一个文件夹,并在其中放置一个包含子目录 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的过程比较复杂,需要自己新建一个目录,然后在运行时将打包后的数据拷贝到那个目录下。