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

标签 java android ocr tesseract

所以我试图弄清楚如何使用 TessBase,但我在 baseApi.init(dataPath, "eng") 处收到错误。我得到的错误是:目录必须包含 tessdata。我不知道如何获取包含 tessdata 的目录。这是image包含 eng.traineddata 的目录。这是我的代码:

    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);

最佳答案

我推荐的最简单方法是 自己在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 bundle 在项目中,这会增加构建时间和 .apk 文件的大小(>17mb)。

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

关于java - 如何获取 tessbase.init 中需要使用的目录 ("directory", "eng")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33927400/

相关文章:

android - 具有挂起功能的执行时间存在巨大差异

android - 你可以在RelativeLayout中居中一个按钮吗?

c++ - 另一种语言的 Tesseract setVariable 白名单

iphone - iPhone是否有任何手写识别库?

java - 编写一个程序来计算两个数的余数,而不使用 % 运算符?在 java

java - 带有图像和文本的 JList : Where text is coming from an ArrayList<String>

java - 立即执行作业

java - 如何使用 netbeans 将 jLabel 从 Jframe 的一侧移动到另一侧

android - 错误 - 找不到与给定名称匹配的资源(在 'MvxItemTemplate' 处,值为 '@layout/WorkViewItem')

c++ - 如何训练 svm 对英文字母表的图像进行分类?