如果你关注我的前一篇帖子,并按照其中的内容实践,你可能已经学会了如何在 Linux 上安装一个 GPU 加速的 TensorFlow,并构建了你自己的图像分类器。老实讲,在笔记本上对图片进行分类是很花时间的:需要下载分类用的图片,并在终端里输入很多行命令来运行分类。

不过,尽管没有很多的公开资料,好消息是你也可以在有摄像头的手机上运行 TensofrFlow 的 Inception 分类器,甚至是你自定义的分类器。然后你只要把摄像头对准你希望做分类的东西,TensorFlow 就会告诉你它认为这是什么东西。TensorFlow 是可以在 iOS 和树莓派上面运行,不过在这个教程里,我会介绍如何在安卓设备上运行 TensorFlow。

我会一步一步地介绍如何在安卓设备上运行定制化的图片分类器。实现这个功能需要很多步骤,而且其他地方没有这样的介绍,只能通过反复地查看 TensorFlow 的 GitHub 论坛。我希望这篇帖子能帮你避免很多的麻烦。

下载安卓的 SDK 和 NDK

你可以在系统终端里用下面的命令下载安卓 SDK 并解压缩到你的 TensorFlow 目录里。

$ wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz

$ tar xvzf android-sdk_r24.4.1-linux.tgz -C ~/tensorflow

还需要下载一些额外的 SDK 编译工具。我在开始为安卓 5.1.1 版下载开始后关掉了这个终端

$ cd ~/tensorflow/android-sdk-linux

$ tools/android update sdk – no-ui

随后你需要用下面的命令下载安卓 NDK,并解压:

$ wget https://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip

$ unzip android-ndk-r12b-linux-x86_64.zip -d ~/tensorflow

下载 Inception

$ cd ~/tensorflow

$ wget https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -O /tmp/inception5h.zip

$ unzip /tmp/inception5h.zip -d tensorflow/examples/android/assets/

修改 WORKSPACE 文件

为了使用安卓工具编译我们的应用,需要修改 WORKSPACE 文件。

$ gedit ~/tensorflow/WORKSPACE

你可以拷贝下面的代码,并替换掉你的 WORKSPACE 文件里的相应行。

android_sdk_repository (

name = "androidsdk",

api_level = 24,

build_tools_version = "24.0.3",

path = "android-sdk-linux" )

android_ndk_repository (

name="androidndk",

path="android-ndk-r12b",

api_level=21 )

开启 USB 调试和 adb 工具

为了能用 adb 工具,你必须把你的手机设置成开发模式,并开启 USB 调试功能。在开启前,确认你的手机没有通过 USB 和电脑连接,然后进行如下操作:

进入 " 设置 "-" 通用 "-" 我的手机 "

进入 " 软件信息 " 并连续按 " 版本号 "7 次

这样就开启了一个计数器,并会告诉你什么时候你的手机已经进入了开发模式

进入 " 设置 "-" 通用 "-" 开发选项 "

开启 USB 调试

每一个安卓手机都是不同的,我的安卓版 LG G4 手机就必须在 PTP 模式下才能使用 adb。你需要在设置后通过把手机连到电脑上来确认调试模式已经开启。当连接后手机上出现 " 允许 USB 调试 ",确保你选择的是 " 总是允许从这个电脑 ",并按下 OK。

为了测试调试设置是否成功,可以把手机连上电脑,并用下面的命令安装 adb,并测试设备:

$ sudo apt-get install android-tools-adb

$ adb devices

你应该能看到类似于下面的响应内容:

编译 APK

$ bazel build //tensorflow/examples/android:tensorflow_demo

安装 APK

这一步是唯一的我无法客观测试的步骤。每个安卓设备都不一样。如果你在这一步中碰到什么问题,我建议你升级安卓到 6.0 版。对于我朋友的 Moto G 手机,就必须把下面的命令里面的– g 选项去掉:

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

至此,你就可以在安卓设备上使用 TensorFlow 和 Inception 分类器了。我发现最有趣的是这个分类器偶尔出错的时候。需要注意的是,原版的Inception分类器只能识别ImageNet 挑战里出现的 1000 种图片分类。

使用定制化的图片分类器

为了能对我们自己的图片来做分类,我们必须先用我们移动设备的图片文件数据重新训练,并把训练结果放入 assets 目录

首先我们要编译图片训练优化器:

$ bazel build tensorflow/python/tools:optimize_for_inference

然后再用这个训练优化器对我们自己的图片数据做训练:

$ bazel-bin/tensorflow/python/tools/optimize_for_inference

– input=tf_files/retrained_graph.pb

– output=tensorflow/examples/android/assets/retrained_graph.pb

– input_names=Mul

– output_names=final_result

把训练后的标签放入 assets 目录

$ cp ~/tensorflow/tf_files/retrained_labels.txt ~/tensorflow/tensorflow/examples/android/assets/

编辑 TensorflowImageListener.java

$ gedit ~/tensorflow/tensorflow/examples/android/src/org/tensorflow/demo/TensorFlowImageListener.java

我们需要编辑这个文件以能识别我们自己的图片:替换下面这些行的参数所对应的变量值并保存(如果你想回退到原有的文件内容,你可以在找到备份文件):

private static final int INPUT_SIZE = 299;

