当前位置: 首页 > 科技观察

如何使用AndroidThings和TensorFlow在物联网上应用机器学习

时间:2023-03-15 19:02:36 科技观察

探索如何将AndroidThings与TensorFlow集成并将机器学习应用到物联网系统。了解如何在装有AndroidThings的RaspberryPi上使用Tensorflow对图像进行分类。该项目探索如何将机器学习应用于物联网。具体来说,我们将使用AndroidThings作为物联网平台,使用GoogleTensorFlow作为机器学习引擎。今天,AndroidThings发布了一个名为AndroidThings1.0的稳定版本,可以在生产系统中使用。您可能已经知道,RaspberryPi是一个支持AndroidThings1.0的开发和原型设计平台。本教程将使用AndroidThings1.0和RaspberryPi,当然你可以在不修改代码的情况下切换到其他支持的平台。本教程是关于将机器学习应用于物联网,即AndroidThingsRaspberryPi。IoT上的机器学习是最热门的话题之一。机器学习最简单的定义可能是维基百科上的定义:机器学习是一种计算机科学,它允许计算机在没有明确编程的情况下“学习”(即逐渐提高特定任务的性能)。使用数据的字段。换句话说,在训练之后,系统能够预测结果,即使它不是专门为他们编程的。另一方面,我们都知道物联网和连接设备的概念。最有前途的领域之一是如何在物联网上应用机器学习来构建专家系统,从而开发出会“学习”的系统。此外,这些知识可用于控制和管理物理对象。在深入了解AndroidThings的具体细节之前,您应该首先将其安装到您的设备上。如果您是第一次使用AndroidThings,您可以阅读本教程,了解如何在您的设备上安装AndroidThings。以下是应用机器学习和物联网可以产生重大价值的几个领域,仅举几个有趣的领域,它们是:工业物联网(IIoT)中的预测性维护在消费者物联网中,机器学习可以使设备更聪明,它使它们适应我们的习惯。在本教程中,我们想探索如何使用AndroidThings和TensorFlow将机器学习应用于物联网。这个AdnroidThingsIoT项目的基本思路是探索如何打造一辆能够识别前方道路基本形状(例如箭头)并控制其道路方向的自动驾驶汽车。我们已经介绍了如何使用AndroidThings构建自动驾驶汽车,因此我们建议您在开始此项目之前阅读该教程。这个机器学习和物联网项目涵盖以下主题:如何使用Docker配置TensorFlow环境如何训练TensorFlow系统如何使用AndroidThings集成TensorFlow如何使用TensorFlow的结果控制自动驾驶汽车本项目起源来自AndroidThingsTensorFlow图像分类器。让我们开始吧!如何使用TensorFlow图像识别在开始之前,您需要安装和配置TensorFlow环境。我不是机器学习方面的专家,所以我需要找到一些快速有效的东西,这样我们才能构建一个TensorFlow图像识别器。为此,我们使用Docker来运行TensorFlow图像。步骤如下:1.克隆TensorFlow仓库:gitclonehttps://github.com/tensorflow/tensorflow.gitcd/tensorflowgitcheckoutv1.5.02,创建目录(/tf-data),用于保存这个项目中用到的所有文件。3.运行Docker:dockerrun-it\--volume/tf-data:/tf-data\--volume/tensorflow:/tensorflow\--workdir/tensorflowtensorflow/tensorflow:1.5.0bash使用这个命令,我们要运行交互式TensorFlow环境,您可以挂载一些在处理项目期间使用的目录。如何训练TensorFlow识别图像在AndroidThings系统可以识别图像之前,我们需要训练TensorFlow引擎,以便它可以构建模型。为此,我们需要收集一些图像。如前所述,我们需要使用箭头来控制AndroidThings自动驾驶汽车,所以我们至少需要收集四种类型的箭头:向上箭头向下箭头左箭头右箭头来训练系统,这四种不同类型的图像需要被用来创建一个“知识库”。在/tf-data目录下创建一个名为images的目录,然后在其下创建四个子目录,名称如下:up-arrowdown-arrowleft-arrowright-arrow现在,我们来查找图像。我使用的是谷歌图片搜索,你也可以使用其他方法。为了简化图片下载过程,您可以为Chrome安装一个下载器插件,这样您就可以一键下载选定的图片。不要忘记下载更多图片,这样训练效果会更好。当然,创建模型的时间也会相应增加。延伸阅读如何使用API集成AndroidThings如何将AndroidThings与Firebase结合使用打开浏览器并开始寻找四个箭头的图片:TensorFlow图像分类器我为每个类别下载了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目录下找到如下两个文件:retrained_graph.pbretrained_labels.txt第一个文件包含了TensorFlow训练过程生成的结果模型,第二个文件包含了我们与一张图像相关的四个Tags类别。如何测试Tensorflow模型如果你想测试模型以验证它是否按预期工作,你可以使用以下命令:pythonscripts.label_image\--graph=/tf-data/retrained-graph.pb\--image=/tf-data/images/[category]/[image_name.jpg]优化模型在AndroidThings项目中使用我们的TensorFlow模型之前,我们需要对其进行优化: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"这就是我们所有的模型。我们将使用此模型将TensorFlow与AndroidThings集成,以将机器学习应用于物联网等。目标是利用AndroidThings应用智能识别箭头图片并对下一辆无人驾驶汽车的方向控制做出反应。如果您想了解有关TensorFlow的更多详细信息以及如何生成模型,请查看官方文档和本教程。如何使用AndroidThings和TensorFlow将机器学习应用到物联网既然TensorFlow的数据模型已经准备就绪,那么让我们继续下一步:如何将AndroidThings与TensorFlow集成。为此,我们将此任务分为两个步骤:对于硬件部分,我们将电机和其他组件连接到AndroidThings开发板以实现此应用程序。此AndroidThings项目中使用的组件列表:AndroidThings开发板(RaspberryPi3)RaspberryPi摄像头一个LED灯LN298N双H桥电机驱动模块(连接以控制电机)两轮自动驾驶汽车汽车底盘如何使用AndroidThings控制电机我就不重复了,因为之前的文章已经讲过了。这是一个示意图:IntegratingAndroidThingswithIoT上图中没有显示摄像头。最终结果如下:IntegratingAndroidThingswithTensorFlow使用TensorFlow实现AndroidThings应用最后一步就是实现AndroidThings应用。为此,我们可以重用Github上名为TensorFlowImageClassifierExample的示例代码。在开始之前,克隆Github存储库以便您可以修改源代码。这个AndroidThings应用与原始应用的不同之处在于:它不使用按钮来启动相机图像捕获它使用不同的模型它使用闪烁的LED灯来指示相机将在LED停止闪烁后拍照当TensorFlow检测到图像(箭头),它将控制电机。此外,它会在步骤3中的循环开始之前打开电机5秒。要使LED闪烁,请使用以下代码:privateHandlerblinkingHandler=newHandler();privateRunnableblinkingLED=newRunnable(){@Overridepublicvoidrun(){try{//如果电机正在运行,应用程序不会启动凸轮if(mc.getStatus())return;Log.d(TAG,"闪烁..");mReadyLED.setValue(!mReadyLED.getValue());if(currentValue<=NUM??_OF_TIMES){currentValue++;blinkingHandler.postDelayed(blinkingLED,BLINKING_INTERVAL_MS);}else{mReadyLED.setValue(false);当前值=0;mBackgroundHandler.post(mBackgroundClickHandler);}}catch(IOExceptione){e.printStackTrace();}}};当LED停止闪烁时,应用程序将捕获图片。现在我们需要关心的是如何根据检测到的图片来控制电机。修改这个方法:@OverridepublicvoidonImageAvailable(ImageReaderreader){finalBitmapbitmap;try(Imageimage=reader.acquireNextImage()){位图=mImagePreprocessor.preprocessImage(图像);}finalList结果=mTensorFlowClassifier.doRecognize(位图);Log.d(TAG,"从Tensorflow得到以下结果:"+results);//检查结果if(results==null||results.size()==0){Log.d(TAG,"Nocommand..");blinkingHandler.post(blinkingLED);返回;}Classifier.Recognitionrec=results.get(0);浮动置信度=rec.getConfidence();Log.d(TAG,"置信度"+confidence.floatValue());if(confidence.floatValue()<0.55){Log.d(TAG,"置信度太低..");blinkingHandler.post(blinkingLED);返回;}字符串命令=rec.getTitle();Log.d(TAG,"命令:"+rec.getTitle());如果(command.indexOf("down")!=-1)mc.backward();elseif(command.indexOf("up")!=-1)mc.forward();elseif(command.indexOf("left")!=-1)mc.turnLeft();elseif(command.indexOf("right")!=-1)mc.turnRight();}在这个方法中,当TensorFlow返回捕获的图像匹配得到可能的标签后,应用程序会将这个结果与可能的方向进行比较,并相应地控制电机***,它将去使用先前创建的模型。复制assets文件夹下的opt_graph.pb和retrained_labels.txt替换当前文件。打开Helper.java并修改以下行:publicstaticfinalintIMAGE_SIZE=299;privatestaticfinalintIMAGE_MEAN=128;privatestaticfinalfloatIMAGE_STD=128;privatestaticfinalStringLABELS_FILE="retrained_labels.txt";publicStringstaticfinalMODEL_FILE="文件:///android_asset/opt_graph.pb";publicstaticfinalStringINPUT_NAME="Mul";publicstaticfinalStringOUTPUT_OPERATION="output";publicstaticfinalStringOUTPUT_NAME="final_result";运行此应用程序,并向相机显示几种箭头以检查其反应。无人驾驶汽车将按照所示箭头移动。总结本教程到此结束,我们解释了如何使用AndroidThings和TensorFlow在物联网上应用机器学习。我们使用图片来控制自动驾驶汽车的运动。