Android 使用 Tesseract 进行 OCR
Android OCR Using Tesseract
我正在尝试使用 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﹕ FATAL EXCEPTION: main
Process: com.example.pulkitmital.swipetabtoolbar, PID: 14225
java.lang.IllegalArgumentException: Data path must contain subfolder tessdata!
at com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:344)
at com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:317)
at com.example.pulkitmital.swipetabtoolbar.TessOCR.(TessOCR.java:22)
at com.example.pulkitmital.swipetabtoolbar.Tab1.doOCR(Tab1.java:326)
at com.example.pulkitmital.swipetabtoolbar.Tab1.access[=13=]0(Tab1.java:42)
at com.example.pulkitmital.swipetabtoolbar.Tab1.onClick(Tab1.java:168)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at 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,它就会得到解决。
我正在尝试使用 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﹕ FATAL EXCEPTION: main Process: com.example.pulkitmital.swipetabtoolbar, PID: 14225 java.lang.IllegalArgumentException: Data path must contain subfolder tessdata! at com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:344) at com.googlecode.tesseract.android.TessBaseAPI.init(TessBaseAPI.java:317) at com.example.pulkitmital.swipetabtoolbar.TessOCR.(TessOCR.java:22) at com.example.pulkitmital.swipetabtoolbar.Tab1.doOCR(Tab1.java:326) at com.example.pulkitmital.swipetabtoolbar.Tab1.access[=13=]0(Tab1.java:42) at com.example.pulkitmital.swipetabtoolbar.Tab1.onClick(Tab1.java:168) at android.view.View.performClick(View.java:4785) at android.view.View$PerformClick.run(View.java:19884) at android.os.Handler.handleCallback(Handler.java:746) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5343) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) at 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,它就会得到解决。