Android Things 专题6 完整的栗子:运用TensorFlow解析图像

文| 谷歌开发技术专家 (GDE) 王玉成 (York Wang)java

前面絮叨了这么多。好像尚未一个总体的概念。咱们怎样写一个完整的代码呢?android

现在深度学习很是火,那咱们就在Android Things中,利用摄像头抓拍图片,让 TensorFlow 去识别图像,最后用扬声器告诉咱们结果。git

是否是很是酷?说主要的功能就说了这么长一串。那垒代码得垒多久啊?github

项目结构

咱们就从 Android Studio 的环始境開始提及吧。编程

启动 Android Studio 以后。务必把 SDK Tools 的版本号升级到 24 及以上。而后再把 SDK 升级到 Android 7.0 及以上。让 Android Studio 本身完毕相关组件的更新。导入项目。项目的结构例如如下:
这里写图片描写叙述
代码中的 imageclassifier 是用于跟 TensorFlow 作交互的。还有摄头。图片处理的相关 handler。markdown

咱们再来看看外部的引用库:
这里写图片描写叙述网络

包含了 Android Things 和 TensorFlow 的相关库,固然。Android 的 API 的版本号是24。gradle 的依赖和 Manifest 中的 filer 是和以前搭建开发环境的解说一致的。函数


引用的 TensorFlow 的库是 aar 打包的 Tensorflow-Android-Inference-alpha-debug.aar,这就意味着,咱们不需要 NDK 环境就可以编译整个项目了。post

主要是留意 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 的一部分。

相关文章
相关标签/搜索