【问题标题】:TensorFlow + AndroidScanner - couldn't find "libopencv_java3.so"TensorFlow + AndroidScanner - 找不到“libopencv_java3.so”
【发布时间】:2018-10-28 23:00:12
【问题描述】:

我在结合使用 Tensorflow 和 AndroidScanner 时遇到问题。

我使用 Tensorflow 在相机源上显示叠加层。我用相机拍照,然后将其发送到服务器。它有效。

现在我导入了AndroidScannerDemo,我想使用拍摄的图片并使用新导入的模块对其进行裁剪/转换。它崩溃了。当我打开 ScanActivity(来自 AndroidScannerDemo)时,它会尝试加载 opencv,但从未成功。错误信息如下:

致命例外:主要 进程:fr.pacifica.insurancechat.debug,PID:2139 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip 文件“/data/app/fr.pacifica.insurancechat.debug-OI_d1EANbiczpZEwAHYdkw==/base.apk”],nativeLibraryDirectories=[/data/app/fr .pacifica.insurancechat.debug-OI_d1EANbiczpZEwAHYdkw==/lib/arm64, /data/app/fr.pacifica.insurancechat.debug-OI_d1EANbiczpZEwAHYdkw==/base.apk!/lib/arm64-v8a, /system/lib64, /system /vendor/lib64]]] 找不到“libopencv_java3.so” 在 java.lang.Runtime.loadLibrary0(Runtime.java:1011) 在 java.lang.System.loadLibrary(System.java:1657) 在 com.scanlibrary.ScanActivity.(ScanActivity.java:125) 在 java.lang.Class.newInstance(本机方法) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1190) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2837) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046) 在 android.app.ActivityThread.-wrap11(未知来源:0) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688) 在 android.os.Handler.dispatchMessage(Handler.java:105) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6809) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

当我从 gradle/code 中删除 TensorFlow 引用时,导入的模块工作正常。

【问题讨论】:

    标签: android opencv tensorflow java-native-interface


    【解决方案1】:

    我在某些手机(64 位处理器)上遇到了同样的问题

    这是每个架构所需的库。您可以下载并手动导入。

    https://github.com/jhansireddy/AndroidScannerDemo/tree/2cd23d3d362d0a6248cf489a79ebc4ba2c425c60/ScanDemoExample/scanlibrary/src/main/libs

    【讨论】:

      【解决方案2】:

      您导入的项目仅构建 32 位版本的 libScanner.so,因此仅使用 32 位版本的 libopencv_java3.so。短期内,你可以保留它,只设置

      android {
        defaultConfig {
          ndk {
            abiFilters 'armeabi-v7a'
          }
        }
      }
      

      这将导致您的 APK 在 arm64 设备上以 32 位模式运行。

      从长远来看,您也应该更新 Scanner 库以构建 64 位。这可能会显着提高性能。

      从 2019 年 8 月起,Play 商店中的所有应用都需要 64 位支持

      【讨论】:

      • 工作就像一个魅力,我将在项目中添加一个注释以指定它存在性能问题(这是一个 POC,现在不相关)。谢谢!
      • @nidhi 很可能,您的问题并不完全相同。随意打开一个单独的问题并提供更多详细信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2019-06-21
      • 1970-01-01
      • 2019-02-24
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多