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

时间:2015-10-15 23:27:32

标签: android mobile android-ndk ocr tesseract

我目前正在尝试将Tesseract OCR应用到我的项目中,但已经走到了一条交叉路口。我按照https://github.com/rmtheis/tess-two的所有指示进行了操作,并且卡在了该项目的实际执行部分。我运行的当前代码是:

 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. 在assets文件夹中我添加了文件eng.traineddata,但这是只读的,我无法在运行时更改它。所以这不会工作
  2. 我尝试添加其他运行项目的方法,并运行adb push命令将其直接添加到设备中,但由于我将此应用程序推向大众,因此无法正常工作。
  3. 所以我要找的是如何将eng.traineddata添加到我的项目中。我在init调用的TESS_DATA_FILE_PATH部分放置了什么。

    先谢谢。

    附注: 我确实在上面提供的链接的所有步骤结束时收到BUILD SUCCESSFUL电话。

1 个答案:

答案 0 :(得分:1)

我已成功将语言包添加到我的项目中,并在我的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();
    }
}

保存方法来自:https://stackoverflow.com/a/28131358/3781164