Android Things 专题6 完整的栗子:运用TensorFlow解析图像
文| 谷歌开发技术专家 (GDE) 王玉成 (York Wang)
前面絮叨了这么多。好像还没有一个整体的概念。我们怎样写一个完整的代码呢?
如今深度学习非常火,那我们就在Android Things中,利用摄像头抓拍图片,让 TensorFlow 去识别图像,最后用扬声器告诉我们结果。
是不是非常酷?说主要的功能就说了这么长一串。那垒代码得垒多久啊?
项目结构
我们就从 Android Studio 的环始境開始说起吧。
启动 Android Studio 之后。务必把 SDK Tools 的版本号升级到 24 及以上。然后再把 SDK 升级到 Android 7.0 及以上。让 Android Studio 自己完毕相关组件的更新。导入项目。项目的结构例如以下:
代码中的 imageclassifier 是用于跟 TensorFlow 做交互的。还有摄头。图片处理的相关 handler。
我们再来看看外部的引用库:
包含了 Android Things 和 TensorFlow 的相关库,当然。Android 的 API 的版本号是24。gradle 的依赖和 Manifest 中的 filer 是和之前搭建开发环境的解说一致的。
引用的 TensorFlow 的库是 aar 打包的 Tensorflow-Android-Inference-alpha-debug.aar,这就意味着,我们不须要 NDK 环境就能够编译整个项目了。
主要是留意 dependencies 这一项。包含了 TensorFlow 的库和 Android thing 的库:
再申请了摄头相关的权限。
补充一下,Android Things 是不支持动态权限的申请的。
硬件连接
接下来便是硬件怎样连接了。
硬件清单例如以下:
Android Things 兼容的开发板,比方 Raspberry Pi 3
Android Things 兼容的摄像头,比方 Raspberry Pi 3 摄头模块
元器件:
1 个button,见面包板
2 个电阻。这块儿必须要说明一下:因为图片是接的 5V 的电压。一般来说 GPIO 和 led 的承压能力是 3V,有些 GPIO 是兼容 5V 的,所以中间须要串联 100~200 欧的电阻。
当然。为了保险。建议用 3.3V 的电压。
1 个LED灯
1 个面包板
杜邦线若干
可选:扬声器或者耳机
可选:HDMI输出
连完了硬件。我们这时候就要理解操作流程了。
操作流程
依照前面解说的内容。用 Andorid Studio,连接 ADB。配置好开发板的 Wi-Fi,然后把应用载入到开发板上。
操作流程例如以下:
重新启动设备,执行程序,直到 LED 灯開始闪烁。
把镜头对准猫啊。狗啊。或者一些家具。
按下开关。開始拍摄图片;
在 Raspberry Pi 3 中。一般在 1s 之内。能够完毕图片抓拍,经 Tensorflow 处理,然后再通过 TTS 放出声音。在执行的过程中 LED 灯是熄灭的;
Logcat 中会打印出终于的结果。假设是有显示设备连接的话,图片和结果都会显示出来;
假设有扬声器或者是耳机的话,会把结果语音播报出来。
因为代码的结构特别简单,注意一下几段关健的操作就可以。想必图形、摄头的操作在Android 的编程中大家都会了,所以不做解说了。
代码流程
主要是看 LED 的初始化操作:
有必要说一下。ImageClassifierActivity.java 是应用唯一的 Activity 的入口。
在 Manifest 中已经有定义,它初始化了 LED, Camera, TensorfFlow 等组件。
当中,我们用到的 Button 是 BCM32 这个管脚,用到的 LED 是 BCM6 管脚,相关的初始化在这个 Activity 中已经完毕。
这部分代码是捕捉按键按下的代码。当按下按键时,摄头開始捕捉数据。
把摄像头拍摄的数据转成 Bitmap 文件之后,我们会调用 TensorFlow 来处理图像。
这个函数调用了 TensorFlow 进行处理,最后把结果输出到 logcat 中。假设代码中调用了 tts 引擎。那么则把结果转成语音读出来。
看来,最重要的就是 TensorFlowClassifie 类的 recognizeImage() 这个接口了。我们继续往下看。
这是最后的一步,调用 TensorFlow 进行图像识别:
把 RGB 图像转成 TensorFlow 能够识别的数据;
把数据拷到 TensorFlow 中。
识别出图像,给出结果。
调用 TensorFlow 的过程还是挺好玩的,也挺方便。那么,为啥 TensorFlow 一下子就能够识别出是什么图片呢?Tensorflow 的官网给出的解答:
www.tensorflow.org/tutorials/image_recognition
有一点须要提示,TensorFlow 的图像识别分类能够用网络提交到server识别。也能够离线的数据识别。能够先把 200M 左右的识别数据放在本地,然后提交后识别。
如今大概能分出 1000 个类别的图像,哪 1000 个类别呢?项目代码中已经包含了哦。
是不是运用 TensorFlow 来处理物联网的数据会特别简单,不光是 TensorFlow, Firebase 也能够用到 Android Things 中来。这功能。强大的没话说了!
今天提到的这个项目,来源于 Google 在 GitHub 上维护的项目。项目的地址是
github.com/androidthings/sample-tensorflow-imageclassifier
当然。GitHub 上还有非常多 Android Things 的代码能够參考。
是不是迫不急待的自己写一个应用呢?实际上,这个项目稍加修改便能有新的玩法。
比如加上一个红外感应器,一旦有生物在附近就立即拍图片,而且识别。
大开你的脑洞吧
后记
这一篇文章是这个专题的最后一篇了。写完整个专题。发现 Android Things 带给开发人员太多太多的便利,怎样烧写文件?怎样运用 SDK?甚至怎样用 Google 的其他服务做物联网相关的数据处理?都有太多太多的现成的方案供我们选择,感叹使用 Android Things 进行物联网应用开发实在太方便了。
您假设有不论什么涉及到 Android Things 方面的想法。都欢迎大家在下方留言,我们会把好的建议转交给 Android Things 的产品部门。
或许在某一天,你的建议就是 Andorid Things 的一部分。
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i ').text(i));
};
$numbering.fadeIn(1700);
});
});
Android Things 专题6 完整的栗子:运用TensorFlow解析图像的更多相关文章
- Android Things专题 1.前世今生
文| 谷歌开发人员技术专家, 物联网方向 (IOT GDE) 王玉成(York Wang) 2016 年 12 月,Google 公布了 Developer Preview 版的 Android Th ...
- Xamarin Mono For Android 4.6.07004 完整离线安装破解版(C#开发Android、IOS工具)
Xamarin是由Miguel de Icaza成立的一家新的独立公司,目的是给Mono一个继续奋斗的机会.Mono for Android (原名:MonoDroid)可以让开发人员使用 Mic ...
- 【Android每周专题】触摸屏事件
本系列文章均为A2BGeek原创,转载务必在明显处注明: 转载自A2BGeek的[Android每周专题]系列,原文链接:http://blog.csdn.net/benbmw2008/article ...
- Android Graphics专题(1)--- Canvas基础
作为Android Graphics专题的开篇.毫无疑问,我们将讨论Android UI技术的核心概念--Canvas. Canvas是Android UI框架的基础,在Android的控件体系中.全 ...
- Android清理设备内存具体完整演示样例(二)
版权声明: https://blog.csdn.net/lfdfhl/article/details/27672913 MainActivity例如以下: package cc.c; import j ...
- Android平台中实现对XML的三种解析方式
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
- Android 全面插件化 RePlugin 流程与源码解析
转自 Android 全面插件化 RePlugin 流程与源码解析 RePlugin,360开源的全面插件化框架,按照官网说的,其目的是“尽可能多的让模块变成插件”,并在很稳定的前提下,尽可能像开发普 ...
- [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found
google的android自带的apps写的是相当牛逼的,将其导入到eclipse中方便我们学习扩展.可惜关于导入的资料太少了,尤其是4.1之后的gallery和camera合二为一了.之前导4.0 ...
- Android中px, ppi, dpi, dp, dip, sp概念解析
Android中px, ppi, dpi, dp, dip, sp概念解析
随机推荐
- Python基础-变量定义-输出输入
一.变量的定义 字母.数字.下划线组成,不能以数字开头,同时区分大小写 二.输出 print() print(,) 输出空格 input() 读取键盘输入
- Xcode修改个性化注释
1.首先找到Xcode进入包内容 2.依次进入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develo ...
- 玩转 HTML5 下 WebGL 的 3D 模型交并补
建设性的立体几何具有许多实际用途,它用于需要简单几何对象的情况下,或者数学精度很重要的地方,几乎所有的工程 CAD 软件包都使用 CSG(可以用于表示刀具切削,以及零件必须配合在一起的特征).CSG ...
- sql 1.1 1.1.1 1.10.1 排序
解决思路:计算每位的权重,得到序号完整的权重值,使用权重值进行排序! 创建sql 函数如下: ALTER FUNCTION [dbo].[SequenceToOrderNum] ( @Sequence ...
- 项目实战2.2—nginx 反向代理负载均衡、动静分离和缓存的实现
实验一:实现反向代理负载均衡且动静分离 1.环境准备: 机器名称 IP配置 服务角色 备注 nginx VIP:172.17.11.11 反向代理服务器 开启代理功能 设置监控,调度 rs01 RIP ...
- Power BI连接SSAS(微软的分析服务)进行权限控制(本地部署)
尬聊...... 在干活之前先尬聊一会儿 丸子我在10月下旬左右就开始弄power BI连接SSAS进行权限控制的问题,中间也是历经波折,看了网上很多资料,可是都是SSAS怎么进行权限控制,没有SSA ...
- Thrift全面介绍
官网:http://thrift.apache.org 简介 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java ...
- MacOS 下安装mysqlclient 的问题及解决办法
[操作环境] 操作系统:MacOS X 10.13.1 mysql运行环境:Docker Docker版本:17.09-ce 在开发Django时,刚开始使用的sqlite进行开发,想部署到生产环境需 ...
- [O]SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引 ...
- 手工搭建基于ABP的框架(3) - 登录,权限控制与日志
为了防止不提供原网址的转载,特在这里加上原文链接: http://www.cnblogs.com/skabyy/p/7695258.html 本篇将实现登录.权限控制.日志配置与审计日志的功能.首先我 ...