Tensorflow的模型轉(zhuǎn)移到Android平臺(tái)

? ? hello,大家好,這個(gè)我在簡書的第一篇文章,請(qǐng)多多支持。雖然我本行是做app開發(fā)的, 但待在人工智能部門,不了解一下人工智能相關(guān)的知識(shí),也說不過去(其實(shí)是不好裝逼,嘿嘿),廢話不多說,我們直奔主題;

1. Tensorflow是什么?

借用百度爸爸的話介紹一下,TensorFlow是谷歌開發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),其命名來源于本身的運(yùn)行原理。Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計(jì)算,TensorFlow為張量從流圖的一端流動(dòng)到另一端計(jì)算過程。TensorFlow是將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳輸至人工智能神經(jīng)網(wǎng)中進(jìn)行分析和處理過程的系統(tǒng)。

說白了就是機(jī)器學(xué)習(xí)的框架,你可以在其基礎(chǔ)上去寫算法模型,然后訓(xùn)練,優(yōu)化得到更好的算法模型,做出更好的產(chǎn)品;

2.使用Tensorflow

要在Android上使用Tensorflow,要準(zhǔn)備哪些依賴庫呢?下面我來分享下自己的流程

1.TensorFlow 的核心是使用C++寫的,所以需要先下載Android ndk;

2. 獲取tensorflow的源碼:

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

代碼下載后,修改clone 下來的TensorFlow中的WROKSPACE文件:

# 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 ="",#)##android_ndk_repository(#? ? name="androidndk",#? ? path="",#? ? api_level=14)

修改結(jié)果如下(注意設(shè)置正確的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 ="D:\Users\linhh\AppData\Local\Android\Sdk",)android_ndk_repository(? name="androidndk",? path="D:\Users\linhh\AppData\Local\Android\Sdk\ndk-bundle",? api_level=14)

3.下載并安裝Bazel:,Bazel是TensorFlow主要的構(gòu)建系統(tǒng)。為后面編譯so和jar包做準(zhǔn)備。我是使用choco install bazel去安裝的,choco沒安裝的同胞可以參考下面的文章參考地址;

4.安裝好Bazel后,可以開干了

首先編譯 so文件:

bazel build -c opt//tensorflow/contrib/android:libtensorflow_inference.so \--crosstool_top=//external:android/crosstool \--host_crosstool_top=[@bazel_tools](http://twitter.com/bazel_tools)//tools/cpp:toolchain \--cpu=armeabi-v7a

編譯后文件位置:

bazel-bin/tensorflow/contrib/android/libtensorflow_inference.so

然后編譯jar文件:

bazel build//tensorflow/contrib/android:android_tensorflow_inference_java

編譯后文件位置:

bazel-bin/tensorflow/contrib/android/libandroid_tensorflow_inference_java.jar

這樣Android工程可以使用compile files('libs/libandroid_tensorflow_inference_java.jar')依賴,然后再jniLibs文件夾下創(chuàng)建armeabi-v7a目錄把so文件丟進(jìn)去;

這樣就輕松把tensorflow整合到Android工程里面了,下面來看下它如何發(fā)揮作用。

3.模型的使用

算法模型可以根據(jù)自己興趣去找,我找的是一個(gè)入門級(jí)別的模型,這是一個(gè)識(shí)別圖片中數(shù)字的經(jīng)典問題,我們只需要把(mnist_model_graph.pb,graph_label_strings.txt)這兩個(gè)文件放到工程的assets目錄下,然后就可以利用TensorFlowImageClassifier去使用了:

private static final intINPUT_SIZE=28;

private static finalStringINPUT_NAME="input";

private static finalStringOUTPUT_NAME="output";

private static finalStringMODEL_FILE="file:///android_asset/mnist_model_graph.pb";

private static finalStringLABEL_FILE=

"file:///android_asset/graph_label_strings.txt";

classifier= TensorFlowImageClassifier.create(

getAssets(),

MODEL_FILE,

LABEL_FILE,

INPUT_SIZE,

INPUT_NAME,

OUTPUT_NAME);

4.總結(jié)

總體來說安卓上的應(yīng)用還是比較簡單,算法模型還是核心,下次還是去了解tensorflow的基本應(yīng)用再魯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容