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。