http://blog.csdn.net/wfing/article/details/64934328

前面絮叨了这么多,好像还没有一个总体的概念,我们如何写一个完整的代码呢?

现在深度学习很火,那我们就在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 的代码可以参考。

是不是迫不急待的自己写一个应用呢?实际上,这个项目稍加改动便能有新的玩法。例如加上一个红外感应器,一旦有生物在附近就马上拍图片,并且识别。

大开你的脑洞吧

后记

这一篇文章是这个专题的最后一篇了。写完整个专题,发现 Android Things 带给开发者太多太多的便利,如何烧写文件?如何运用 SDK?甚至如何用 Google 的其它服务做物联网相关的数据处理?都有太多太多的现成的方案供我们选择,感叹使用 Android Things 进行物联网应用开发实在太方便了!

您如果有任何涉及到 Android Things 方面的想法,都欢迎大家在下方留言,我们会把好的建议转交给 Android Things 的产品部门。也许在某一天,你的建议就是 Andorid Things 的一部分。

使用树莓派3开发板,基于android things 物联网系统来运行TensorFlow解析图像相关推荐

  1. iTOP-4412开发板基于Linux-C测试程序的编译和运行

    iTOP-4412 开发板可以运行的文件系统很多,在具体的文件系统上实现特定功能前,可 以使用 Linux-C 程序来测试硬件以及驱动.而且这些程序很容易移植到 Android.Qt/E 以及 最小文 ...

  2. 安卓APP源码和设计报告——基于Android的垃圾分类系统

    <移动应用开发>大作业报告 题 目    基于Android的垃圾分类系统 系 部     班 级     学 生 姓 名     学 号     指 导 教 师     时 间     ...

  3. 树莓派Pico开发板与大功率MOSFET/IGBT器件驱动控制24V直流电机技术实践

    摘要:本文在介绍MOSFET器件和IGBT器件作为电子开关基本原理的基础上,讲述了树莓派Pico与MOSFET&IGBT器件驱动控制24V直流电机硬件接口技术,最后给出了树莓派Pico开发板G ...

  4. 基于Android的理财app开发,基于Android的个人理财系统的设计与实现.doc

    毕业论文(设计)题目: 基于Android的个人理财系统 ---设计与实现 学生姓名: 学 号: 专业班级: 计算机科学与技术092班 指导教师: 职称 副教授 指导教师: 职称 起止时间: 目 录 ...

  5. PIC以太网开发板——基于微芯最新ENC28J60以太网控制器

    PIC以太网开发板--基于微芯最新ENC28J60以太网控制器                       PIC以太网开发板--基于微芯最新ENC28J60以太网控制器 导航栏 ENC28J60芯片 ...

  6. android 智能家居开发,基于Android智能家居系统的设计与实现

    摘要: 近年来,移动互联网技术的进步和智能终端设备的普及促进了智能家居产业的发展.同时,伴随着Android系统在手机.平板中广泛应用,人们通过一个Android设备远程控制家电设备,将与生活密切相关 ...

  7. 物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之控制晶联JLX172104G-590液晶模块

    一.目的 这一节我们学习如何使用我们的树莓派pico开发板raspberry pi pico来控制晶联JLX172104G-590液晶模块. 二.环境 Win10 + 树莓派pico开发板raspbe ...

  8. imx6板载linux登录时间,大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源.doc...

    大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 ...

  9. imx6 linux 开发环境,大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源...

    描述 迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源 板载模块:WIFI蓝牙.4G.GPS.SATA.CAN/RS485.重力加速度计,电子罗盘等 资料丰富:原理图.底板 ...

  10. android 个人理财系统,基于Android的个人理财系统的设计与实现

    摘要: 在当今,全球经济的蓬勃发展带来了金融理财领域的巨大变革和创新,新的金融理财工具和理财观点层出不穷.对个人而言,从认识钱到管理钱(个人理财)是每个人的必修课.在Android系统应用如此火热的情 ...

最新文章

  1. java中实现选择文件_Java 实现文件选择对话框及功能
  2. 计算机视觉系统学习书籍/综述汇总
  3. 不能定义声明dllimport_C#:多个声明的一个属性(DLLImport)
  4. POJ1178枚举三个地方(所有点都去同一个点)
  5. 1.单一职责原则(Single Responsibility Principle)
  6. ubuntu下和开发板下播放音乐
  7. python爬虫之urllib库详解
  8. 分析 Web 资源的访问过程(Servlet 程序访问过程)
  9. 鸟叔linux命令大全,[鸟哥linux视频教程整理]02_01_linux操作系统及常用命令
  10. Unity Application Block 3月12 发布的版本
  11. 支持“***Context”上下文的模型已在数据库创建后发生更改
  12. 编译ROS-Academy-for-Beginners
  13. 使用daemontools监控zookeeper,storm等进程
  14. 如何更高效地使用Google搜索
  15. Oracle语句函数
  16. 关于将txt文件中的数据批量添加到excel中,显示不全的问题
  17. easyexcel导入时读不到数据_EasyExcel快速读写Excel数据
  18. 国产内存真的来了:紫光可提供DDR3、DDR4内存芯片
  19. iPad最值得期待的切实改进构想
  20. Okhttp3的requestbody的笔记

热门文章

  1. Modbus功能码及错误码说明
  2. php数据库ip,php读取纯真ip数据库使用示例
  3. KMPlayer播放mkv视频不出声音的解决办法
  4. 国美易卡有序实现索引,国美易卡B+树方便区间查找
  5. 微信公众号网页开发-Vue项目坑点分析
  6. SSD固态硬盘是什么? 由来、分类、优缺点,尽在这里
  7. java poi Excel加密文件导出和下载
  8. 【Pigeon源码阅读】服务调用请求流程解析(六)
  9. 多项式拟合缺点_三种回归算法及其优缺点
  10. KOL投放指南(六) :品牌五一借势营销大盘点!