0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探讨如何将机器学习应用到物联网中

设计idea 来源:互联网 作者:佚名 2018-05-23 09:24 次阅读

本项目探讨如何将机器学习(Machine learning)应用到物联网IoT,Internet of Things)中。我们将使用 Android Things 作为我们的物联网平台,并且采用 Google TensorFlow 作为我们的机器学习引擎。如今,机器学习与物联网都是技术话题中的大热门。

下面是维基百科上对机器学习的一个简单定义

机器学习是计算机科学中的一个领域,它使计算机系统能够利用数据进行 “学习”(即逐步提高特定任务的性能),而不需要进行显式编程(Explicitly programmed)。

换句话说,在进行训练步骤以后,系统就可以预测结果(即使这不是专门为这些结果进行编程的)。另一方面,我们都了解物联网以及连接设备的概念。最有前途的话题之一便是如何将机器学习应用于物联网之中,以构建能够 “学习” 的专家系统。此外,该系统会运用这些知识来控制和管理实物。

下面列举一些应用到机器学习,以及物联网能产生重要价值的领域:

  • 预测维护(Predictive maintenance)中的工业物联网(IIoT,Industrial IoT)。

  • 在消费者物联网(Consumer IoT)中,机器学习可以使设备变得更加智能化,从而适应我们的习惯。

在本教程中,我们将探索如何使用 Android Things 和 TensorFlow 将机器学习应用到物联网中。这一 Android Things 物联网项目背后的基本思想就是,探索如何构建一个能够识别一些基本形状(比如箭头)并被控制的机器人小车(Robot car)。我们已经介绍过如何使用 Android Things 构建机器人小车,我建议您在开始此项目之前先阅读那篇教程。

本次机器学习和物联网项目主要涵盖以下主题:

  • 如何使用 Docker 配置 TensorFlow 环境

  • 如何训练 TensorFlow 系统

  • 如何集成 TensorFlow 与 Android Things

  • 如何使用 TensorFlow 输出结果来控制机器人小车

本项目衍生自 Android Things TensorFlow 图像分类器

我们开始吧!

如何在 Tensorflow 中创建一个图像分类器

在开始之前,我们有必要先安装并配置好 TensorFlow 环境。我并非机器学习专家,所以我需要找一些速成的东西并准备好使用,以便我们可以构建 TensorFlow 图像分类器。因此,我们可以使用 Docker 来运行一个搭载了 TensorFlow 的映像。照着以下步骤进行:

1. 克隆 TensorFlow 仓库:

gitclonehttps://github.com/tensorflow/tensorflow.git
cd/tensorflow
gitcheckoutv1.5.0

2. 创建一个目录(/tf-data),该目录将保存我们在项目中需要用到的所有文件。

3. 运行 Docker:

dockerrun-it\--volume/tf-data:/tf-data\--volume/tensorflow:/tensorflow\
--workdir/tensorflowtensorflow/tensorflow:1.5.0bash

使用这些命令,我们就可以运行一个交互式 TensorFlow 环境并增加(Mount)一些我们将在项目中使用到的目录。

如何训练 TensorFlow

在 Android Things 系统能够识别图像之前,我们有必要先训练 TensorFlow 引擎,以构建其模型。以此为由,收集一些图片是有必要的。如前所述,我们希望使用箭头来控制 Android Things 机器人小车 —— 所以我们必须收集至少四种类型的箭头:

  • 向上箭头

  • 向下箭头

  • 左箭头

  • 右箭头

为训练该系统,我们有必要对这四种不同的图像类别创建一个“知识库”。在 /tf-data 中一个名为 images 的目录下创建四个目录,命名如下:

  • up-arrow

  • down-arrow

  • left-arrow

  • right-arrow

现在是时候去搜集图像资源了。我使用的是 Google 图片搜索,您也可以使用其他方法进行搜集。为了简化图片下载过程,您应该安装 Chrome 插件,它能够一键下载所有图片。可别忘了,您下载的图像越多,其训练过程(Training process)越好(即使创建模型的时间可能会有所增加)。

