Tensorflow提供了此tutorial作为在Android应用上使用tensorflow的示例。
我已经成功构建了应用并在我的设备上启动了它。我也读了这段代码。
但我无法弄清楚从哪里开始!我有一个张量流代码,可根据训练数据计算准确度。
如何在我自己的Android应用中使用该模型。张量流描述不会超出构建指令。
请帮忙!
答案 0 :(得分:3)
首先,您需要将模型保存为.pb(protobuf)文件。
在您的应用程序中,您将需要加载此.pb文件。您可以使用tf/python/tools freeze_graph.freeze_graph()
您还需要包含所有c ++实现的libtensorflow_inference.so。
最后你需要libandroid_tensorflow_inference_java.jar。
然后你可以写下:
inferenceInterface.initializeTensorFlow(getAssets(), MODEL_FILE);
inferenceInterface.fillNodeFloat(INPUT_NODE, INPUT_SIZE, inputFloats);
inferenceInterface.runInference(new String[] {OUTPUT_NODE});
inferenceInterface.readNodeFloat(OUTPUT_NODE, resu);
这里有一个很棒的教程:https://omid.al/posts/2017-02-20-Tutorial-Build-Your-First-Tensorflow-Android-App.html
应用的GitHub回购:https://github.com/omimo/TFDroid
对我来说,这有助于理解Android上的tf基础知识。
答案 1 :(得分:0)
有一些很好的教程可以引导您完成这些步骤。
假设我们正在讨论图像分类问题,您应该只需要:
strip_unused
工具处理您的TensorFlow模型(使其与Android演示应用兼容)。.pb
模型和.txt
新标签复制到Android assets
文件夹中。有关详细信息,请查看this blog post我写过如何执行此操作的内容。
答案 2 :(得分:0)
为Android构建TensorFlow的完整详细方法
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git
注意: - recurse-submodules对于拉取子模块非常重要。
从这里安装Bazel。 Bazel是TensorFlow的主要构建系统。 现在,编辑WORKSPACE,我们可以在之前克隆的TensorFlow的根目录中找到WORKSPACE文件。
# Uncomment and update the paths in these entries to build the Android demo.
#android_sdk_repository(
# name = "androidsdk",
# api_level = 23,
# build_tools_version = "25.0.1",
# # Replace with path to Android SDK on your system
# path = "<PATH_TO_SDK>",
#)
#
#android_ndk_repository(
# name="androidndk",
# path="<PATH_TO_NDK>",
# api_level=14)
如下所示我们的sdk和ndk路径:
android_sdk_repository(
name = "androidsdk",
api_level = 23,
build_tools_version = "25.0.1",
# Replace with path to Android SDK on your system
path = "/Users/amitshekhar/Library/Android/sdk/",
)
android_ndk_repository(
name="androidndk",
path="/Users/amitshekhar/Downloads/android-ndk-r13/",
api_level=14)
然后构建.so文件。
bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so \
--crosstool_top=//external:android/crosstool \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
--cpu=armeabi-v7a
用我们想要的目标架构替换armeabi-v7a。 该图书馆位于:
bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so
构建Java版本:
bazel build //tensorflow/contrib/android:android_tensorflow_inference_java
我们可以在以下位置找到JAR文件:
bazel-bin/tensorflow/contrib/android/libandroid_tensorflow_inference_java.jar
现在我们有jar和.so文件。我已经构建了.so文件和jar,你可以直接使用project。
将libandroid_tensorflow_inference_java.jar放入libs文件夹并右键单击并添加为库。
compile files('libs/libandroid_tensorflow_inference_java.jar')
在主目录中创建jniLibs文件夹,并将libtensorflow_inference.so放在jniLibs / armeabi-v7a /文件夹中。
现在,我们将能够调用TensorFlow Java API。
TensorFlow Java API通过类TensorFlowInferenceInterface公开了所有必需的方法。
现在,我们必须使用模型路径调用TensorFlow Java API并加载它。
我写了一篇完整的博客here。