【TensorFlow学习】iOS构建TensorFlow Lite

公司最近的项目TensorFlow lite,查找了一些博客,发现很多都是时间太久了,走了不少弯路,接下来我来总结一下我的整合过程,希望大家可以避免走弯路

准备工作

为编译TensorFlow Lite的iOS版静态库, 需要用到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存储库克隆到一个文件夹中以获取演示应用程序。(创建一个文件夹来放置clone 下来的TensorFlow),执行代码

git clone https://github.com/tensorflow/tensorflow
步骤2.下载所需的依赖项

注意
•tips: 对于国内开发者,可能直接执行脚本,会有两个依赖包下载失败或者 出现问题导致即便下载依赖包步骤通过,也会缺失这两个依赖包,所以我们直接在文件里做了修改!

文件路径是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的根目录下执行)

1.这将从Web获取库和数据的副本并安装它们(tensorflow/lite/downloads文件里面)

tensorflow/lite/tools/make/download_dependencies.sh

下载完成downloads里面是7个文件夹(正确应该是9个),别忘了,上面我们注释掉了两个包的下载,现在需要根据脚本里这两个的下载链接
MODELS_URL
QUANTIZED_MODELS_URL
下载并解压。下载完成后,根据注释掉的解压路径,分别把两个文件放到对应的路径下面,缺少的文件夹自己创建
tensorflow/lite/tools/make/downloads/modelstensorflow/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阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351