【TensorFlow學習】iOS構建TensorFlow Lite

公司最近的項目TensorFlow lite,查找了一些博客,發(fā)現很多都是時間太久了,走了不少彎路,接下來我來總結一下我的整合過程,希望大家可以避免走彎路

準備工作

為編譯TensorFlow Lite的iOS版靜態(tài)庫, 需要用到MacOS上的終端. 如果還沒達標,
那么須先安裝 Xcode 8 or later and the tools using xcode-select:
xcode-select --install
1.第一次安裝麻敌,需要打開Xcode鳖谈,按照提示授權信任.
2.如果你沒有CocoaPods,先安裝它
3.還需要安裝 Homebrew installed.(可以去官網下載)
4.另外兩個必要工具
automake/libtool:

brew install automake
brew install libtool

一.自己生成.a庫憾朴,自己集成頭文件到項目

步驟1.克隆TensorFlow源代碼

1.首先事格,我們將計算機中的GitHub存儲庫克隆到一個文件夾中以獲取演示應用程序。(創(chuàng)建一個文件夾來放置clone 下來的TensorFlow),執(zhí)行代碼

git clone https://github.com/tensorflow/tensorflow
步驟2.下載所需的依賴項

注意
?tips: 對于國內開發(fā)者玄帕,可能直接執(zhí)行腳本,會有兩個依賴包下載失敗或者 出現問題導致即便下載依賴包步驟通過塞椎,也會缺失這兩個依賴包桨仿,所以我們直接在文件里做了修改!

文件路徑是tensorflow/lite/tools/make/download_dependencies.sh,打開編輯如下圖修改

EIGEN_URL="$(grep -o 'http.*bitbucket.org/eigen/eigen/get/.*tar\.gz' "${BZL_FILE_PATH}" | grep -v bazel-mirror | head -n1)"
GEMMLOWP_URL="$(grep -o 'https://mirror.bazel.build/github.com/google/gemmlowp/.*zip' "${BZL_FILE_PATH}" | head -n1)"
GOOGLETEST_URL="https://github.com/google/googletest/archive/release-1.8.0.tar.gz"
ABSL_URL="$(grep -o 'https://github.com/abseil/abseil-cpp/.*tar.gz' "${BZL_FILE_PATH}" | head -n1)"
NEON_2_SSE_URL="https://github.com/intel/ARM_NEON_2_x86_SSE/archive/master.zip"
FARMHASH_URL="https://mirror.bazel.build/github.com/google/farmhash/archive/816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz"
FLATBUFFERS_URL="https://github.com/google/flatbuffers/archive/master.zip"
# 下面這兩個聯網下載。很有可能下載不下來, 我們就不要用腳本下載了案狠,注釋掉
# MODELS_URL="https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_1.0_224_ios_lite_float_2017_11_08.zip"
# QUANTIZED_MODELS_URL="https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip"

還有下面這塊也需要注釋

download_and_extract "${EIGEN_URL}" "${DOWNLOADS_DIR}/eigen"
download_and_extract "${GEMMLOWP_URL}" "${DOWNLOADS_DIR}/gemmlowp"
download_and_extract "${GOOGLETEST_URL}" "${DOWNLOADS_DIR}/googletest"
download_and_extract "${ABSL_URL}" "${DOWNLOADS_DIR}/absl"
download_and_extract "${NEON_2_SSE_URL}" "${DOWNLOADS_DIR}/neon_2_sse"
download_and_extract "${FARMHASH_URL}" "${DOWNLOADS_DIR}/farmhash"
download_and_extract "${FLATBUFFERS_URL}" "${DOWNLOADS_DIR}/flatbuffers"
# 下面這兩個的意思是下載完依賴包服傍,解壓到的路徑,同理骂铁,也注釋掉
# download_and_extract "${MODELS_URL}" "${DOWNLOADS_DIR}/models"
# download_and_extract "${QUANTIZED_MODELS_URL}" "${DOWNLOADS_DIR}/quantized_models"
現在可以安心下載依賴包(TensorFlow的根目錄下執(zhí)行)

1.這將從Web獲取庫和數據的副本并安裝它們(tensorflow/lite/downloads文件里面)

tensorflow/lite/tools/make/download_dependencies.sh

下載完成downloads里面是7個文件夾(正確應該是9個)吹零,別忘了,上面我們注釋掉了兩個包的下載拉庵,現在需要根據腳本里這兩個的下載鏈接
MODELS_URL灿椅、
QUANTIZED_MODELS_URL
下載并解壓钞支。下載完成后茫蛹,根據注釋掉的解壓路徑,分別把兩個文件放到對應的路徑下面,缺少的文件夾自己創(chuàng)建
tensorflow/lite/tools/make/downloads/models烁挟、tensorflow/lite/tools/make/downloads/quantized_models
2.設置了所有依賴項后婴洼,您現在可以在iOS上為所有五種支持的體系結構構建庫:

