对于我们的模型之一,我需要构建 TensorFlow 的自定义版本以导入到我们的应用中。默认的不包含某些需要的文件。
我在 TensorFlow 存储库中关注了这个问题 #10153有些人遇到了与我相同的问题。他们似乎已经弄清楚如何成功创建并从源代码导入自定义 TensorFlow。
到目前为止,我成功创建了 libtensorflow_inference.so
和 libandroid_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 中
编译文件('libs/libandroid_tensorflow_inference_java.jar')
我还在`armeavi-v7a'文件夹中添加了libtensorflow_inference.so
(并确保在具有此CPU架构的设备上运行它)
我尝试将我的 .jar 和 .so 替换为夜间 TensorFlow 版本 here 中可用的文件。并有同样的错误。所以我猜这个异常与导入有关,我应该遵循哪些步骤才能正确地将自定义/外部 TensorFlow 构建集成为依赖项?
最佳答案
在将自定义库导入到我的项目时,我遇到了同样的问题(我们删除了未使用的操作)。 像您一样,我尝试导入夜间构建但没有成功。
当我尝试在全新的 Android 项目上运行自定义库时,我解决了这个问题。我再次按照此处的说明进行操作:https://github.com/tensorflow/tensorflow/issues/10153并且模型运行良好。
我认为 TensorFlow 提供的演示使用了很多 gradle 选项来重命名/移动默认文件夹。从而破坏了一些手动导入。
关于android - 导入自己的libandroid_tensorflow_inference_java.jar时出现"Native TF methods not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47477692/