将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程

2023-05-16

2017/02/23 更新

贴一个TensorFlow 2017开发者大会的Mobile专题演讲

移动和嵌入式TensorFlow

这里面有重点讲到本文介绍的三个例子,以及其他的移动和嵌入式方面的TF相关问题,干货很多

2017/01/17 更新


今天上 Github,发现 Tensorflow 的 android demo又更新了,除了基本的修改以外,又增加了一个图像风格迁移的安卓demo,而且还增加了Android Studio 的编译支持。

迫不及待的移植到手机上试了一下。在安装的过程中,发现了以前文章中的几处小错误。特地跑来更正。

同时将风格迁移的demo一并增加到原文中。

原文如下:


本文是TensorFlow官网教程:将 TensorFlow 深度学习模型,移植到安卓手机,进行物体识别、行人检测和图像风格迁移的一个具体实现过程。(教程主页见: TensorFlow Mobile)

该教程一共实现了三个简单的深度学习模型移植:

1、TF Classify: 实时物体分类
2、TF Detect: 实时行人检测
3、TF Stylize: 实时图像风格迁移

具体使用的模型和算法可以参考上面的官方链接,我这里只谈移植过程,算法就不讲啦。

该教程提供了 Android、ios、Raspberry Pi三种手机操作系统的支持。我只实现了Android移植,所以本文以Android移植为例。


我的电脑环境

笔记本:ThinkPad T450 X86_64
显卡:主显 Intel HD Graphics 5500 ; 独显 NVIDIA GT 940M
系统环境:Ubuntu14.04 64位、Windows7 64位 双系统
CUDA 版本: 8.0
cudnn 版本: v5.1
TensorFlow版本: master
Bazel版本: 0.4.3
安卓手机: 联想 PB2-690N


一、下载 TensorFlow 项目源码

如果想实现将TensorFlow训练的模型移植到安卓手机,首先需要下载tensorflow的项目源码。

TensorFlow项目源码下载地址

注意!!

TensorFlow的源码 r0.12版本中只包含 TF-Classify一个模型的实现,需下载master版本才能包含全部的三个模型实现。

在项目中,android demo的源码位置是

//tensorflow/examples/android

二、安装Bazel

电脑还需要安装Bazel,这个我在源码安装TensorFlow的时候就已经装好,还没装的同学可以参考我的另一篇文章,文中前半部分有写如何安装Bazel。

Ubuntu14.04 源代码安装 TensorFlow r0.12 详细教程


三、安装 SDK

1、下载SDK,并将其解压到从github下载的tensorflow源代码根目录下
(注:其实可以安装在任意目录下,我这里以安装在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

2、 更新SDK和安装 SDK build tools

$ cd  ~/tensorflow/android-sdk-linux
$ sudo  tools/android  update  sdk --no-ui

(注:不加sudo 会报错,提示failed to fetch URL)

四、安装 NDK

下载 NDK,解压到tensorflow根目录下
(注:其实可以安装在任意目录下,我这里以安装在tensorflow目录为例。)

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

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

五、修改 WORKSPACE 文件

在tensorflow的根目录下,找到WORKSPACE文件。打开文件, 上方有两段包含 android_sdk_repositoryandroid_ndk_repository的内容(该段内容已经加了#被注释掉了),将这两段内容在文件中复制一遍,并将复制后的内容反注释掉。然后:

a) 分别将sdk path和 ndk path更改为自己安装的SDK和NDK路径(例如我的是tensorflow根目录下的相对路径)

b) 将sdk api level更改为自己电脑中安装的最高版本

c) 将sdk的build_tools_version更改为自己安装的版本

其他保持不变


六、下载模型 (可选)

andriod demo源码是不包含训练好的tensorflow模型的,但是在编译时需要模型。模型一共有三个,分别对应物体识别、行人检测和图像风格迁移。

在Bazel编译时,可以不用手动下载模型,因为在文件//tensorflow/examples/android/BUILD中设定了自动下载模型的操作。

但是如果使用Android Studio等其他方式编译,则不会运行BUILD文件中的自动下载操作。

手动下载模型zip文件:

$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -o /tmp/inception5h.zip

$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1.zip -o /tmp/mobile_multibox_v1.zip

$ curl -L https://storage.googleapis.com/download.tensorflow.org/models/stylize_v1.zip -o /tmp/stylize_v1.zip

将上述三个zip文件分别解压到文件夹:
//tensorflow/examples/android/assets

下载的模型链接随着 tf android 项目版本的更新可能会有变动,具体版本对应的链接请参考tensorflow根目录下的WORKSPACE文件,它其中标明了当前项目版本对应的模型下载链接。