打开浏览器,开始查找以下四类图像:

每个类别我分别下载了 80 张图。我并不关心图片的扩展。

一旦所有类别都有其图像,请按照以下步骤操作(在 Docker 界面中):

python/tensorflow/examples/image_retraining/retrain.py\
--bottleneck_dir=tf_files/bottlenecks\
--how_many_training_steps=4000\
--output_graph=/tf-data/retrained_graph.pb\
--output_labels=/tf-data/retrained_labels.txt\
--image_dir=/tf-data/images

这操作可能需要花费一些时间,所以要耐心等待。最后,在你的文件夹 /tf-data 中应有两个文件:

  1. retrained_graph.pb

  2. retrained_labels.txt

第一个文件包含我们的模型,这是 TensorFlow 训练过程的结果。而第二个文件则包含了与我们的四个图像类别相关的标签

如何测试 Tensorflow 模型

如果你想测试模型,以检查一切是否正常,你可以使用以下命令:

pythonscripts.label_image\
--graph=/tf-data/retrained-graph.pb\
--image=/tf-data/images/[category]/[image_name.jpg]

优化模型

在能够使用这个 TensorFlow 模型到 Android Things 项目中之前,我们有必要优化它:

python/tensorflow/python/tools/optimize_for_inference.py\--input=/tf-data/retrained_graph.pb\--output=/tf-data/opt_graph.pb\--input_names="Mul"\--output_names="final_result"

这就是我们的模型。我们将使用此模型将机器学习应用于物联网(即集成 Android Things 与 TensorFlow)。其目标是为 Android Things 应用提供智能识别箭头图像,并作出相应反应,从而控制机器人小车的方向。

如果您想了解更多关于 TensorFlow 的细节,以及如何生成模型,请查看官方文档和这个教程

如何使用 Android Things 和 TensorFlow 将机器学习应用到物联网中

一旦 TensorFlow 数据模型准备就绪,我们就可以进入下一步:如何集成 Android Things 与 TensorFlow。为达成这一目的,我们可以将此任务分为两步:

  1. 硬件部分,我们将电机和其他外围设备(Peripheral)连接到 Android Things 板上

  2. 实现应用程序

Android Things 原理图

在深入探讨如何连接外围设备之前,我们先看看下面这个 Android Things 项目中使用的组件列表:

  1. Android Things 板(树莓派 3,Raspberry Pi 3)

  2. 树莓派相机

  3. 一个 LED

  4. LN298N 双H桥(用以控制电机)

  5. 带两个轮子的机器人小车底盘

我不在此介绍如何使用 Android Things 控制电机,因为我们已经在之前的文章中介绍过这一点。

以下是原理图:

1620

上图中,相机组件并未表现出来。其最终的结果如下:

基于 TensorFlow 实现 Android Things App

最后一步便是实现 Android Things 应用程序。为此,我们可以重用 GitHub 上名为 TensorFlow 图像分类器示例的示例项目。在开始之前,先克隆 GitHub 仓库,以便您可以修改源代码。

该 Android Things 应用与原来的应用有所不同,在于:

  1. 它不使用按钮来启动相机捕捉图像

  2. 它使用不同的模型

  3. 它使用一个闪烁的 LED 进行通知,摄像机在 LED 停止闪烁后拍摄照片

  4. 它在 TensorFlow 检测到图像(箭头)时控制电机。此外,在从步骤 3 开始循环之前,先打开电机 5 秒

要处理闪烁的 LED,请使用以下代码:

privateHandlerblinkingHandler=newHandler();privateRunnableblinkingLED=newRunnable(){
@Overridepublicvoidrun(){
try{
//Ifthemotorisrunningtheappdoesnotstartthecam
if(mc.getStatus())
return;
Log.d(TAG,"Blinking..");
mReadyLED.setValue(!mReadyLED.getValue());
if(currentValue<= NUM_OF_TIMES) {
       currentValue++;
       blinkingHandler.postDelayed(blinkingLED, 
                       BLINKING_INTERVAL_MS);
     }
     else {
      mReadyLED.setValue(false);
      currentValue = 0;
      mBackgroundHandler.post(mBackgroundClickHandler);
     }
   } catch (IOException e) {
     e.printStackTrace();
   }
  }};