tensorflow/lite/tools/make/build_ios_universal_lib.sh

在引擎蓋下,它使用makefile tensorflow/lite來構建庫的不同版本撼嗓,然后調用將lipo它們捆綁到包含armv7柬采,armv7s欢唾,arm64,i386和x86_64體系結構的通用文件中粉捻。生成的庫在 tensorflow/lite/tools/make/gen/lib/libtensorflow-lite.a
路徑為:tensorflow/tensorflow/lite/tools/make/gen

如果出現錯誤礁遣,例如no such file or directory: 'x86_64'運行時 build_ios_universal_lib.sh:打開Xcode> Preferences> Locations,并確保在“命令行工具”下拉列表中選擇了一個值

在您自己的應用程序中使用

您需要更新應用中的各種設置以鏈接TensorFlow Lite肩刃。您可以在示例項目中查看它們祟霍, tensorflow/lite/examples/ios/simple/simple.xcodeproj但這里是完整的綱要:

您需要將庫添加 tensorflow/lite/gen/lib/libtensorflow-lite.a到鏈接構建階段,并在“搜索路徑”中添加tensorflow/lite/gen/lib“庫搜索路徑”設置树酪。

在頭文件搜索路徑需要包含:
根文件夾浅碾,
tensorflow/lite/downloads
tensorflow/lite/downloads/flatbuffers/include
應通過設置C++ Language Dialect 為GNU++11(或GNU++14)和C++ Standard Libraryto 來啟用C ++ 11支持(或更高版本)libc++。

一. CocoaPods 簡潔方便

步驟1.克隆TensorFlow源代碼

首先续语,我們將計算機中的GitHub存儲庫克隆到一個文件夾中以獲取演示應用程序垂谢。

git clone https://github.com/tensorflow/tensorflow
步驟2.下載所需的依賴項
tensorflow/lite/examples/ios/download_models.sh

運行以下命令安裝TensorFlow Lite pod:

 cd tensorflow/lite/examples/ios/camera
 pod install

如果您之前安裝過此pod并且該命令不起作用,請嘗試

pod repo update

步驟3.構建XCode項目
項目路徑在tensorflow/tensorflow/lite/examples/ios/camera
可以運行該camera 需要
mobilenet_v1_1.0_224.tflite,mobilenet_quant_v1_224.tflite,labels.txt
下載地址是
mobilenet_v1_1.0_224.tflite,
mobilenet_quant_v1_224.tflite,
工程可以跑起來了!
ps:舊版可以在這個路徑下找到models
/tensorflow/contrib/lite/g3doc/models.md

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末疮茄,一起剝皮案震驚了整個濱河市滥朱,隨后出現的幾起案子,更是在濱河造成了極大的恐慌力试,老刑警劉巖徙邻,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異畸裳,居然都是意外死亡缰犁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門怖糊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帅容,“玉大人,你說我怎么就攤上這事伍伤〔⑴牵” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵扰魂,是天一觀的道長麦乞。 經常有香客問我,道長劝评,這世上最難降的妖魔是什么姐直? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蒋畜,結果婚禮上简肴,老公的妹妹穿的比我還像新娘。我一直安慰自己百侧,他們只是感情好砰识,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佣渴,像睡著了一般辫狼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辛润,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天膨处,我揣著相機與錄音,去河邊找鬼砂竖。 笑死真椿,一個胖子當著我的面吹牛,可吹牛的內容都是我干的乎澄。 我是一名探鬼主播突硝,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼置济!你這毒婦竟也來了解恰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤浙于,失蹤者是張志新(化名)和其女友劉穎护盈,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體羞酗,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡腐宋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了檀轨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胸竞。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖裤园,靈堂內的尸體忽然破棺而出撤师,到底是詐尸還是另有隱情,我是刑警寧澤拧揽,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布剃盾,位于F島的核電站,受9級特大地震影響淤袜,放射性物質發(fā)生泄漏痒谴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一铡羡、第九天 我趴在偏房一處隱蔽的房頂上張望积蔚。 院中可真熱鬧,春花似錦烦周、人聲如沸尽爆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漱贱。三九已至槐雾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幅狮,已是汗流浹背募强。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崇摄,地道東北人擎值。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像逐抑,于是被迫代替她去往敵國和親鸠儿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345