编译Android版本TensorFlow

在Ubuntu 18.04 LTS 下编译Tensorflow的Android库的步骤:

  1. 安装Android Studio/Android sdk
  2. 安装Android NDK(Android NDK可以单独安装也可以通过Android Studio的SDK插件安装, 怎么安装略)
  3. 安装 能够编译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
  1. 下载需要编译的版本的Tensorflow源代码,或者git clone ,随意, 一般从 branches 中找 Active 版本的 TensorFlow, 比如目前的 r1.15/r2.1/r2.0/r2.2, 不推荐那些 Stale 版本, Stale 就是老掉牙的意思, 别看成稳定版了
  2. 安装python,还有protobuf等库类,这个可以在具体的编译过程查漏补缺,也可以按照官网的依赖直接安装完
  3. 到tensorflow的目录下, ./configure,配置相关的变量,选项,如 android SDK、NDK等
  4. 可以考虑配置一下网络环境, 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

  1. 编译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架构

  1. 编译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

你可能感兴趣的:(NDk,TensorFlow)