公司最近的项目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/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