当 LED 停止闪烁时,应用程序将捕获图像。

现在有必要关注如何根据检测到的图像来控制电机。修改方法如下:

@OverridepublicvoidonImageAvailable(ImageReaderreader){
finalBitmapbitmap;
try(Imageimage=reader.acquireNextImage()){
bitmap=mImagePreprocessor.preprocessImage(image);
}
finalListresults=
mTensorFlowClassifier.doRecognize(bitmap);
Log.d(TAG,
"GotthefollowingresultsfromTensorflow:"+results);
//Checktheresult
if(results==null||results.size()==0){
Log.d(TAG,"Nocommand..");
blinkingHandler.post(blinkingLED);
return;
}
Classifier.Recognitionrec=results.get(0);
Floatconfidence=rec.getConfidence();
Log.d(TAG,"Confidence"+confidence.floatValue());
if(confidence.floatValue()< 0.55) {
     Log.d(TAG, "Confidence too low..");
     blinkingHandler.post(blinkingLED);
     return ;
    }
    String command = rec.getTitle();
    Log.d(TAG, "Command: " + rec.getTitle());
    if (command.indexOf("down") != -1)
       mc.backward();
    else if (command.indexOf("up") != -1)
       mc.forward();
    else if (command.indexOf("left") != -1)
       mc.turnLeft();
    else if (command.indexOf("right") != -1)
       mc.turnRight();}

在这种方法中,当 TensorFlow 返回匹配捕获图像的可能标签后,应用程序会将结果与可能的方向进行比较,从而控制电机。

最后,是时候使用在刚开始时创建的模型了。拷贝 assets 文件夹下的 opt_graph.pb 与 reatrained_labels.txt 文件,并替换现有文件。

打开 Helper.java 并修改以下几行:

publicstaticfinalintIMAGE_SIZE=299;privatestaticfinalintIMAGE_MEAN=128;privatestaticfinalfloatIMAGE_STD=128;privatestaticfinalStringLABELS_FILE="retrained_labels.txt";publicstaticfinalStringMODEL_FILE="file:///android_asset/opt_graph.pb";publicstaticfinalStringINPUT_NAME="Mul";publicstaticfinalStringOUTPUT_OPERATION="output";publicstaticfinalStringOUTPUT_NAME="final_result";

运行应用程序,试试向相机展示箭头,并检查结果。机器人小车必须按照所示的箭头进行移动。

小结

在本教程的最后,我们介绍了如何运用 Android Things 与 TensorFlow 将机器学习应用到物联网中。我们可以使用图像控制机器人小车,并根据显示的图像移动机器人小车。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    66

    文章

    8414

    浏览量

    132604
  • IOT
    IOT
    +关注

    关注

    187

    文章

    4207

    浏览量

    196741
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60530
  • Android Things
    +关注

    关注

    0

    文章

    10

    浏览量

    4193
