本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 TinyML 的口罩检测系统

发布时间:2021-10-30
分享到:

基于 TinyML 的口罩检测系统

发布时间:2021-10-30
分享到:

众所周知,一场流行病改变了人类的生活方式。预防大流行最有效的方法是戴口罩。一项具有挑战性的研究任务是检测戴口罩或不戴口罩的人,以防止 SARS-CoV-2 在人与人之间传播。

最近开始对边缘计算感兴趣,于是从M5Stack买了各种边缘设备开始使用。因此,这次我使用M5Stack UnitV2的AI摄像头结合M5Stack Core2开发套件开发了一个口罩识别。M5Stack UnitV2的 摄像头设备监控入口并检测口罩是否佩戴,并通过在M5Stack Core2上显示图像以声音和视觉通知您。

本教程甚至适用于那些第一次使用边缘设备和面罩识别的人,只需按照以下过程使用 UiFlow 工具的拖放块编码,无需编写代码即可执行。M5stack 的图形化编程平台 UiFlow 让每个人都可以轻松开始创建他们的 IoT 和 TinyML 项目!

先决条件
在开始学习本教程之前,您需要具备以下条件:

M5Stack Core2 ESP32 物联网开发套件
M5Stack UnitV2 - 用于边缘计算的独立 AI 相机 (SSD202D) TinyML
一台具有互联网连接并能够刷写 M5Stack Core2 的计算机。在这里,我们将使用笔记本电脑。
一些 Python 和 Blockly 的经验会有所帮助,但不是必需的。
那么,让我们开始吧!

什么是 TinyML?
让我们从解释什么是 TinyML 开始。

TinyML 是机器学习领域,涉及适用于M5Stack UnitV2等低功耗和嵌入式设备的模型。

关于 M5Stack UnitV2
首先简单介绍一下相机设备M5Stack UnitV2。它是 M5Stack 出售的配备 AI 的相机设备。

所述UnitV2从M5Stack是采用SigmaStar SSD202D(ARM的Cortex-A7双核1.2GHz)为核心,嵌入式128MB DDR3存储器,具有512MB NAND闪存,1080P照相机,2.4G无线网络连接,和冷却风扇的独立设备。

UnitV2还集成了M5Stack开发的AI识别应用(如人脸识别、物体跟踪、颜色跟踪、形状检测、条码检测),帮助用户构建自己的AI应用。

您可以通过连接到计算机的 M5Unit V2访问http://10.254.239.1/来使用预装的功能。

另外,M5Stack的AI模型训练服务V-Training可以用来搭建自定义识别模型,下面我会介绍一下。

关于 M5Stack Core2
该系统的核心是 ESP32 - 乐鑫生产的微控制器。

本产品是M5Stack开发套件系列的第二代Core设备,是对原代Core功能的进一步提升。

M5Stack拥有丰富的传感器等功能扩展模块,无需焊接即可连接,因为它可以让您相对轻松地启动复杂的项目,加快开发速度,同时提高质量。

本产品的开发平台和编程语言为Arduino 、UIFlow 、MicroPython 。

从 Kaggle 下载自定义数据集
没有数据就没有机器学习。因此,第一步涉及收集训练数据。任何深度学习模型都需要大量的训练数据才能在推理上获得良好的结果。

我们需要使用 Kaggle 网站找到口罩的数据集。要使用 Kaggle 资源,您需要登录 Kaggle 网站。第一步,从Kaggle下载数据集。该数据集可从以下链接下载。

课程是:

带口罩
不带口罩
解压缩一个 zip 文件。

V-Training 对象识别模型训练服务
V-Training是一项服务,可让您使用M5Stack UnitV2轻松识别对象。

接下来,让我们实际创建一个使用 V-Training 进行面罩识别的模型。官网有更详细的教程,这里是对训练过程的大致说明。

第 1 步:V-Training 注册

