我按照tensorflow android指南从源代码中生成tensorflow-lite.aar和tensorflow-lite-select-tf-ops.aar。
我现在的应用程序可以用,
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这将在tensorflow-lite.aar文件夹中为custom_model.tflite生成bazel-bin/tmp和tensorflow-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:无法用前面的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.aar、tensorflow-lite-gpu.aar、tensorflow-lite-select-tf-ops.aar,但是应用程序的大小变得非常大。我已经尝试过其他方式,但是每个错误都会带来一种新的错误类型。
发布于 2021-03-04 20:59:06
发布于 2022-06-25 12:28:51
只需将这一行添加到应用程序级别的build.gradle中的依赖项中即可。
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:2.9.0'https://stackoverflow.com/questions/65021800
复制相似问题