TensorFlow + AndroidScanner - 找不到“libopencv_java3.so”

时间:2018-05-18 13:26:25

标签: android opencv tensorflow java-native-interface

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

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

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

FATAL EXCEPTION: main

    Process: fr.pacifica.insurancechat.debug, PID: 2139
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/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]]] couldn't find "libopencv_java3.so"
    at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
    at java.lang.System.loadLibrary(System.java:1657)
    at com.scanlibrary.ScanActivity.(ScanActivity.java:125)
    at java.lang.Class.newInstance(Native Method)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1190)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2837)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6809)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

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

2 个答案:

答案 0 :(得分:2)

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

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

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

从长远来看,您应该将Scanner库更新为64位版本。这可能会带来显着的性能提升。

答案 1 :(得分:0)

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

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

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