×

使用Helium、Grid EYE和Raspberry Pi进行人数统计

消耗积分:0 | 格式:zip | 大小:0.08 MB | 2022-10-28

池鹄展

分享资料个

描述

使用 IR 传感器检测房间中的人员

您是否想远程监控建筑物中的房间或空间,并确保房间在应有的使用时处于使用状态?那么你来对地方了。Helium ,我们经常被问到如何做到这一点的最佳方式。我们的建议(如下详述)是构建能够完成这项工作的传感器和 Web 应用程序的快速 POC 版本。如果您想大规模部署这些,请致电我们。

虽然这绝不是一个完整的空间监控应用程序,但它是一个合适的、轻量级的版本,如果供应商将其作为一个打包的解决方案进行宣传,您需要支付 50-100 倍以上的费用。

我们将涵盖的内容

自行部署此传感器系统应该相当简单,不到 45 分钟。以下是我们将介绍的内容:

  • 使用 Grid-EYE 传感器、Pi 和 Helium Atom 构建人员计数器原型。
  • 在氦仪表板中注册您的氦元素网关和氦原子原型模块;并建立您自己的低功耗广域无线网络。
  • 使用 Helium、JSON、OpenCV 和 Matplotlib 库在 Python 中对 Grid-EYE 进行编程。具体来说,我们将从 Grid-EYE 捕获原始读数并进行一些边缘处理以将其转换为简单的 JSON。
  • 通过 Helium 网络无线发送我们的 JSON 数据,并使用 AWS IoT 和 AWS QuickSight 将其可视化。

这会很有趣。让我们骑吧。

所需的硬件和软件

 
poYBAGNYzk6AKcBHABAvxsEpFzM689.jpg
从左到右,氦元素、Pi 零、原子原型模块和 Grid-EYE
 

要构建您自己的轻量级人数统计应用程序,您需要以下硬件和软件:

  • Raspberry Pi -下面我们使用的是Pi 3 ,我们推荐它来完成这项任务。
  • 一个监控空间——这个应该很容易。我们推荐您的办公室,或者您最喜欢的炸玉米饼卡车的线路。或者也许你的猫住在哪里。

构建 Grid-EYE

首先,我们需要创建我们的传感器。这就是您将要构建的内容:

 
pYYBAGNYzlWABiWBAAx7lTub7Hg318.jpg
Grid-EYE 连接到
 

您需要通过 将 Grid-EYE 连接到 Raspberry Pi I2C 。电压线将5V 取决于3.3V 所选的 Grid-EYE 型号。引脚和I2C Raspberry Pi 是04(SCL)06(SDA)对于这个项目,中断引脚可以保持断开状态。

 
pYYBAGNYzlyAd5ZSAA0MhOYW1ak353.jpg
从 Grid EYE 到 Pi 的接线
 

如果您使用的是 DigiKey Grid-EYE,则 Grid-EYE 的电源电压应连接到 Raspberry Pi3.3V 引脚。如果您使用的是 Adafruit Grid-Eye,则 Grid-Eye 的电源电压应连接到 5V 引脚。

在这里,我使用的是 Adafruit Grid-Eye:

 
pYYBAGNYzmOAD2jYAAqP99CcK7Y287.jpg
Adafruit Grid-EYE Breakout 的特写
 

作为参考,这里是完成板的整体示意图。

 
poYBAGNYzmmAZyhwAAGMuBg-I4Q527.png
我们的人员计数器示意图。
 

完成此操作后,拍照,在 Twitter 上发布带有创意标签的照片,然后将其放在一边。现在是时候使用 Helium 启动您自己的分布式低功耗广域网 (DLPWAN)。

部署您的氦元素网关