解压完毕后,打开//tensoeflow/examples/android/BUILD文件,找到以 android_binary 开头的那段代码片,将 assets = [ ] 内以@开头的三句代码用#号 注释掉,如下图黄色部分所示

这里写图片描述

如果不注释掉该段内容,即使手动将模型放在assets文件中,使用bazel编译时也会重新下载模型。


七、连接安卓手机

1、安装 adb

$ sudo  apt-get  install android-tools-adb

2、 将手机设置为debug模式

打开安卓手机,找到 usb debugging 按钮,我的手机是:

setting-general-developer options-enable USB debugging
(每个手机可能具体的不太一样)

然后手机通过USB数据线连接电脑,此时手机屏幕会提示:
allow USB debugging?

勾选 always allow from this computer,然后点击ok。(之后再连接则不会提示)

3、 从电脑端检查 手机是否连接成功

$adb devices

则会输出连接的设备

List of devices:
xxxx, device

前面是ID号,后面是连接状态。

我遇到的问题是,List of devices 输出显示:xxx, offline
这样是不行的,往下执行编译会不通过。瞎捣鼓了一通,最后按如下的方式解决了问题:

cd 切换到sdk安装路径下的 build_tools文件夹,运行

$ adb kill-server
$ sudo adb start-server

(网上说的原因是 要以root权限启动 adb)

然后运行$ adb devices,就ok啦。如下图所示

这里写图片描述


八、编译并安装 apk文件

1、编译生成 apk文件

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

成功之后会看到提示生成了如下三个文件

bazel-bin/tensorflow/examples/android/tensorflow_demo_deploy.jar 
bazel-bin/tensorflow/examples/android/tensorflow_demo_unsigned.apk 
bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

然后在 bazel-bin/tensorflow/examples/android/目录下你会找到生成的三个文件

2、向安卓手机安装apk文件

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

安装的过程中,手机屏幕会弹出提示 是否安装该软件?是否允许访问摄像头之类的等等。如下图所示

这里写图片描述

安装完毕后,就可以在手机桌面看到两个黄色的图标,名字分别是TF Classify、TF Detect和TF 。如下图所示。

这里写图片描述

点击相应软件,就可以运行啦。下面演示一下效果。


软件实测

1、首先是 TF Classify

屏幕对准物体,上方会显示识别结果。实时性很强,基本没有延迟

这里写图片描述


2、再来试一下 TF Detect

屏幕会实时框出检测到的人员,拿个模特测试一下。

这里写图片描述

恩,说明活体检测有待提高呀~~~

3、TF stylize

这里写图片描述

将手机对准屏幕,软件可以实时的将摄像头拍摄到的内容转换为艺术图片风格

点击下方的图片,还可以进行风格的切换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程 的相关文章

