使用Tesseract的Android OCR

使用Tesseract的Android OCR,android,android-studio,ocr,tesseract,Android,Android Studio,Ocr,Tesseract,我正在尝试使用Tesseract库在android中构建一个OCR应用程序 以下是随附的代码: public class TessOCR { private TessBaseAPI mTess; public TessOCR() { // TODO Auto-generated constructor stub mTess = new TessBaseAPI(); String datapath = Environment.getExternalStorage

我正在尝试使用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.67714225-14225/com.example.pulkitimal.swipatebtoolbar E/AndroidRuntime﹕ 致命异常:主 进程:com.example.pulkitimal.swipatebtoolbar,PID:14225 java.lang.IllegalArgumentException:数据路径必须包含子文件夹数据 位于com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:344) 位于com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:317) 位于com.example.pulkitimal.swipatebtoolbar.TessOCR.(TessOCR.java:22) 位于com.example.pulkitimal.swipatebtoolbar.Tab1.doOCR(Tab1.java:326) 位于com.example.pulkitimal.swipatebtoolbar.Tab1.access$000(Tab1.java:42) 位于com.example.pulkitimal.swipatebtoolbar.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)

但是文件夹已经在那里了


请帮助我解决此问题。

替换此行:

mTess.init(datapath, language);
与:

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

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

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

只要将这一行添加到您的AndroidManifest中,它就会得到解决



我已经做了您告诉我的更改,但它给我的错误是“数据路径不存在!”。您可以在请求mTess.init后尝试创建此文件夹。你能试试吗?谢谢你的帮助。实际上,问题是我忘了添加读取清单文件中存储的权限。您是否培训了名为
sseg.traineddata
的语言文件?traineddata文件应该放在名为
TesserData
的子文件夹中,该子文件夹应该放在您的
tesseract
文件夹中。@rmtheis是的,我已经完成了。主要的问题是我忘了在清单文件中添加权限,很高兴你们能让它工作。为了帮助他人,您应该在此处添加您的解决方案作为答案,并选中其旁边的复选标记以选择您自己的答案作为工作解决方案。