收藏 人收藏

    评论

    相关推荐

    zeta在机器学习的应用 zeta的优缺点分析

    探讨ZETA在机器学习的应用以及ZETA的优缺点时,需要明确的是,ZETA一词在不同领域可能有不同的含义和应用。以下是根据不同领域的ZETA进行的分析: 一、ZETA在
    的头像 发表于 12-20 09:11 215次阅读

    联网学习路线来啦!

    联网学习路线来啦! 联网方向作为目前一个热门的技术发展方向,有大量的人才需求,小白的学习入门
    发表于 11-11 16:03

    socket在联网的应用案例

    至关重要的角色。 1. 引言 联网(IoT)技术的发展,使得各种设备能够相互连接并交换数据,从而实现智能化管理和控制。在这个过程,Socket作为网络通信的基本接口,为设备之间的数据传输提供了可能。本文
    的头像 发表于 11-04 09:17 369次阅读

    什么是联网技术?

    什么是联网技术? 联网技术(Internet of Things, IoT)是一种通过信息传感设备,按约定的协议,任何物体与网络相连
    发表于 08-19 14:08

    如何将TRIZ的“最终理想解”应用到机器人电机控制设计

    的是产品或技术系统的理想化状态,即低成本、高功能、高可靠性、无污染等特性的完美结合。 在机器人电机控制设计,工程师们常常面临诸多挑战,如如何在提高控制精度的同时降低能耗和噪音,如何在有限的资源下实现最优的系统
    的头像 发表于 08-13 10:19 462次阅读

    如何将人工智能应用到效能评估工具中去解决

    智慧华盛恒辉人工智能应用到效能评估工具,可以通过以下几个步骤来实现,以提升评估的准确性、效率和实用性: 智慧华盛恒辉一、明确评估目标与指标 确定效能评估的目标:首先,需要明确效能评估的具体目标
    的头像 发表于 07-24 10:34 320次阅读

    联网在智慧校园的应用有哪些?一起来看!

    随着联网技术的快速发展,其在智慧校园的应用正逐渐改变传统的教育方式和校园管理模式。本文深入探讨
    的头像 发表于 07-23 09:06 2063次阅读
    <b class='flag-5'>物</b><b class='flag-5'>联网</b>在智慧校园<b class='flag-5'>中</b>的应用有哪些?一起来看!

    天拓四方:联网数据采集网关的几大特点探讨

    技术的深入应用提供了坚实的基础。本文详细探讨联网数据采集网关的几大特点。 一、多样化的通信接口与协议支持
    的头像 发表于 07-17 17:11 357次阅读

    机器学习的数据分割方法

    机器学习,数据分割是一项至关重要的任务,它直接影响到模型的训练效果、泛化能力以及最终的性能评估。本文将从多个方面详细探讨机器
    的头像 发表于 07-10 16:10 1762次阅读

    如何理解机器学习的训练集、验证集和测试集

    理解机器学习的训练集、验证集和测试集,是掌握机器学习核心概念和流程的重要一步。这三者不仅构成了模型学习
    的头像 发表于 07-10 15:45 3887次阅读

    机器学习在数据分析的应用

    随着大数据时代的到来,数据量的爆炸性增长对数据分析提出了更高的要求。机器学习作为一种强大的工具,通过训练模型从数据中学习规律,为企业和组织提供了更高效、更准确的数据分析能力。本文深入
    的头像 发表于 07-02 11:22 616次阅读

    [天拓四方]4G MQTT网关在联网应用的优势探讨

    ,因其高效、可靠、简单的特性,在联网领域得到了广泛的应用。而4G MQTT网关,作为连接物联网设备和MQTT服务器的桥梁,其在联网应用
    的头像 发表于 05-28 17:22 482次阅读

    如何将人工智能应用到战略评估系统中去做

    智慧华盛恒辉人工智能应用到战略评估系统,可以极大地提升战略评估的效率和准确性,以下是具体的应用方式: 是要实现战场态势的主动感知及精确判断。无论是战前预先规划还是作战行动的临机规
    的头像 发表于 04-24 14:01 320次阅读

    浅谈基于无线联网的建筑能耗监测系统探讨

    探讨一种基于联网的智能建筑能耗监测系统架构参考模型,以期实现楼字电力能源需求侧和供求侧的智能联动运行。 关键词:智能建筑;能耗监测;
    的头像 发表于 02-20 15:29 349次阅读
    浅谈基于无线<b class='flag-5'>物</b><b class='flag-5'>联网</b>的建筑能耗监测系统<b class='flag-5'>探讨</b>

    如何将增量旋转编码器与Arduino连接

    在本教程,您将学习如何将增量旋转编码器与Arduino连接,以读取旋钮的运动。这对于在机器人和其他应用程序创建用户界面或读取机械位置非常
    的头像 发表于 02-11 10:00 1429次阅读
    <b class='flag-5'>如何将</b>增量旋转编码器与Arduino连接