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

标签 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 命令以将其直接添加到设备,但这行不通,因为我会将此应用程序推向大众。

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

旁注: 在上面提供的链接中的所有步骤结束时,我确实收到了 BUILD SUCCESSFUL 调用。

最佳答案

我已经成功将语言包添加到我的项目中,并在我的android项目上运行了tess 2。

这是我如何做到的代码:

这是设置文件路径,并添加 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

关于android - 无法将 eng.traineddata 添加到我的 Tesseract 项目 Android 5.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33160176/

相关文章:

css - 从纵向到横向 css Mobile 时需要刷新页面

android - Android 仿生 libc 中缺少 adjtime()

assembly - ARM Neon 汇编器 - 处理溢出寄存器

android - 再次关于 SoundPool 的内存问题

Android:错误:使用未声明的标识符 'fseeko'

java - Android - 如何在每次打开应用程序时启动完全相同的 Activity ?

Android,共享库依赖

android ImageButton 点击

javascript - 确定用户是否在移动设备上的最简单方法

ios - 空气原生扩展 FDT