【问题标题】:Android OCR Using Tesseract使用 Tesseract 的 Android OCR
【发布时间】:2015-09-02 10:43:15
【问题描述】:

我正在尝试使用 Tesseract 库在 android 中构建 OCR 应用程序。

附上代码:

public class TessOCR {
    private TessBaseAPI mTess;

public TessOCR() {
    // TODO Auto-generated constructor stub

    mTess = new TessBaseAPI();
    String datapath = Environment.getExternalStorageDirectory() + "/tesseract/";
    String language = "sseg";
    File dir = new File(datapath + "tessdata/");
    if (!dir.exists())
        dir.mkdirs();
    mTess.init(datapath, language);


}

public String getOCRResult(Bitmap bitmap) {

    mTess.setImage(bitmap);
    String result = mTess.getUTF8Text();

    return result;
}

public void onDestroy() {
    if (mTess != null)
        mTess.end();
}

当我在 MainAcitivity 中调用 new TessOCR() 时,它给了我错误

09-02 16:10:56.677 14225-14225/com.example.pulkitmital.swipetabtoolbar E/AndroidRuntime: 致命异常: main 进程:com.example.pulkitmital.swipetabtoolbar,PID:14225 java.lang.IllegalArgumentException: 数据路径必须包含子文件夹 tessdata! 在 com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:344) 在 com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:317) 在 com.example.pulkitmital.swipetabtoolbar.TessOCR.(TessOCR.java:22) 在 com.example.pulkitmital.swipetabtoolbar.Tab1.doOCR(Tab1.java:326) 在 com.example.pulkitmital.swipetabtoolbar.Tab1.access$000(Tab1.java:42) 在 com.example.pulkitmital.swipetabtoolbar.Tab1$3.onClick(Tab1.java:168) 在 android.view.View.performClick(View.java:4785) 在 android.view.View$PerformClick.run(View.java:19884) 在 android.os.Handler.handleCallback(Handler.java:746) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5343) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

但是文件夹已经存在了。

请帮我解决这个问题。

【问题讨论】:

  • 您是否训练了自己的名为sseg.traineddata 的语言文件?训练好的数据文件应该放在一个名为tessdata 的子文件夹中,它应该放在你的tesseract 文件夹中。
  • @rmtheis 是的,我做到了。主要问题是我忘记在清单文件中添加权限
  • 很高兴你能成功。为了帮助其他人,您应该在此处添加您的解决方案作为答案,并选中它旁边的复选标记以选择您自己的答案作为工作解决方案。

标签: android android-studio ocr tesseract


【解决方案1】:

替换这一行:

mTess.init(datapath, language);

与:

mTess.init(datapath + "tessdata/", language);

【讨论】:

  • 我已经做了你告诉我的改变,但它给了我错误“数据路径不存在!”
  • 您可以尝试在请求 mTess.init 后创建此文件夹。可以试试吗?
  • 感谢您的帮助。实际上问题是我忘记在清单文件中添加读取存储的权限。
【解决方案2】:

基本上错误是由于我忘记在清单文件中添加从外部存储读取的权限。

<uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

只需将此行添加到您的 AndroidManifest 即可解决。


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多