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

本文主要是介绍###好好好###将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这里写图片描述

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

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

这篇关于###好好好###将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967615

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo