Tensorflow已经提供此tutorial作为在Android应用程序上使用张量流的示例。Tensorflow示例为Android
我已成功构建应用程序并在我的设备上启动它。我也阅读了代码。
但我不知道该从哪里出发!我有一个tensorflow代码,可以根据训练数据计算出准确性。
如何在我自己的android应用程序中使用该模型。张量流描述不超出构建指令。
请帮忙!
Tensorflow已经提供此tutorial作为在Android应用程序上使用张量流的示例。Tensorflow示例为Android
我已成功构建应用程序并在我的设备上启动它。我也阅读了代码。
但我不知道该从哪里出发!我有一个tensorflow代码,可以根据训练数据计算出准确性。
如何在我自己的android应用程序中使用该模型。张量流描述不超出构建指令。
请帮忙!
有一些很好的教程,应该引导你完成这些步骤。使用strip_unused
工具(使它与Android演示应用程序兼容)
假设我们正在谈论的图像分类问题,您应该只需要。
.pb
型号和您的.txt
复制到Android assets
文件夹中。欲了解更多信息,请this blog post,我写了如何做到这一点。
首先,您需要将模型保存为.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的基础知识。
完成的具体的方法来构建TensorFlow为Android
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git
注:--recurse-子模块是重要的拉子模块。
从这里安装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 \
[email protected]_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
现在我们有两个罐子。如此档案。我已经建立了.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。