无法将 eng.traineddata 添加到我的 Tesseract 项目 Android 5.0

Cannot add a eng.traineddata to my Tesseract project Android 5.0

我目前正在尝试将 Tesseract OCR 实施到我的项目中,但遇到了十字路口。我遵循了 https://github.com/rmtheis/tess-two 的所有指示,并卡在了该项目的实际实施部分。我的当前代码 运行ning 是:

 TessBaseAPI baseApi = new TessBaseAPI();
        baseApi.init(TESS_DATA_FILE_PATH, "eng");
        baseApi.setImage(icon);
        String recognizedText = baseApi.getUTF8Text();
        baseApi.end();

现在 TESS_DATA_FILE_PATH 是当前的问题。我一直在尝试将 eng.traineddata 文件添加到我的项目中,但我根本不知道在哪里或如何做。

我尝试过的事情:

  1. 我在资产文件夹中添加了文件 eng.traineddata,但它是只读的,我无法在 运行 时更改它。所以这行不通
  2. 我尝试以其他方式添加 运行ning 项目,运行ning adb push 命令以将其直接添加到设备,但这行不通,因为我将推送此应用面向大众。

所以我正在寻找的是如何将 eng.traineddata 添加到我的项目中的答案。我在 init 调用的 TESS_DATA_FILE_PATH 部分放置了什么。

旁注: 在上面提供的 link 的所有步骤结束时,我确实收到了 BUILD SUCCESSFUL 电话。

我已成功将语言包添加到我的项目中,并且 运行 在我的 android 项目中测试了两个。

这里是我如何做的代码:

这就是设置文件路径,并添加 traineddata 文件夹

public void setupOCR(){

    File folder = new File(Environment.getExternalStorageDirectory() + "/classlinkp/tessdata");
    if (!folder.exists()) {
        folder.mkdirs();
    }

    File saving = new File(folder, "eng.traineddata");
    try {
        saving.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

    InputStream stream = null;
    try {
        stream = mContext.getAssets().open("eng.traineddata", AssetManager.ACCESS_STREAMING);
    } catch (IOException e) {
        e.printStackTrace();
    }


    if (stream != null){
        copyInputStreamToFile(stream, saving);
    }
}

以下是我保存 eng.traineddata 文件的方法:

  private void copyInputStreamToFile( InputStream in, File file ) {
    try {
        OutputStream out = new FileOutputStream(file);
        byte[] buf = new byte[1024];
        int len;
        while((len=in.read(buf))>0){
            out.write(buf,0,len);
        }
        out.close();
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

保存方法收集自: