TensorFlow Android版环境搭建

tensorflow 几个android demo源码环境搭建

说明

tensorflow上有几个example,本文重点关注其在android上的应用,源码在gitHub上有,这个apk是什么样子,你们能够经过点击这里进行下载。html

系统要求

  1. 若是须要独立的库,须要分开构建tensorflow的源码
  2. 物体追踪以及YUV转RGB在libtensorflow_demo.so
  3. android5.0 ( API21 )及以上

几个例子的说明

这个apk安装完成后会有3个图标,启动不一样的Activity对应不一样的demo,每一个demo均可以经过音量键来开启和关闭后台信息。java

  • TF Classify:linux

    启动页面为/src/org/tensorflow/demo/ClassifierActivity.java,其做用是启动相机,自动识别出相机预览框中的物体。android

  • TF Detectgit

    启动页面为/src/org/tensorflow/demo/DetectorActivity.java,使用深度神经网络模型进行运行物体检测。github

  • TF Stylize 
    启动页面为src/org/tensorflow/demo/StylizeActivity.java,实时将相机的预览界面处理成特定画风。ubuntu

新版本apk的下载

最新版本的apk资源,能够访问https://ci.tensorflow.org/view/Nightly/job/nightly-android/ ,点击view节点下面的output,点击tensorflow_demo.apk进行下载。api

好了,以上是一些基本的介绍,如今咱们开始下载demo的源码,进行编译。网络

1. 安装tensorflow

关于tensorflow的安装,能够直接前往官方文档地址https://www.tensorflow.org/install/ ,也能够参照我以前写的博客 http://www.jianshu.com/p/5b4e961f010f ,此处再也不赘述。curl

2. 安装构建工具bazel

bazel的安装,比较简单,能够直接参考官方文档https://bazel.build/versions/master/docs/install.html ,但值得注意的是,bazel目前还不支持在window上构建Android,官方说的是后期能够支持gradle。

博主用的是ubuntu,比较方便,简单提一下。 
1. 须要ubuntu14.04及以上 
2. 须要JDK 8,若是没安装请运行

sudo apt-get install openjdk-8-jdk
  • 1
  1. 添加APT库
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list`

curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
  1. 安装bazel
sudo apt-get update && sudo apt-get install bazel

若是只是要更新,则运行

sudo apt-get upgrade bazel

3. 下载源码

好了,终于到了下载源码部分了,首先,新建一个文件夹,好比AI,而后进入到AI文件夹,使用git下载代码。

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

注意--recurse-submodules参数是用来防止后面出现的protobuf错误的。

4. 配置本地环境

载好源码后,会出现一个tensorflow的文件夹,这里面放着全部tensorflow的源码,可是咱们要关注的源码位于..\AI\tensorflow\tensorflow\examples\android目录下。

1. 修改WORKSPACE文件

由于本地环境的不一样,所以咱们须要先修改/tensorflow目录下的WORKSPACE文件,找到以下一段代码,对应配置好你的sdk版本以及位置,还有ndk的版本和位置,而且去掉注释:

# Uncomment and update the paths in these entries to build the Android demo.
  #android_sdk_repository(
  #    name = "androidsdk",
  #    api_level = 23,
  #    # Ensure that you have the build_tools_version below installed in the 
  #    # SDK manager as it updates periodically.
  #    build_tools_version = "25.0.2",
  #    # Replace with path to Android SDK on your system
  #    path = "<PATH_TO_SDK>",
  #)
  #
  # Android NDK r12b is recommended (higher may cause issues with Bazel)
  #android_ndk_repository(
  #    name="androidndk",
  #    path="<PATH_TO_NDK>",
  #    # This needs to be 14 or higher to compile TensorFlow. 
  #    # Note that the NDK version is not the API level.
  #    api_level=14)

好比个人就修改为了:

android_sdk_repository(
    name = "androidsdk",
    # 设置成你安装sdk的最高版本,对应修改manifest.xml以及gradle的target
    api_level = 23,
    # Ensure that you have the build_tools_version below installed in the 
    # SDK manager as it updates periodically.
    build_tools_version = "25.0.3",
    # Replace with path to Android SDK on your system
    path = "/home/cxq/android-sdk-linux",
)

# 推荐使用r12版本,更高的版本可能会形成bazel出错
android_ndk_repository(
    name="androidndk",
    path="/home/cxq/android-sdk-linux/ndk-bundle",
    # This needs to be 14 or higher to compile TensorFlow. 
    # Note that the NDK version is not the API level.
    api_level=14)

注意: 
1. api_level须要设置成你本地sdk最高的版本,推荐23及以上,在android:build.gradle 以及AndroidManifest.xml也对应修改targetSdkVersion 
2. ndk的版本,推荐使用r12,不然bazel编译的时候会报错。

2. 构建

进入到AI/tensorflow目录下,输入如下命令:

bazel build -c opt //tensorflow/examples/android:tensorflow_demo
  • 1

若是有报protocol buffers的相关错误,运行git submodule update --init命令,而且确保WORKSPACE文件配置对了

3. 安装apk

开启手机的调试模式,运行:

adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
  •  

4. 使用Android Studio

能够在Android Studio中直接打开tensorflow/examples/android,可是须要配置好你的gradle、sdk、ndk 
1. gradle必需要在3.3以上版本 
2. build_tool_version须要指定在25以上 
3. 配置好你的ndk 
4. 很重要:在android:build.gradle 中配置好你的bazel路径,默认的是以下的:

def bazelLocation = '/usr/local/bin/bazel'
  •  

可是在该路径下并无bazel,所以会报以下错误:

Error:Execution failed for task ':buildNativeBazel'.
A problem occurred starting process 'command '/usr/local/bin/bazel''

此时只须要把路径改为你的bazel路径就好,好比个人是:

def bazelLocation = '/usr/bin/bazel'
  •  

这样配置完毕后,就能直接在AS中使用run去运行了。

相关文章
相关标签/搜索