×

使用Azure和机器学习进行传感器数据分析

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-16

张鹏

分享资料个

描述

在过去的几年里,深度神经网络在模式识别、计算机视觉、语音识别和图像分类等各种问题上为我们提供了最好的结果。

将机器学习应用于传感器和信号数据使设备比以往任何时候都更智能,并将成为物联网领域的突破。无论您使用的是声音、振动、图像、电信号还是加速度计或其他类型的传感器数据,您都可以通过教导机器使用廉价的微控制器在边缘实时检测和分类事件来构建更丰富的分析用于处理 - 即使是嘈杂的、高变化的数据。在这篇研究论文中可以看到更多关于机器学习和数据分析的信息。

在其他黑客博客中,我们介绍了无线传感器在许多工业应用中的使用。在不同的用例中,我们看到我们正在获取大量数据。有些是相关数据,有些是不相关的。收集这些数据并建立机器学习模型可以帮助我们从传感器收集相关信息。

在这个教学中,我们将学习:

  • 设置 ESP32 开发板
  • 物联网远程无线温湿度传感器
  • 在无线温度传感器和 ESP32 之间建立连接
  • 闪烁 ESP 32 并从无线温度和湿度传感器收集传感器数据
  • 使用 Power BI 分析和可视化图表和图形中的传感器数据
  • 从 Power BI 以 CSV 格式导出传感器数据
  • 使用此数据创建数据集。
  • 使用 tensorflow 创建 CNN(卷积神经网络模型)

硬件和软件规格

软件规范

硬件规格

  • ThingHz 无线温湿度传感器
  • FTDI 串行编程器

获取温度和湿度值

 
pYYBAGNy23WAU25cAABsHC_zB0U511.jpg
 

我们从无线温度和湿度传感器获得以下值:

  • 摄氏温度
  • 华氏温度
  • 相对湿度
  • 电池使用情况

然后在 Azure IoT 中心对这些数据进行可视化和分析。若要开始设置 Azure IoT 中心,请阅读本教程。为了发送值 Azure IoT 中心,应遵循以下过程。

Azure IoT 中心遵循 MQTT 协议以发布和订阅数据。

  • Azure 函数是 azure 门户提供的另一个重要功能。使用 Azure 函数,我们可以在云中编写一段代码或函数。在这个项目中,我们正在解析包含原始传感器数据的 JSON,并使用 Azure 函数从中获取真实的温度和湿度值。要设置 Azure 功能,请遵循本教程。
  • 我们将使用解析后的 JSON 原始数据获取真实的温度和湿度数据
public static async Task Run(HttpRequestMessage req, TraceWriter log)
{  double humidity;  
int rawTemp;  
double Ctemp;  
double Ftemp;  
double voltage;  
string utcEnque;  
string devFormat;  
string utcProcess;  
log.Info("C# HTTP trigger function processed a request: " + content);  
JArray array = JArray.Parse($"{await req.Content.ReadAsStringAsync()}");

//parsing the JSON array   
foreach(dynamic message in array){      
utcProcess = message.EventProcessedUtcTime;      
utcEnque = message.EventEnqueuedUtcTime;      
humidity = ((message.Humid1)*256 + (message.Humid2))/100;      
rawTemp = ((message.Temp1)*256 + (message.Temp2));      
Ctemp = rawTemp /100.0;         
Ftemp = Ctemp *1.8 + 32;       
int bat = ((message.Bat1)*256 + (message.Bat2));      
voltage = 0.00322 * bat;      
string utcTime = utcProcess.ToString();      
DateTime localDateTime = DateTime.Parse(utcTime);      
 DateTime utcDateTime = localDateTime.ToUniversalTime();      
string usTimeZone = "US Eastern Standard Time";      
TimeZoneInfo ust = TimeZoneInfo.FindSystemTimeZoneById(usTimeZone);     
DateTime dateTime = TimeZoneInfo.ConvertTime(utcDateTime, ust);      
log.Info(dateTime.ToString("dd/MM/yyyy HH:mm:ss"));    \
}
return req.CreateResponse(HttpStatusCode.OK, "Executed");  
} 
public class Message{    
[JsonProperty("temp1")]    
public int temp1 { get; set; }    
[JsonProperty("temp2")]    
public int temp2 { get; set; }    
[JsonProperty("humid1")]    
public int humid1 { get; set; }    
[JsonProperty("humid2")]    
public int humid2 { get; set; }    
[JsonProperty("bat1")]    
public int bat1 { get; set; }    
[JsonProperty("bat2")]    
public int bat2 { get; set; }  
}

在 PowerBi 中分析数据

我们正在使用 Power BI 来可视化数据。它提供了分析数据的交互式方法。此数据可以以折线图、条形图、饼图等形式进行解释。首先在 Power Bi 中创建一个帐户并登录到您的帐户。在上一篇文章中,我们设置了 Power Bi 并使用流分析作业将数据发送到 Power Bi。在这篇文章中,我们使用 Azure 功能将传感器数据发送给 Bi。要设置 Power Bi,请阅读此博客。

