C++TensorFlow Lite编译及使用
Linux环境
安装软件环境
- 安装bazel-0.17.2-installer-linux-x86_64.sh下载地址
- 下载tensorflow-1.12.3.tar.gz下载地址
- 安装NDK 下载android-ndk-r18b
- 安装Android Studio 使用国内网址下载Google Android studio
编译TensorFlow Lite动态库
解压源码
tar -xf tensorflow-1.12.3.tar.gz
下载依赖
主要是下载flatbuffers用于加载模型文件
cd tensorflow-1.12.3
./tensorflow/lite/tools/make/download_dependencies.sh
运行TensorFlow配置
cd tensorflow-1.12.3
./configure
根据自己的硬件配置填写选项,支持Android编译需要修改如下选项:
Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: y
Please specify the home path of the Android NDK to use. [Default is /home/michael/Android/Sdk/ndk-bundle]:
将如下内容加到tensorflow中的tensorflow-1.12.3/tensorflow/contrib/lite/BUILD文件末尾:
添加libtensorflowLite.so到bazel
cc_binary(
name = "libtensorflowLite.so",
linkopts=[
"-shared",
"-Wl,-soname=libtensorflowLite.so",
],
linkshared = 1,
copts = tflite_copts(),
deps = [
":framework",
"//tensorflow/contrib/lite/kernels:builtin_ops",
],
)
运行编译命令
bazel build //tensorflow/contrib/lite:libtensorflowLite.so --crosstool_top=//external:android/crosstool --cpu=armeabi-v7a --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cxxopt="-std=c++11"
如果需要支持其他cpu类型请参考bazel编译选项修改–cpu的值
编译结果
默认的编译结果输出到编译目录的:
bazel-bin/tensorflow/contrib/lite/libtensorflowLite.so
tensorflow-1.12.3/bazel-bin/external/flatbuffers/libflatbuffers.a
整理头文件
先创建部署路径:
mkdir dist-root
lite头文件
cd tensorflow-1.12.3/tensorflow/contrib/
find ./lite -name "*.h" | tar -cf headers.tar -T -
mv headers.tar dist-root
cd dist-root
mkdir -p include/tensorflow
tar xvf headers.tar -C include/tensorflow
rm headers.tar
flatbuffers头文件
cd dist-root
mkdir -p include/flatbuffers
cp tensorflow-1.12.3/tensorflow/lite/tools/make/downloads/flatbuffers/include/flatbuffers/* include/flatbuffers/
参考网址:
http://jcsilva.github.io/2017/03/18/compile-kaldi-android/