好的,现在让我们开始吧。转到此链接并在 V-Training 中创建一个免费帐户。如果您已经在 M5 论坛中拥有一个帐户,只需使用您的凭据登录即可。

第 2 步:从您的数据集中上传图像

学习所需的最少图像数量为每班 30 张图像。图像训练集的整体大小不允许超过 200M。

为了提高训练效果,样本越多越好。

第 3 步:创建标签

例如,本教程中创建了两个样本标签。带口罩和不带口罩。

第 4 步:数据标记

这一步比较枯燥,因为采集的数据是没有标签的,所以需要手动标记图片中的目标。

我们在我们希望检测器看到的每个对象周围绘制一个框,并用我们希望检测器预测的对象类标记每个框。

在此屏幕截图中,我放置了一个矩形来标记面罩。在这里,我将矩形标记为With_mask。

第 5 步:训练模型

选择高效模式并点击上传。训练并等待结果返回。

等待训练完成以生成模型。

如果学习模型创建成功,您将收到如下所示的结果。

如果创建模型失败,写的原因会写为Failed ,请更正后重试。如果你能训练成功,你可以检查模型的准确性和训练结果损失的转变。

训练好的模型可以作为压缩文件从网站下载。

第 6 步:模型部署

现在模型已经训练好了,是时候将它部署到 M5Stack UnitV2 上了。由于它从一开始就内置了对象检测程序,因此您需要通过使用 Web 界面来上传您的训练模型。

UnitV2启动后,AP热点(SSID:M5UV2_XXX:PWD:12345678)默认开启,用户可以通过Wi-Fi接入与UnitV2建立网络连接。

我们可以使用UnitV2作为AI摄像头,从串口发送目标检测结果。它将通过串口(底部的HY2.0-4P接口)不断输出识别样本数据。与UART串口通信,所有识别内容通过串口以JSON格式输出。

简单来说,UnitV2识别出来并以JSON格式通过UART发送到M5Stack。

M5Stack Core2 设置
为了使用 M5Stack Core2,您需要先进行设置。

与其他主板不同,默认情况下,UIFlow 功能不会闪存到 M5Stack Core2 上。这是开始使用 UIFlow 对电路板进行编程所需要做的第一件事。

  • 下载并安装M5Burner ,这是一个根据您正在使用的M5Stack模块进行固件写入的工具。
  • 打开 M5Burner

  • 下载最新版本的 M5Stack Core2 固件。
  • 将 M5Stack 连接到您的 PC,指定 COM 端口,并使用 BURN 写入固件
  • 建议在连接 WiFi 时也使用此 M5Burner 进行设置。
  • 当M5Stack重新启动并连接到WiFi时,会显示API Key,网络连接成功!
  • 现在您可以开始使用 UIFlow 进行编程了!

使用 UIFlow 编写人脸检测的 Blockly 程序
UIFlow是基于谷歌开源的可视化编程环境Block为M5Stack系列开发的基于Web的可视化编程环境。您可以在块编程和 Python 编码之间切换。

将以下代码块复制到Blockly编辑区,然后点击右上角的Run执行代码。也拖放控件元素。

下面的程序只是在 M5Stack Core2 的屏幕上显示预测类别,并且在检测到面罩与否时发出声音。

使用 Grove 电缆将 M5Unit V2 连接到 M5 Core2。

结论
今天,我们开发了一种检测口罩的工具,它使用带有摄像头的设备 M5Stack UnitV2 与著名的 M5Stack Core2 共同开发。这个UnitV2的重要部分不仅是拇指大小,而且可以进行低成本和高性能的图像处理。与 Nvidia Jetson Nano 相比,UnitV2 更加方便和简单。此外,我们使用 V-Training 使学习更容易、更快。未来,我想尝试提高检测精度并将数据上传到云物联网服务。

我希望这能帮助您开始将 TinyML 用于嵌入式设备!

详情请参考该方案中所用到的代码。

如果您对此项目有任何想法、意见或问题,请在下方留言。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论