导入自己的libandroid_tensorflow_inference_java.jar时“找不到本机TF方法”

时间:2017-11-24 17:15:49

标签: android tensorflow

对于我们的某个模型,我需要构建一个自定义版本的TensorFlow,以便在我们的应用中导入。默认值不包含某些所需文件。

我在TensorFlow存储库#10153中遵循了这个问题,其中一些存在我遇到的相同问题。他们似乎已经想出了如何从源代码中成功创建和导入自定义TensorFlow。

到目前为止,我成功创建了libtensorflow_inference.solibandroid_tensorflow_inference_java.jar个文件。但是,当我运行应用程序并加载我的模型时,我收到此错误:

FATAL EXCEPTION: main
 Process: org.tensorflow.demo, PID: 23980
 java.lang.RuntimeException: Unable to start activity ComponentInfo{org.tensorflow.demo/org.tensorflow.demo.ClassifierActivity}: java.lang.RuntimeException: Native TF methods not found; check that the correct native libraries are present in the APK.
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
     at android.app.ActivityThread.-wrap11(Unknown Source:0)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
     at android.os.Handler.dispatchMessage(Handler.java:105)
     at android.os.Looper.loop(Looper.java:164)
     at android.app.ActivityThread.main(ActivityThread.java:6541)
     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)
  Caused by: java.lang.RuntimeException: Native TF methods not found; check that the correct native libraries are present in the APK.
     at org.tensorflow.contrib.android.TensorFlowInferenceInterface.prepareNativeRuntime(TensorFlowInferenceInterface.java:534)
     at org.tensorflow.contrib.android.TensorFlowInferenceInterface.<init>(TensorFlowInferenceInterface.java:60)
     at org.tensorflow.demo.models.Classifier.<init>(Classifier.java:80)
     at org.tensorflow.demo.models.yolo.YoloClassifier.<init>(YoloClassifier.java:30)
     at org.tensorflow.demo.ClassifierActivity.start(ClassifierActivity.java:269)
     at org.tensorflow.demo.ClassifierActivity.onCreate(ClassifierActivity.java:155)

我将.jar放在libs文件夹中,并将其作为依赖项添加到我的build.gradle中 compile files('libs/libandroid_tensorflow_inference_java.jar')

我还在`armeavi-v7a'文件夹中添加了libtensorflow_inference.so(并确保在具有此cpu架构的设备上运行它)

我尝试用夜间TensorFlow版本here中的可用替换我的.jar和.so并出现同样的错误。所以我想这个异常与导入有关,我应该遵循哪些步骤来正确地将自定义/外部TensorFlow构建集成为依赖项?

1 个答案:

答案 0 :(得分:2)

将自定义库导入项目时遇到了同样的问题(我们删除了未使用的操作)。 像你一样,我尝试导入夜间构建但没有成功。

我尝试在全新的Android projet上运行自定义库时解决了这个问题。我再次按照这里的说明:https://github.com/tensorflow/tensorflow/issues/10153,模型运行良好。

我认为TensorFlow提供的演示使用了大量的gradle选项来重命名/移动默认文件夹。从而打破了一些手动进口。