【问题标题】:tensorflow-lite-select-tf-ops and tensorflow-lite AAR built from source tflite model cannot find org.tensorflow.lite.Interpreter从源 tflite 模型构建的 tensorflow-lite-select-tf-ops 和 tensorflow-lite AAR 找不到 org.tensorflow.lite.Interpreter
【发布时间】:2020-11-26 12:08:10
【问题描述】:

我按照 tensorflow android 指南从源代码生成 tensorflow-lite.aartensorflow-lite-select-tf-ops.aar

https://www.tensorflow.org/lite/guide/build_android

我当前的应用适用于,

dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite:2.3.0'
    implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:2.3.0'
}

我希望减小 tensorflow-lite-select-tf-ops.aar 的大小以减小应用程序 apk 的大小

我正在关注build_aar.sh 流程以减少我的 tflite 模型的大小。使用的命令,

bash tensorflow/lite/tools/build_aar.sh --input_models=custom_model.tflite --target_archs=arm64-v8a

这会在bazel-bin/tmp 文件夹中为custom_model.tflite 生成tensorflow-lite.aartensorflow-lite-select-tf-ops.aar。 tflite 模型是FP16 量化的。

用新生成的aar文件实现,

dependencies {
    ...
//    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:2.3.0'
//    implementation 'org.tensorflow:tensorflow-lite:2.3.0'
    implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'

    implementation files('libs/tensorflow-lite.aar')
//    implementation files('libs/tensorflow-lite-gpu.aar')
    implementation files('libs/tensorflow-lite-select-tf-ops.aar')
}

但是当它们被包含在android应用程序中时会发生编译错误。

C:\folder\myapp\app\src\main\java\com\example\mapp\tflite\YoloV4Classifier.java:19: error: cannot find symbol
import org.tensorflow.lite.Interpreter;
                          ^
  symbol:   class Interpreter
  location: package org.tensorflow.lite

tensorflow-lite.aar 使用bazel build -c opt --fat_apk_cpu=arm64-v8a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain tensorflow/lite/java:tensorflow-lite 构建时,这个问题就消失了。但这会引入 UnsatisfiedLinkError: dlopen failed: cannot locate symbol 与之前的 tensorflow-lite-select-tf-ops.aar 和新构建的 tensorflow-lite.aar 与上述命令。

如果我同时输入从custom_model.tflite 生成的以前的tensorflow-lite.aar 和用bazel build -c opt --fat_apk_cpu=arm64-v8a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain tensorflow/lite/java:tensorflow-lite 生成的新tensorflow-lite.aar,那么就会出现构建错误,

More than one file was found with OS independent path 'lib/arm64-v8a/libtensorflowlite_jni.so'

我按照基于非输入 tflite 模型的命令从源代码生成 tensorflow-lite.aartensorflow-lite-gpu.aartensorflow-lite-select-tf-ops.aar,但应用程序大小变得非常大。我试过other ways,但每一个都会带来一种新的错误。

【问题讨论】:

  • 在项目中添加 tflite aars 时遇到问题,尝试first 方法
  • 添加 AAR 工作正常,但问题是从源代码构建的 tensorflow-lite 找不到解释器。
  • 我的意思是我遇到了同样的问题(没有找到解释器,但构建正常)并且这种方法有效

标签: android tensorflow build.gradle tensorflow-lite aar


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 2020-12-03
  • 2020-10-14
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多