1

Tensorflow已經提供此tutorial作爲在Android應用程序上使用張量流的示例。Tensorflow示例爲Android

我已成功構建應用程序並在我的設備上啓動它。我也閱讀了代碼。

但我不知道該從哪裏出發!我有一個tensorflow代碼,可以根據訓練數據計算出準確性。

如何在我自己的android應用程序中使用該模型。張量流描述不超出構建指令。

請幫忙!

回答

0

有一些很好的教程,應該引導你完成這些步驟。使用strip_unused工具(使它與Android演示應用程序兼容)

  • 處理您的TensorFlow型號:

    假設我們正在談論的圖像分類問題,您應該只需要。

  • 將您的新標籤的剝離TensorFlow .pb型號和您的.txt複製到Android assets文件夾中。
  • 再次構建Android演示應用程序。

欲瞭解更多信息,請this blog post,我寫了如何做到這一點。

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的基礎知識。

0

完成的具體的方法來構建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