private static final int IMAGE_MEAN = 128;

private static final float IMAGE_STD = 128;

private static final String INPUT_NAME = "Mul:0";

private static final String OUTPUT_NAME = "final_result:0";

private static final String MODEL_FILE = "file:///android_asset/retrained_graph.pb";

private static final String LABEL_FILE = "file:///android_asset/retrained_labels.txt";

重新编译 APK

重新安装 APL

好的,到这时候我们就可以在安卓设备上使用定制化的分类器了!研究人员和爱好者可以利用这个技术来想出更多的点子并付诸实验。例如我想到的一个点子:就是让分类器能学会通过识别不健康的叶子来发现营养不良或者有植物病的植物。

在安卓上运行 TensorFlow:让深度学习进入移动端相关推荐

  1. 用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈

    用TVM在硬件平台上部署深度学习工作负载的端到端 IR 堆栈 深度学习已变得无处不在,不可或缺.这场革命的一部分是由可扩展的深度学习系统推动的,如滕索弗洛.MXNet.咖啡和皮托奇.大多数现有系统针对 ...

  2. Keras还是TensorFlow?深度学习框架选型实操分享

    译者| 王天宇.林椿眄 责编| Jane.琥珀 出品| AI科技大本营 深度学习发展势头迅猛,但近两年涌现的诸多深度学习框架让初学者无所适从.如 Google 的 TensorFlow.亚马逊的 MX ...

  3. DL框架之TensorFlow:深度学习框架TensorFlow Core(低级别TensorFlow API)的简介、安装、使用方法之详细攻略

    DL框架之TensorFlow:TensorFlow Core(低级别TensorFlow API)的简介.安装.使用方法之详细DL框架之TensorFlow:深度学习框架TensorFlow Cor ...

  4. DL框架之Tensorflow:深度学习框架Tensorflow的简介、安装、使用方法之详细攻略

    DL框架之Tensorflow:深度学习框架Tensorflow的简介.安装.使用方法之详细攻略 目录 Tensorflow的简介 1.描述 2.TensorFlow的六大特征 3.了解Tensorf ...

  5. 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

    20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...

  6. TensorFlow和深度学习入门教程(TensorFlow and deep learning without a P

    前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把其PPT的参考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep lear ...

  7. 树莓派python3.6 tensorflow_树莓派上运行Tensorflow

    由于学校里的一个比赛需要搭建一个机器视觉的系统,我一时兴起,想着能不能用树莓派+深度学习(tensorflow框架)来实现一下.所以就买了一块树莓派的板子,做了一些尝试,终于能在树莓派上运行tenso ...

  8. TensorFlow:深度学习框架TensorFlow TensorFlow_GPU的简介、安装、测试之详细攻略

    TensorFlow:深度学习框架TensorFlow & TensorFlow_GPU的简介.安装.测试之详细攻略 目录 TensorFlow的简介 TensorFlow的安装 1.tens ...

  9. Uber发布史上最简单的深度学习框架Ludwig!

    昨日,Uber官网重磅宣布新开源深度学习框架Ludwig,不需要懂编程知识,让专家能用的更顺手,让非专业人士也可以玩转人工智能,堪称史上最简单的深度学习框架! Ludwig是一个建立在TensorFl ...

最新文章

  1. 在Ubuntu 14.04 64bit上搭建Scala开发环境
  2. python中and与or的执行顺序-python之执行顺序随记
  3. linux设备驱动学习(四)——阻塞与非阻塞I/O
  4. linux+mysql高并发测试_MySQL压力测试shell脚本
  5. mongo:(1)nosql简介
  6. 使用shell脚本或命令行添加、删除 crontab 定时任务
  7. 如何理解mysql数据库_怎么简单地理解数据库的概念?
  8. OpenShift 4 Hands-on Lab (12) 通过 KubeFed 配置 OpenShift 联邦集群
  9. Javascript第五章innerHTML/innerText/创建新节点元素添加内容第八课
  10. Aqua Data Studio 18.5.0导出insert语句
  11. 用UNet做PASCAL VOC2012图像分割
  12. Kali Linux-SET社会工程学攻击
  13. 迅雷:游移的4亿用户帝国
  14. Torch not compiled with CUDA enabled 解决办法
  15. RTX3070深度学习环境配置
  16. 移动磁盘提示文件名目录名或卷标语法不正确怎么修复?
  17. 《教父II:西西里人》 shbp--3
  18. UML用例图-软件需求分析与设计(很详细,很详细,很详细)
  19. Boost:标记的简单双图bimap的测试程序
  20. 用爬虫做字典(网络搜索作业):selenium+xlrd

热门文章

  1. linux 脚本 格式化,Formatting Long Lines 格式化多行字符的shell脚本
  2. python爬取cctalk视频_新媒体编辑怎么批量爬取数据
  3. linux 文件夹大小_技能“慧”|初识Linux(二)
  4. sql的join语法解析
  5. MYSQL:Error Code: 1786 Statement violates GTID consistency: CREATE TABLE ... SELECT.
  6. Android开发笔记(一百三十一)水波图形与水波动画
  7. 乒乓球比赛 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比 请编程序找出三队赛手的名单。
  8. 如何转换并压缩png格式图片
  9. 详细记录一次npm i canvas报错的解决过程
  10. python 运算符与流程控制