Android OCR使用Tesseract

3
我将尝试使用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();
}

当我在我的MainActivity中调用new TessOCR()时,它给了我一个错误。
09-02 16:10:56.677 14225-14225/com.example.pulkitmital.swipetabtoolbar E/AndroidRuntime: 致命异常: 主要进程 进程: 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(Native Method) 在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
@rmtheis 是的,我已经做到了。主要问题是我忘记在清单文件中添加权限。 - Corrupt
很高兴你解决了问题。为了帮助其他人,你应该在这里添加你的解决方案,并勾选旁边的复选框选择你自己的答案作为工作解决方案。 - rmtheis
2个回答

1
替换此行:</p>
mTess.init(datapath, language);

with :

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

我已经按照你说的进行了更改,但是它给出了错误提示:“数据路径不存在!” - Corrupt
在调用 mTess.init 后,您可以尝试创建这个文件夹。您可以试试吗? - atasoyh
谢谢您的帮助。实际上问题是我忘记在清单文件中添加读取存储权限。 - Corrupt

0

基本上,错误是因为我忘记在清单文件中添加读取外部存储权限。

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

只需将此行添加到您的AndroidManifest中,问题就会得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接