tensorflow 几个android demo源码环境搭建

tensorflow 几个android demo源码环境搭建

说明

tensorflow上有几个example,本文重点关注其在android上的应用,源码在gitHub上有,这个apk是什么样子,大家可以通过点击这里进行下载。

系统要求

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

几个例子的说明

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

  • TF Classify:

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

  • TF Detect

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

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

新版本apk的下载

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

好了,以上是一些基本的介绍,现在我们开始下载demo的源码,进行编译。

1. 安装tensorflow

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

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. 添加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

如果有报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去运行了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容