在Ubuntu 18.04 LTS 下编译Tensorflow的Android库的步骤:
- 安装Android Studio/Android sdk
- 安装Android NDK(Android NDK可以单独安装也可以通过Android Studio的SDK插件安装, 怎么安装略)
- 安装 能够编译Tensorflow的对应版本的Bazel, TensorFlow和 Bazel 有对应关系的(我也不知道具体的对应关系,早先tensorflow版本无提示,后来版本的tensorflow有不提示),我使用的是 tensorflow-1.15.0和bazel-0.26.1
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip
从 https://github.com/bazelbuild/bazel/releases?after=1.1.0 下载 bazel 0.26.1 的可执行文件
bazel-0.26.1-installer-linux-x86_64.sh 或者 bazel_0.26.1-linux-x86_64.deb
安装方法
$ chmod +x bazel-0.26.1-installer-linux-x86_64.sh
$ ./bazel-0.26.1-installer-linux-x86_64.sh --user
或者
双击 bazel_0.26.1-linux-x86_64.deb 文件安装
或者
sudo dpkg -i bazel_0.26.1-linux-x86_64.deb
- 下载需要编译的版本的Tensorflow源代码,或者git clone ,随意, 一般从 branches 中找 Active 版本的 TensorFlow, 比如目前的 r1.15/r2.1/r2.0/r2.2, 不推荐那些 Stale 版本, Stale 就是老掉牙的意思, 别看成稳定版了
- 安装python,还有protobuf等库类,这个可以在具体的编译过程查漏补缺,也可以按照官网的依赖直接安装完
- 到tensorflow的目录下, ./configure,配置相关的变量,选项,如 android SDK、NDK等
- 可以考虑配置一下网络环境, TensorFlow 在编译过程中, 需要从 github.com 下载一些小的 压缩包之类的, 但是网速非常慢, 可以配置一下 /etc/host 镜像 ip 提高 速度
7.1 这里使用 https://www.ipaddress.com/ ,分别查询下面的域名 对应的ip 然后插入到 /etc/host 下面
192.30.253.112 github.com
151.101.185.194 github.global.ssl.fastly.net
192.30.253.120 codeload.github.com
7.2 重启服务 sudo /etc/init.d/networking restart
- 编译so文件,在目录bazel-bin/tensorflow/contrib/android 找到编译的 libtensorflow_inference.so 拷贝到需要防止的位置,继续进行下一步的操作,不拷贝的话,后面的编译会把前面的覆盖。
# bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=arm64-v8a
#根据需要修改对应的参数,主要就是target 板子的CPU架构
- 编译jar包,在目录 bazel-bin/tensorflow/contrib/android 下找到 libandroid_tensorflow_inference_java.jar,拷贝到具体的位置备用。
bazel build //tensorflow/contrib/android:android_tensorflow_inference_java
编译 android_demo
bazel build -c opt --config=arm-v8a //tensorflow/examples/android:tensorflow_demo