有四种方法可以将数据发送到 Power Bi:

  • 将数据从 IoT 中心直接流式传输到 Power Bi。
  • 使用 API 向 Power Bi 发送数据。
  • 使用 web-hook 函数使用 PubNub。

在我们的例子中,我们使用 Power BI API 并从 azure 函数向 Power BI 发送 HTTP 响应。可视化面板中列出了不同的图形、折线图、Pi 图等。我们可以通过从可视化面板中选择任何图表来创建图表。

我们还可以将数据导出为 Excel 表格或 CSV 格式。在后期可用于数据分析。

PowerBI 的 Azure 函数代码

从 JSON 中解析所有 JSON 对象,并获取温度、湿度等的真实值。这里的产品是一个产品类对象,我们在其中存储解析的值。

Product product = new Product();
foreach(dynamic message in array){      
humidity = ((message.humid1)*256 + (message.humid2))/100;      
rawTemp = ((message.temp1)*256 + (message.temp2));      
Ctemp = rawTemp /100.0;         
Ftemp = Ctemp *1.8 + 32;       
int bat = ((message.bat1)*256 + (message.bat2));      
voltage = 0.00322 * bat;      
utcProcess = message.EventProcessedUtcTime;      
utcEnque = message.EventEnqueuedUtcTime;      
product.Ctemperature = Ctemp;      
product.Ftemperature = Ftemp;      
product.humid = humidity;      
product.battery = voltage;     
//product.dateTime = ;         
product.EventProcessedUtcTime=utcProcess;       
product.EventEnqueuedUtcTime=utcEnque;     
}
public class Product{  
public double Ctemperature{get; set;}  
public double humid{get; set;}  
public double battery{get; set;}  
//public double dateTime{get; set;}  
public string EventProcessedUtcTime { get; set; }  
public string EventEnqueuedUtcTime { get; set; }  
public double Ftemperature{get; set;}}
  • 现在创建一个变量来存储 Power Bi 的连接字符串
  • 创建 HTTP 客户端实例
string connString = "https://api.powerbi.com/beta/***************"; 

 

HttpClient client = new HttpClient();

  • 我们需要发送 JSON 给 Bi 供电。因此,使用模型类对象序列化 Json。
  • 将转换后的 JSON 作为 HTTP 请求发送到 power bi。
string output = JsonConvert.SerializeObject(product);    
HttpContent httpContent = new StringContent("[" + output + "]");       
HttpResponseMessage response = await client.PostAsync(connString, httpContent);     
response.EnsureSuccessStatusCode();

创建数据集

 
pYYBAGNy23eAIR3-AACNNXNsh0s986.jpg
 

该数据集由 CSV 格式的 Power BI 中的温度、湿度值组成。使用这些信息,我们将预测机器的状况。机器状况按以下方式分类

  • 良好的条件
  • 良好的条件
  • 粗糙的条件
  • 非常粗糙的条件
  • 危险等级
  • 病情严重

温度和湿度值称为Features ,与这些值相关的条件称为Labels 我们将对该数据集进行特征提取并训练该数据集以映射真实标签。将训练数据集与测试集进行比较以找到真实结果。这种机器学习方法称为线性回归

训练数据集

 
 
 
 
poYBAGNy23mAAlm8AABKzQu5fNs022.png
 
1 / 2
 

我们将数据集分为两部分:

  • 训练集- 训练集包含 800 个特征。
  • 测试集- 测试集包含大约 500 个特征。

我们正在使用遵循线性回归的LDA(线性判别分析)来训练数据。使用 LDA 提取特征后。这些特征被提供给卷积层。在这一层,权重与输入进行卷积,并将偏差添加到其中。这个过程针对不同的卷积层进行。然后我们添加一个最大池化层并添加一个激活函数(在我们的案例中我们使用Relu ,更多关于这可以在这项研究工作中找到),其中再次对特征进行下采样以使用正确的标签映射数据。然后在最后我们有一个完全连接的层,其中特征再次被向下采样到标签大小。最后一层的大小等于标签的大小。

 
 
 
 
pYYBAGNy23yALf_dAABa6Lkl0aA226.png
 
1 / 2
 

优化准确性和损失

 
 
 
 
poYBAGNy236AfWaXAABLeSaTZJc325.png
 
1 / 2
 

我们优化了2000次迭代的数据集,发现如下结果:

培训结果

  • 训练准确率(1500 epochs)- 100%
  • 训练损失(10 个时期)- 3.4%

试验结果

  • 测试准确率(1500 epochs)- 98.7%
  • 测试损失(10 个时期)- 12.5%

整体代码

此设置的固件可在此GitHub 存储库中找到


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

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !