1

TensorFlow 提供了本教程作为在 Android 应用程序上使用 TensorFlow 的示例。

我已经成功构建了应用程序并在我的设备上启动了它。我也阅读了代码。

但我不知道从这里去哪里!我有一个 tensorflow 代码,可以根据训练数据计算准确性。

如何在我自己的 android 应用程序中使用该模型。tensorflow 描述并没有超出构建指令的范围。

请帮忙!

4

3 回答 3

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

对我来说,这有助于理解 tf 在 Android 上的基础知识。

于 2017-03-11T12:46:10.827 回答
0

构建 TensorFlow for Android 的完整详细方法

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,您可以直接从项目中使用。

将 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 并加载它。

我在这里写了一个完整的博客。

于 2017-03-12T03:18:05.523 回答
0

有一些很好的教程可以指导您完成这些步骤。

假设我们正在讨论图像分类问题,您应该只需要:

  • 使用该工具处理您的 TensorFlow 模型strip_unused(使其与 Android 演示应用程序兼容)。
  • 将剥离的 TensorFlow.pb模型和.txt新标签复制到 Androidassets文件夹中。
  • 再次构建 Android 演示应用程序。

有关更多信息,请查看我写了如何执行此操作的这篇博客文章。

于 2017-03-05T23:26:31.523 回答