授權(quán)轉(zhuǎn)自THU數(shù)據(jù)派 作者:Amit Shekhar 翻譯:梁傅淇 王軍福 校對:李君 原文鏈接:https://blog./android-tensorflow-machine-learning-example-ff0e9b2654cc#.aoq0izsg6 我們都知道,,谷歌有一個開源庫叫做TensorFlow,,可被用在安卓系統(tǒng)中實現(xiàn)機(jī)器學(xué)習(xí)。換言之,,TensorFlow是谷歌為機(jī)器智能提供的一個開源軟件庫,。 我在網(wǎng)絡(luò)上搜尋了很久,,都沒有找到在安卓上搭建TensorFlow的簡單的方法或?qū)嵗W屑?xì)查閱許多資料以后,,我終于可以搭建它了,。于是,我決定把我搭建的過程寫出來,,這樣其他人就不必再浪費(fèi)時間了,。 這篇文章是寫給那些熟悉機(jī)器學(xué)習(xí)并且知道怎樣為機(jī)器學(xué)習(xí)搭建模型的人的(在這個示例中我會使用一個預(yù)訓(xùn)練模型)。近期,,我會寫一系列關(guān)于機(jī)器學(xué)習(xí)的文章,,這樣每個人都能夠?qū)W到如何為機(jī)器學(xué)習(xí)搭建模型。 從搭建安卓上的機(jī)器學(xué)習(xí)模型過程講起 我們需要知道的幾個要點:
我們會做以下的目標(biāo)檢測: 編譯jar和.so文件 注意:--recurse-submodules對于提取子模塊(pull submodules)很重要,。 在這里(https://developer./ndk/downloads/older_releases.html#ndk-12b-downloads)下載NDK。 下載安卓SDK,,或者,,我們也可以從Android Studio SDK提供路徑。 安裝Bazel(https://bazel.build/versions/master/docs/install.html),。Bazel是TensorFlow的主要編譯系統(tǒng),。 現(xiàn)在,編輯工作空間(WORKSPACE),,我們可以在早先克隆的TesnsorFlow根路徑中找到工作空間(WORKSPACE)文件,。 我們的SDK和NDK路徑就跟下面一樣: 然后編譯生成.so文件: 將armeabi-v7a換成我們所需要的目標(biāo)架構(gòu)。 庫會被放置在: 編譯Java副本: 我們可以在這里找到JAR文件: 現(xiàn)在我們有了jar和.so文件,。你也可以從下面的工程中直接提取使用我已經(jīng)建立好的.so文件和jar,。 我已經(jīng)在這里(https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample)創(chuàng)建了一個完整可運(yùn)行的示例應(yīng)用,。 但是,我們需要預(yù)訓(xùn)練模型和標(biāo)簽文件,。 在這個例子中,,我們會使用Google預(yù)訓(xùn)練模型,它實現(xiàn)了在一張給定的照片上做目標(biāo)檢測,。 解壓縮zip文件,,我們就會得到imagenet_comp_graph_label.strings.txt(目標(biāo)標(biāo)簽)以及tensorflow_inception_graph.pb(預(yù)訓(xùn)練模型)。 現(xiàn)在,,在Android Studio上創(chuàng)建安卓示例工程吧,。 將imagenet_comp_graph_label.strings.txt(目標(biāo)標(biāo)簽)以及tensorflow_inception_graph.pb放進(jìn)assets文件夾。 將libandroid_tensorflow_inference_java.jar放進(jìn)lib文件夾,,單擊右鍵,,添加庫。 在主目錄新建一個jniLibs文件夾并且將libtensorflow_inference.so放到j(luò)niLibs/armeabi-v7a文件夾中,。 現(xiàn)在,,我們就可以調(diào)用TensorFlow Java API了。 TensorFlow Java API通過TensorFlowInferenceInterface類開放了所有需要的方法,。 現(xiàn)在,,我們可以用模型路徑調(diào)用TensorFlow Java API并且加載它了。 然后,,我們可以輸入一張圖片來獲取預(yù)測結(jié)果,。 如果想要體會完整的流程,克隆這個項目(https://github.com/MindorksOpenSource/AndroidTensorFlowMachineLearningExample),,搭建并運(yùn)行它吧,。 如果你在搭建這個項目的過程中有任何問題的話,聯(lián)系我,,我會非常樂意幫助你,。 Happy Coding:) 讀者問答 Q:我很疑惑要怎么連接到‘so’庫?也沒有任何一行像’System.loadLibray’的代碼,? A:System.loadLibrary已經(jīng)寫在TensorFlow jar中了,。 Q:所以這是一個C++應(yīng)用還是Java應(yīng)用啊,?你用的是什么語言,? A:這是一個用Java語言編寫的安卓應(yīng)用,它通過Java本地接口(JNI: Java Native Interface)調(diào)用C++做預(yù)測(機(jī)器學(xué)習(xí)),。 掃碼報名Strata Data Conference大會 大數(shù)據(jù)文摘專享優(yōu)惠截至5月5日 |
|