Helium Element Gateways 创建了一个(分布式低功耗广域网(DLPWAN),负责物联网设备和云之间的双向传感器数据路由。在此部署中,您的 Element 将为您的人员计数器路由数据,但它可用于未来所有基于 Helium 构建的传感器——即使是不属于你的传感器。

部署氦元素既快速又简单。这是一个关于如何做到这一点的快速视频:

 

首先,只需将电源和提供的以太网电缆插入 Element 和一个接受出站流量的实时以太网端口。当正面的 LED 变为绿色表示以太网连接成功时,元素将被连接。如果 Element 是 Cellular 版本,它会在成功连接到 Cellular 时显示蓝色LED。

使用氦仪表板注册您的元素和原子

现在您需要在Helium Dashboard 中注册您的硬件。整个过程将花费您不到 120 秒的时间。Helium Dashboard 将是您管理和查看已连接设备以及管理云通道(如我们稍后将部署的AWS IoT 通道)的界面。

每个 Helium 设备在您收货之前都已在 Helium 注册。要使其运行,您只需在仪表板中将其分配给您自己。

您可以在此处找到有关 Helium Dashboard的完整文档

  • 元素注册以完全相同的方式完成。选择新元素,然后提供名称、其最后四位MAC Address 及其四位数字HVV Code. 此外,请确保为您的元素输入位置,以便仪表板可以在地图上显示它同样,如果需要,请在此处查看完整文档。

好吧。激活和部署 Helium 硬件后,现在不是连接 Helium AWS IoT 通道并获取从边缘流向云的传感器数据的时候了。

部署 AWS IoT 通道并验证数据流

现在我们需要部署一个 AWS IoT 通道。可以在 Helium 开发人员文档中找到有关如何执行此操作的完整说明简短摘要如下:

  • 在您的 AWS IoT 组织中,找到您的Access Key ID, Secret Access,Region.
  • 将频道代码部署到您的设备。创建通道后,Helium Dashboard UI 将自动生成将数据从 Helium Atom 发送到 AWS IoT 所需的代码。对于 Pi,它看起来像这样:
from helium_client import Helium  
helium = Helium("/dev/serial0") 
helium.connect()  
channel = helium.create_channel("aws_channel_name") 
channel.send("hello from Python")

除了上面链接的 AWS IoT 频道文档之外,这里还有一个视频,展示了如何将其端到端连接起来。

 

对 Grid-EYE 进行编程

现在我们已经在您的 Helium 传感器和 AWS IoT 之间启动并运行了数据流,我们可以加载 Python 程序以从 Grid-EYE 捕获数据。(在此之后,我们将通过在 AWS Quicksight 中可视化数据来将它们放在一起。)

以下是接下来的步骤:

  • 更新 Raspberry Pi 并安装相关的库。
  • 通过运行每个电路板经销商提供的测试示例来测试 Grid-EYE 的功能,以确保连接正确。
  • 通过运行 Helium 库中的示例设置代码来测试 Helium Atom 和 Element 的功能。
  • 确保两个硬件设备的功能正常后,获取下面的 Grid-EYE 代码并在您的 Pi 上运行它。

使用以下命令在您的 Pi 上安装 Grid-EYE 库

cd ~ 
git clone https://github.com/adafruit/Adafruit_AMG88xx_python.git 
cd Adafruit_AMG88xx_python
python setup.py install
//check setup success
python
import Adafruit_AMG88xx

如果import 语句没有返回错误,则说明AMG88xx库安装成功。

使用以下命令安装 OpenCV 和以下库:

sudo apt-get install python-opencv 
sudo pip install imutils
sudo apt-get install libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
sudo pip install numpy
sudo apt-get install python-matplotlib

通过运行以下命令检查您的 OpenCV 安装:

python
import cv2
cv2.__version__

从像素数组到 JSON

随着我们的 Pi 准备就绪,我们现在可以开始从 Grid-EYE 捕获数据并进行一些边缘处理以将其转换为 JSON,然后再将其发送到 Helium 网络。

Python 实现中来自 Grid-EYE 的原始数据被采样为原始 64 元素数组。然而,使用更复杂的 OpenCV 工具,这个数组被重新格式化为一个 8x8 数组,并被插值形成一个 32x32 的图像。

然后将图像转换为灰度、反转并使用斑点检测工具扫描圆形斑点。OpenCV 计算在结果图像中发现的 blob 数量,并且该变量通过 Helium 网络无线发送到 AWS IoT。

在传感器级别,从 Grid-EYE 传输到我们的 Raspberry Pi 的原始数据采用数组格式,通常遵循以下模式:

pixels = [num0, num1, num2, ..., num63]

该数据被重新格式化以适应 8x8 数组,如下所示:

pixels = [[num0, num1,..., num7],
          [num8, num9,..., num13],
          [...],
          [num55, num56,..., num63]] 

这 64 个数据点中的每一个都是由 Grid-EYE 返回的电压,该电压又对应于温度读数。从那里,可以将这些插值到 32x32 数组并保存为图像。他们出来看起来像这样?

 
pYYBAGNYzm2AUEzoAAAHMUBdyyU052.jpg
你看到多少人?
 

这很好,但是我们可以消除通过空中传输此图像的需要,而是通过在我们的 Pi 上运行的 Python 中的一些简单边缘处理(下面的代码),我们可以估计空间中的人数并将其转换到 JSON。

因此,通过设置阈值并在执行 blob 检测的传感器上运行一些代码,我们可以识别 blob 的数量,并创建一个简单的 JSON 表示,以通过空中发送到 Helium 和我们的可视化应用程序。

换句话说,这:

 Pixel Output:  
28.50 28.50 28.00 27.75 27.75 27.50 28.00 29.00  
29.50 28.75 28.00 27.25 27.00 27.25 29.00 29.25  
29.00 28.25 29.50 28.25 27.50 27.75 30.50 29.00  
28.50 29.00 31.25 31.00 29.75 29.25 31.25 29.50  
29.00 27.50 28.25 30.25 30.25 29.75 30.50 29.75  
27.25 27.00 27.00 27.75 29.75 30.00 29.25 27.75  
27.25 27.00 26.75 26.25 27.50 28.75 27.75 27.25  
26.50 26.50 26.00 26.00 26.00 26.25 26.50 26.25

变成这样:

{
"People" : "2"
}

在 Grid-EYE 的视野中用于定位人员的相对较大的图像数据被解析为最小的有价值的形式,以便通过线路发送。例如,如果传感器正在查看座位是否有人,则斑点检测功能还将返回每个斑点图像中的坐标。但是对于这个演示,我们只关心一个房间里有多少人。这是从我的办公桌上看的样子:

 
pYYBAGNYzoCAWH6TAAOjcpttqAg355.jpg
俯瞰作者办公桌的动作捕捉传感器。此外,Arch Linux 规则。
 

通过调整 Grid-EYE 温度阈值的灵敏度,您可以将其放置在距离某个区域最大 15 英尺的地方以扫描热特征。在此示例中,我将阈值设置为 30 摄氏度,这足以找到未覆盖的人体。当您第一次部署此传感器时,您很可能会注意到它需要一些调整。具体来说,您需要调整温度阈值以适应 Grid-EYE 正在查看的区域。

在 AWS QuickSight 中可视化人员数据

现在我们正在捕获空间中的人数,我们需要通过 Helium AWS IoT 通道将其传输到 Web 服务,并实时可视化空间利用率。公平警告:这个过程有点艰巨,但结果值得付出努力。阅读这篇博文了解详情。(另外,如果有人知道在不离开 AWS 的情况下可视化时间序列数据的更好方法,请告诉我。

这是回报。下面是 QuickSight UI 的屏幕截图,显示了在通过 Helium 网络发送到 AWS IoT 后经过我办公桌的人员:

 
pYYBAGNYzoOAZZMhAAHxvg1UYkU062.png
在 AWS QuickSight 中可视化的人员经过我在 Helium 总部的办公桌
 

小像素阵列和检测多个对象存在固有问题。在这两个代码示例中,都会删除低于人体温度阈值的值以改进检测。 此外,由于靠近身体的两个特别温暖的部分具有局部热量最大值,因此变化的体温会为某个区域的身体计数产生误报(读数2 而不是)。1但是通过一些测试和调整,您可以开始对返回的数据的准确性感到非常满意。

这是一篇关于在 AWS 中管理此设备状态以向您的对象检测器添加更多功能的博客文章。您可以更改采样时间,并从云端激活/停用传感器:

 

后续步骤和帮助

好工作!您现在拥有一个功能正常的 Grid-Eye,它具有基本的嵌入式对象检测功能。如果您想了解有关 Helium 的更多信息、如何制作自己的物联网项目原型,或了解有关此项目的更多信息,请在此处加入我们:


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

评论(0)
发评论

下载排行榜

全部0条评论

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