Android OCR:应用程序在 OCR 功能(或尝试加载库)时崩溃
Android OCR: Application crashes at OCR function(or trying to load library)
我是一名学生,目前正在 Android Studio 1.5 上为 android 开发 OCR 功能。
我在网上找到了很多很好的例子,并一直在尝试在 Android Studio 上实现它。我已经配置了 NDK 构建,应用程序能够在 Eclipse(juno) 和 Android Studio 上 运行。
我的代码可以在这里找到:https://github.com/TheWall89/AndrOCR
但是在 Android Studio 上,每当我使用应用程序的 OCR 功能时,应用程序就会崩溃。
我已经在线研究并在我的代码中实施了 Crashlytics,以找出崩溃的原因。
以下是 Crashlytics 中显示的输出:
以下是致命异常的原始代码输出:java.lang.IllegalStateException:
Fatal Exception: java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View.onClick(View.java:4237)
at android.view.View.performClick(View.java:5181)
at android.view.View$PerformClick.run(View.java:20887)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5938)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View.onClick(View.java:4232)
at android.view.View.performClick(View.java:5181)
at android.view.View$PerformClick.run(View.java:20887)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5938)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.matpergo.androcr-2/base.apk"],nativeLibraryDirectories=[/data/app/com.matpergo.androcr-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libpngt.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:43)
at com.matpergo.androcr.ShowImage.initTess(ShowImage.java:187)
at com.matpergo.androcr.ShowImage$OCR.onPreExecute(ShowImage.java:567)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at com.matpergo.androcr.ShowImage.startOCR(ShowImage.java:204)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View.onClick(View.java:4232)
at android.view.View.performClick(View.java:5181)
at android.view.View$PerformClick.run(View.java:20887)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5938)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
正如输出所指出的,我假设错误是由 InvocationTargetException 和 UnsatisfiedLinkError 错误引起的。
我已经在网上搜索了相关的解决方案;对于 UnsatisfiedLinkError 错误;建议是应用程序没有在 OCR 功能上失败,而是加载库失败().
但是,我未能按照指定实施解决方案,无法使我的应用程序正常工作。
任何 suggestions/solutions 将不胜感激 ~
UnsatisfiedLinkError error
表示您没有适当的 JNI 或本机 .so 文件在适当的位置
.so 文件必须放在 app->JniLibs->.so 文件下。
已解决:
问题在于libs文件夹不在我的tess-two文件夹中。 (libs文件夹本来应该在tess-two里面,我之前为了别的目的去掉了)
"libpngt.so" 应位于:
-> 库 -> tess-two -> 库 -> armeabi-v7a -> libpngt.so
感谢到目前为止的所有回复,干杯:)
我是一名学生,目前正在 Android Studio 1.5 上为 android 开发 OCR 功能。
我在网上找到了很多很好的例子,并一直在尝试在 Android Studio 上实现它。我已经配置了 NDK 构建,应用程序能够在 Eclipse(juno) 和 Android Studio 上 运行。
我的代码可以在这里找到:https://github.com/TheWall89/AndrOCR
但是在 Android Studio 上,每当我使用应用程序的 OCR 功能时,应用程序就会崩溃。
我已经在线研究并在我的代码中实施了 Crashlytics,以找出崩溃的原因。
以下是 Crashlytics 中显示的输出:
以下是致命异常的原始代码输出:java.lang.IllegalStateException:
Fatal Exception: java.lang.IllegalStateException: Could not execute method of the activity
at android.view.View.onClick(View.java:4237)
at android.view.View.performClick(View.java:5181)
at android.view.View$PerformClick.run(View.java:20887)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5938)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View.onClick(View.java:4232)
at android.view.View.performClick(View.java:5181)
at android.view.View$PerformClick.run(View.java:20887)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5938)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.matpergo.androcr-2/base.apk"],nativeLibraryDirectories=[/data/app/com.matpergo.androcr-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libpngt.so"
at java.lang.Runtime.loadLibrary(Runtime.java:366)
at java.lang.System.loadLibrary(System.java:989)
at com.googlecode.tesseract.android.TessBaseAPI.<clinit>(TessBaseAPI.java:43)
at com.matpergo.androcr.ShowImage.initTess(ShowImage.java:187)
at com.matpergo.androcr.ShowImage$OCR.onPreExecute(ShowImage.java:567)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at com.matpergo.androcr.ShowImage.startOCR(ShowImage.java:204)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at android.view.View.onClick(View.java:4232)
at android.view.View.performClick(View.java:5181)
at android.view.View$PerformClick.run(View.java:20887)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5938)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
正如输出所指出的,我假设错误是由 InvocationTargetException 和 UnsatisfiedLinkError 错误引起的。
我已经在网上搜索了相关的解决方案;对于 UnsatisfiedLinkError 错误;建议是应用程序没有在 OCR 功能上失败,而是加载库失败(
但是,我未能按照指定实施解决方案,无法使我的应用程序正常工作。
任何 suggestions/solutions 将不胜感激 ~
UnsatisfiedLinkError error
表示您没有适当的 JNI 或本机 .so 文件在适当的位置
.so 文件必须放在 app->JniLibs->.so 文件下。
已解决:
问题在于libs文件夹不在我的tess-two文件夹中。 (libs文件夹本来应该在tess-two里面,我之前为了别的目的去掉了)
"libpngt.so" 应位于: -> 库 -> tess-two -> 库 -> armeabi-v7a -> libpngt.so
感谢到目前为止的所有回复,干杯:)