Building TensorFlow on Android(译)

本篇文章翻译自tensorflow官网,会加上自己的一些实操讲解,便于大家快速运行起第一个移动端机器学习的demo。

为了让你在Android上开始使用tensorflow,我们将通过两种方式来构建我们的移动端的Tensorflow例子并将它部署到一个Android设备上。

为什么要选择这些方法之一?

在Android上使用Tensorflow最简单的方法就是使用Android Studio。如果你不打算自定义你的Tensorflow构建,或者如果你想使用Android Studio的编辑器和其他功能去构建一个app并且只是想添加TensorFlow,我们推荐你使用Android Studio。

如果您使用自定义操作,或有其他原因从头开始构建Tensorflow,请向下滚动并查看我们有关使用Bazel构建demo的说明。

使用Android Studio构建样例

前提条件

如果还没有,做以下两件事情:

  • 安装Android Studio,按照网址的介绍来操作即可。(注:自行搜索好搭建Android的开发环境)
  • 从Github克隆Tensorflow仓库

git clone https://github.com/tensorflow/tensorflow

构建

1.打开Android Studio,从欢迎界面,选择Open an existing Android Studio project

2.然后定位到你拉下来的仓库选择tensorflow/examples/android目录,点击OK导入到工作区。

如果它要求你执行同步Gradle,点击OK。 你可能需要安装各种平台和工具,直接点击安装即可。 注:缺什么就安装什么,保证所有要求的环境都是具备的。

3.打开工程中android模块下的build.gradle文件,找到nativeBuildSystem变量并且设置它为none如果它还没设置。

// set to 'bazel', 'cmake', 'makefile', 'none'
def nativeBuildSystem = 'none'

如下图所示:

4.点击run按钮或者使用Run-> Run 'android'从顶部菜单。 如果它询问你使用Instant Run,点击Proceed Without Instant Run。 此外,你需要在设备中启用开发调试选项才能插入Android设备。

使用Android Studio将Tensorflow添加到您的应用程序

最简单的方式就是添加以下行到你的Gradle构建文件:

allprojects {
    repositories {
        jcenter()
    }
}

dependencies {
    compile 'org.tensorflow:tensorflow-android:+'
}

这会自动将Tensorflow的最新稳定版作为AAR下载并安装到您的项目中。

使用Bazel构建Demo

另外一种方法在Android上使用Tensorflow就是使用Bazel构建一个apk并且使用ADB加载它到你的设备当中。这个需要你知道一些构建系统和Android开发者工具的知识,但是我们将在这里指导您完成基础的操作。

  • 首先,按照我们的说明从源码安装。这个会知道你通过安装Bazel并且克隆Tensorflow代码。
  • 下载Android SDK和NDK如果你的环境还没有它们。你至少需要NDK的12b版本,SDK的23版本以上。
  • 在Tensorflow源代码,使用您本地的SDK和NDK路径更新WORDSPACE文件,其中包含 和。 具体如下图所示:
  • 运行Bazel去构建Demo
bazel build -c opt //tensorflow/examples/android:tensorflow_demo
  • 使用ADB去安装apk到你的设备当中
adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

这个会在你的设备当中安装三个应用程序,都是Tensorflow演示的一部分。有关更多信息,请参阅Android示例应用程序。

我们来看下安装到手机的效果,如下图所示:

注:官网说有三个示例,但笔者运行的时候发现多了一个TF Speech,应该是做语音识别相关的应用,具体大家可以试下。

Android 示例应用程序

Android示例代码是一个构建和安装三个示例应用程序的单个项目,这个三个示例应用程序都使用相同的基础代码。示例应用程序都从手机摄像头获取视频输入:

  • TF Classify 使用Inception v3模型来标记来自Imagenet的类所执行的对象。Imagenet只有1000种类别,它会遗漏大多数日常生活中的物体,并且包含许多现实生活中不可能遇到的东西,所以结果往往会非常有趣。例如,没有“人”的类别,相反,它往往会猜测它通常与人的照片相关的事物,例如安全带或氧气面罩。如果你想自定义此示例来识别你关心的对象,则可以使用Tensorflow for Poets codelab作为示例,以便根据你自己打数据来训练模型。
  • TF Detect 使用多盒模型试图在相机中任务的位置绘制边框。对于每个检测结果,这些框都有可信度的注释。结果可能并不完美,因为这种对象检测仍然是一个活跃的研究课题。Demo还包括光学追踪,当物体在帧之间移动时,会比Tensorflow推断运行更加频繁。这样提高了用户体验,因为明显的帧速率更加快,但是它还能够估计哪些框指向帧之间的相同对象,这对于随着时间的推移计数对象是重要的。
  • TF Stylize 在摄像头上实现实时风格的传输算法。你可以选择使用哪种样式,并使用屏幕底部的调色板在它们之间进行混合,也可以将处理的分辨率切换为更高或更低的rez。

注:看翻译会懵,直接运行Demo看下效果就清楚三个示例具体用来干啥的了。

Android推理库

由于Android应用程序需要用Java编写,核心Tensorflow是C++编写的,所以Tensorflow有一个JNI来链接两者。它的接口只针对推理,所以它提供了加载图表,设置输入和运行模型来计算特定输出的能力。您可以在TensorFlowInferenceInterface.java中查看最少的一组方法的完整文档。

这些Demo使用了这个接口,因此它们是查找示例用法的好地方。您可以在ci.tensorflow.org下载预先构建的二进制jar文件。

原文发布于微信公众号 - 小巫技术博客(wwjblog)

原文发表时间:2017-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏祝威廉

MLSQL 对Python的支持之路

Python是做机器学习框架一定要支持的。MLSQL很早就支持集成Python脚本做模型的训练和预测。

1143
来自专栏李想的专栏

使用腾讯云“自定义监控”监控 GPU 使用率

本文旨在通过使用腾讯云的“自定义监控”服务来自行实现对 GPU 服务器的 GPU 使用率的监控。

1.3K13
来自专栏数据和云

性能优化:B*Tree 索引中的数据块分配(五)

黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 编辑手记...

2946
来自专栏乐沙弥的世界

Oracle RAC OCR 与健忘症

    OCR就好比Windows的一个注册表,存储了所有与集群,RAC数据库相关的配置信息。而且是公用的配置,也就是说多个节点共享相同的配置信息。因此该配置应...

1355
来自专栏沃趣科技

Oracle压缩黑科技(三):OLTP压缩

原文链接:https://www.red-gate.com/simple-talk/sql/oracle/compression-in-oracle-part-...

3727
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 1 - Hello, TensorFlow!

在学习任何新的编程语言时,我们都会在第一时间完成Hello World,以宣告自己开发环境的完美搭建。TensorFlow也不例外。TensorFlow充分考...

4223
来自专栏简书专栏

目标检测第1步-运行tensorflow官方示例

在进行本文操作之前,需要先安装好tensorflow的gpu版本。 本文作者的环境:python3.6、Windows10、tensorflow_gpu1.1...

9533
来自专栏Java技术分享

redis集群原理

redis是单线程,但是一般的作为缓存使用的话,redis足够了,因为它的读写速度太快了。       官方的一个简单测试:     测试完成了50个并发执行1...

2439
来自专栏marsggbo

tmux 简单介绍

1081
来自专栏Deep learning进阶路

caffe随记(四) --- mnist示例超详细讲解

这个mnist手写体数字识别的例子可以说是caffe中的 Hello World。mnist最初用于支票上的手写数字识别,针对mnist识别的专门模型是Lene...

2800

扫码关注云+社区

领取腾讯云代金券