现在深度学习很火,那我们就在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 个按钮,见面包板
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 的图像识别分类可以用网络提交到服务器识别,也可以离线的数据识别。可以先把 200M 左右的识别数据放在本地,然后提交后识别。现在大概能分出 1000 个类别的图像,哪 1000 个类别呢?项目代码中已经包含了哦。
是不是运用 TensorFlow 来处理物联网的数据会特别简单,不光是 TensorFlow, Firebase 也可以用到 Android Things 中来。这功能,强大的没话说了!
今天提到的这个项目,来源于 Google 在 GitHub 上维护的项目,项目的地址是
github.com/androidthings/sample-tensorflow-imageclassifier
当然,GitHub 上还有很多 Android Things 的代码可以参考。
是不是迫不急待的自己写一个应用呢?实际上,这个项目稍加改动便能有新的玩法。例如加上一个红外感应器,一旦有生物在附近就马上拍图片,并且识别。
大开你的脑洞吧
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=2066,转载请注明出处。
评论0