随机推荐

  • 积跬步,聚小流-------关于UML时序图

    uml时序图的存在 在上一篇中记录了uml类图 xff0c 用类图来描述代码中所需要的类以及相互之间的关系 xff0c 也就立体的将整个程序框架展现在了我们面前 xff0c 像一幅画 xff0c 有山有水有人 一张照片只能定格当时的美好 x
  • 积跬步,聚小流------用smartpaginator来做分页

    网络上的实例 xff08 jquery smarypaginator 例图 xff09 如果说是从 百度 上搜索过 jquery分页插件 的朋友 xff0c 相信对上面的图片不会陌生 xff0c 几乎所有介绍 jquery分页插件 的文章中
  • 我的2017-搭建个人网站,搭建PHP环境(2)

    上周确定了 xff0c 想要应用的后台语言 xff0c 面临的最大问题就是 xff1a php我不会啊 xff0c 哈哈哈哈 xff0c 所以接下来首先要做的就是了解 学习php的相关知识 接下来的第一步 xff1a 环境搭建 1 下载安装
  • 设计一个类:只能在堆上创建对象?只能在栈上创建对象?只能创建一个对象?

    在C 43 43 中 xff0c 类的对象建立分为两种 xff0c 一种是静态建立 xff0c 如A a xff1b 另一种是动态建立 xff0c 如A ptr 61 new A xff1b 这两种方式是有区别的 静态建立一个类对象 xff
  • 我的2017-搭建个人网站,hello PHP(2)

    学习一门语言 xff0c 例行惯例 xff0c 先来个 hello world 搭建好了php环境 xff0c 然后就可以运行php了 xff0c 首先用一种最简单的方法 xff0c 在wamp安装位置 xff08 相应的文件夹 xff09
  • 我的2017-搭建个人网站,自拟定代码根目录

    wampserver集成安装环境安装的php的运行根目录在wamp文件夹中的www文件夹下 xff0c 而为了有效的将代码和服务器进行分离 xff0c 可以采用自拟定代码根目录进行修改 1 确定代码编辑位置 xff0c 修改服务器默认指向
  • 编译原理:求First集与Follow集的方法

    明天就要考试了 xff0c 发现一直理解错了First集与Follow集的解法 xff0c 贴上比较好理解的 文法 xff1a S ABc A a B b First集合求法 能 由非终结符号推出的所有的开头符号或可能的 xff0c 但要求
  • 位运算n & (n-1)的妙用

    本文转自 xff1a http blog csdn net zheng0518 article details 8882394 按位与的知识 n amp n 1 作用 xff1a 将n的二进制表示中的最低位为1的改为0 xff0c 先看一个
  • 二分查找算法(Java版)

    二分查找算法是非常经典且基本的算法 1 二分查找又称折半查找 xff0c 优点是比较次数少 xff0c 查找速度快 xff0c 平均性能好 xff1b 其缺点是要求待查表为有序表 xff0c 且插入删除困难 因此 xff0c 折半查找方法适
  • 电脑眼睛保护色——绿豆沙色

    眼科医生建议电脑屏幕不要用白色 xff0c 因为白色对眼睛的刺激是最大的 xff0c 最损伤视力 xff01 眼科医生推荐的颜色是 柔和的淡绿色 xff0c 也有人叫做绿豆沙色 按HSU 设置为 xff1a 色度 HUE xff1a 85
  • Java中两个数交换的细节问题

    在码代码过程中 xff0c 两个数交换是经常用到的 xff0c 但在Java 中 xff0c 如果忽略了值传递和引用传递就很容易出错 看一下两个整数交换代码 xff1a public void swap int a int b int t
  • 微信 Mars Android Sample 源码分析

    注 xff1a 原文首发地址 零 前言 Mars 是微信官方开源的跨平台跨业务的终端基础组件 xff0c 具有高质量网络连接模块 长短连接 智能心跳机制 高性能日志模块和网络监测组件等 而整个 Android Sample 是基于 Mars
  • Android NDK 开发:实战案例

    0 前言 如果只学理论 xff0c 不做实践 xff0c 不踩踩坑 xff0c 一般很难发现真正实践项目中的问题的 xff0c 也比较难以加深对技术的理解 所以延续上篇 JNI 的实战Android NDK开发 xff1a JNI实战篇 x
  • Android NDK 开发:CMake 使用

    1 前言 当在做 Android NDK 开发时 xff0c 如果不熟悉用 CMake 来构建 xff0c 读不懂 CMakeLists txt 的配置脚本 xff0c 很容易就会踩坑 xff0c 遇到编译失败 xff0c 一个很小的配置问
  • 性能测试简单介绍

    性能测试介绍 指通过自动化的测试工具模拟多种正常 峰值以及异常负载条件来对系统的各项性能指标进行测试 对性能的认识 从用户的角度 xff1a 从开发的角度 xff1a 从系统管理员的角度 xff1a 那么 xff1f 测试应该关注哪些呢 x
  • U盘系统盘EFI怎么恢复为普通盘?

    U盘重装系统时 xff0c 会使用U盘来制作PE xff0c 装完系统之后 xff0c 插上U盘会发现有两个盘 xff0c 一个是EFI xff0c 一个是主盘 xff0c EFI是占用了几百M空间的 xff0c 打开磁盘管理器就可以查看
  • usb camera(UVC Camera)在android 9.0的解决方法(仅供参考)

    采用的usb驱动是https github com jiangdongguo AndroidUSBCamera这个里面的libusbcamera xff0c 在手机的android 系统未升级到9 0时 xff0c 是可以正常使用的 但是升
  • av_read_frame AVERROR_EOF

    问题描述 xff1a 使用ffmpeg API编码 xff0c 调用av read frame 读取缓存队列中的视频流时 xff0c 提示AVERROR EOF xff0c 导致进程提前终止 原因解析 xff1a 因为ffmpeg的输入为缓
  • 用虚拟机在一台电脑上实现xPC实时仿真

    背景介绍 一般的xPC仿真需要2台电脑来分别实现目标机和宿主机 xff0c 两者之间通过以太网或者串口实现通讯 Matlab的xPC Target提供了一个运行在目标机上的高度剪裁的实时操作内核 xff0c 无需在目标机上面安装任何的操作系
  • 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程

    2017 02 23 更新 贴一个TensorFlow 2017开发者大会的Mobile专题演讲 移动和嵌入式TensorFlow 这里面有重点讲到本文介绍的三个例子 xff0c 以及其他的移动和嵌入式方面的TF相关问题 xff0c 干货很