Android OCR:应用在OCR功能(或尝试加载库)时崩溃

4

我是一名学生,目前正在Android Studio 1.5上开发OCR功能。

我在网上找到了许多很好的例子,并尝试在Android Studio上实现它。我已经配置了NDK构建,该应用程序能够在Eclipse(juno)和Android Studio上运行。

我使用的代码可以在这里找到:https://github.com/TheWall89/AndrOCR

但是,在Android Studio上,每当我到达应用程序的OCR功能时,应用程序就会崩溃。

我在网上进行了研究,并在我的代码中实现了Crashlytics以找出崩溃的原因。

以下是Crashlytics显示的输出:

enter image description here

enter image description here

以下是致命异常的原始代码输出:java.lang.IllegalStateException:
    Fatal Exception: java.lang.IllegalStateException: Could not execute method of the activity
       at android.view.View$1.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$1.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$1.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功能上失败,而是无法加载库(Android Tesseract App crashes on OCR Function)。
然而,我未能按照规定实施解决方案,也无法使我的应用程序适当地工作。
任何建议/解决方案将不胜感激~
2个回答

2
UnsatisfiedLinkError错误表示您没有将适当的JNI或本地.so文件放置在正确的位置。
.so文件必须放在app->JniLibs->.so文件下。

感谢您的回复。我的应用程序文件夹/主项目下没有JniLibs文件夹,我需要创建一个吗?另外,我从哪里获取.so文件? - Donovan Tan
@DonovanTan,我的回答有帮到你吗? - KOTIOS

2

已解决:

问题出在我的tess-two文件夹中没有libs文件夹。(libs文件夹应该最初在tess-two内,我之前为了其他目的而删除了它)

"libpngt.so" 应位于: -> libraries -> tess-two -> libs -> armeabi-v7a -> libpngt.so

感谢到目前为止所有的回复,谢谢 :)


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