android - 导入自己的libandroid_tensorflow_inference_java.jar时出现"Native TF methods not found"

标签 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 中 编译文件('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/

相关文章:

tensorflow - 属性错误: 'tensorflow.python.ops.rnn' has no attribute 'rnn'

tensorflow - 如何扩展 Tensorflow 变量

android - 长按 ListView 项即可共享音频

java - 是否可以设置 DatagramSocket 从任何其他 IP 地址接收?

python - 如何循环遍历Keras fit函数?

tensorflow - 可变大小的 tensorflow 常数

python - 将 Tensorflow Keras 模型(编码器 - 解码器)保存为 SavedModel 格式

Android 虚拟设备方向(这是不同的)

android - setOnItemClickListener 没有响应

Android 4.1 SQL 服务器连接