Skip to main content

基于 Edge Impulse 的安全帽检测

note

本文档由 AI 翻译。如您发现内容有误或有改进建议,欢迎通过页面下方的评论区,或在以下 Issue 页面中告诉我们:https://github.com/Seeed-Studio/wiki-documents/issues

简介

在工业或建筑工地等工作环境中,安全帽是必需且重要的,用于保护人们的头部免受坠落物体、与其他物体碰撞、碎片、雨水和电击的伤害。它提高了安全性,但有时人们会低估其重要性,无论是个人还是工业层面。因此,基于视频的安全帽检测监控可以成为解决这一安全问题的优化方案。

因此,感谢 Louis Moreau 和 Mihajlo Raljic,我们提供了这个基础项目,我们将训练一个嵌入式机器学习模型来检测安全帽,并将其部署到 Jetson Nano 上。Jetson NXJetson AGX 也都支持。

入门

Edge Impulse 使开发者能够通过嵌入式机器学习创建下一代智能设备解决方案。在边缘设备上进行机器学习将使得今天由于成本、带宽或功耗限制而被丢弃的 99% 的传感器数据得到有价值的利用。在这里,我们将应用 Edge Impulse 来训练一个嵌入式机器学习模型。

硬件

所需硬件

在本项目中,所需设备如下:

硬件设置

PC 和 NVIDIA Jetson Nano 都需要通电并连接到互联网。建议将 NVIDIA Jetson Nano 设置为一台 PC。

软件

在这里,我们将训练一个嵌入式机器学习模型来检测安全帽。有几种方法可以实现这一目标。

准备工作

在开始项目之前,需要先完成一些准备工作。

  • 步骤 2. 点击“Create new project”(创建新项目),并输入项目名称。

这里我们输入“Hard hat detection”(安全帽检测)。

  • 步骤 3. 我们将训练一个嵌入式机器学习模型来检测安全帽,因此在这里应选择“image”(图像)选项。
  • 步骤 4. 将配置设置为“Classify multiple objects (object detection)”(分类多个对象(对象检测))。

现在我们可以开始这个项目了。

安全帽检测 ML 模型训练

基于输入公共数据集的 ML 模型训练

Edge Impulse 提供了几种收集数据的方法。首先,我们将公共数据上传到网站,并尝试开发一个嵌入式机器学习模型。

  • 步骤 1. 在左侧列中选择“Data acquisition”(数据采集)页面并收集数据。

点击“upload data”(上传数据)按钮,在“Data acquisition”(数据采集)页面上传下载的数据集。

可以选择将现有数据以数据采集格式(CBOR、JSON、CSV)上传到项目中,也可以上传 WAV、JPG 或 PNG 文件。

  • 步骤 3. 上传完成后,收集到的数据将包含标注的图像。继续点击页面左侧的“Impulse design”(脉冲设计)。
  • 步骤 4. 选择合适的图像处理模块和图像学习模块,并保存脉冲。
  • 步骤 5. 点击页面左侧的“image”(图像)。

将配置设置为“GRB”,然后点击“Save Parameters”(保存参数),页面将自动跳转到“Generate features”(生成特征)页面。

然后我们就可以生成特征了。

  • 步骤 6. 当页面显示“Job completed”(任务完成)时,点击页面左侧的“Object detection”(目标检测)。

点击“start training”(开始训练),让 Edge Impulse 根据生成的特征训练模型。

  • 步骤 7. 当页面显示“job done”(任务完成)时,点击“Model testing”(模型测试)以检查模型的运行效果。

基于自定义 PC 摄像头数据集的机器学习模型训练

Edge Impulse 提供了多种数据采集方式。在这里,我们将通过 PC 摄像头捕捉图片,定制自己的图像并上传到网站。

  • 步骤 1. 保持在“Dashboard”页面,然后点击“LET'S COLLECT SOME DATA”(让我们收集一些数据)。

我们可以选择多种选项来收集数据,这里我们使用电脑进行操作。

  • 步骤 2. 过一会儿,页面会显示已连接到电脑。点击“Collecting images?”(采集图像?),然后点击“Give access to the camera”(授予摄像头访问权限)。
  • 步骤 3. 点击“Capture”(捕捉)拍摄自己或他人的照片。图像数据需要在该部分标记为“Hard Hat”(安全帽)和“Head”(头部)。为了快速标记图片,强烈建议在进行下一类数据采集之前完成一类数据采集,例如,建议先完成“Hard Hat”的图片采集,然后再进行“Head”的图片采集。

捕获的图片会自动存储在“Data acquisition”(数据采集)中。为了提高训练模型的性能,强烈建议尽可能多地收集图片,并在不同类别中收集相同数量的数据。

  • 步骤 4. 点击“Labeling queue”(标记队列)通过在图片上用方框圈出头部来标记数据。

使用鼠标拖动一个框圈住对象以添加标签。然后点击“Save labels”(保存标签)以进入下一项。

将标签设置为“Head”和“Hard Hat”,并填写对话框。请确保方框框住人头的区域。

  • 步骤 5. 当数据标记完成后,点击“Save labels”(保存标签)并进入“Impulse design”(脉冲设计)。
  • 步骤 6. 选择合适的图像处理块和图像学习块,并保存脉冲。
  • 步骤 7. 点击页面左侧的“image”(图像)。

配置为“GRB”,然后点击“Save Parameters”(保存参数),页面会自动跳转到“Generate features”(生成特征)页面。

然后我们就可以生成特征了。

  • 步骤 8. 当页面显示“Job completed”(任务完成)时,点击页面左侧的“Object detection”(目标检测)。

点击“start training”(开始训练),让 Edge Impulse 根据生成的特征训练模型。

  • 步骤 9. 当页面显示“job done”(任务完成)时,点击“Model testing”(模型测试)以检查模型的运行效果。

基于自定义 NVIDIA Jetson 摄像头数据集的机器学习模型训练

Edge Impulse 提供了多种数据采集方式。在这里,我们将通过连接到 NVIDIA Jetson Nano 的摄像头捕捉图片,定制自己的图像并上传到网站。

  • 步骤 2. 确保您的 Jetson Nano 已连接到互联网,并在 Edge Impulse 中设置设备。

您可以使用以下命令检查网络连接:

ping -c 3 www.google.com

如果网络正常,结果应如下所示:

3 packets transmitted, 3 received, 0% packet loss, time 2003ms

设置开始运行以下命令:

edge-impulse-linux

然后网站会请求 Edge Impulse 账户。

如下所示的内容表示连接已完成。我们在 Edge Impulse 中保存的所有项目都可以选择。

我们正在捕捉照片,因此需要选择我们的 USB 摄像头并在网站上应用。

为我们希望连接到网站的设备命名。

可以清楚地看到设备 Jetson Nano 现在已连接到项目。

  • 步骤 3. 返回 Edge Impulse 页面并选择“Devices”列。连接的 Jetson Nano 如下所示:
  • 步骤 4. 选择我们连接到 Edge Impulse 的设备并转到“Data acquisition”页面。点击“Capture”拍摄自己或其他人的照片。图像数据需要在该部分中标记为“Hard Hat”和“Head”。为了快速标记图片,强烈建议在进入下一个类别之前完成一个类别的数据采集,例如建议先完成“Hard Hat”的图片采集,然后再进行“Head”的图片采集。

捕获的图片将自动存储在“Data acquisition”中。为了更好地训练模型的性能,强烈建议尽可能多地收集图片,并在不同类别中收集相同数量的数据。

  • 步骤 5. 数据采集完成后,转到“Impulse design”。

  • 步骤 6. 选择合适的图像处理块和图像学习块并保存设计。

  • 步骤 7. 点击页面左侧的“image”。

配置为“GRB”并点击“Save Parameters”,页面将自动跳转到“Generate features”页面。

然后我们可以生成特征。

  • 步骤 8. 当页面显示“Job completed”时,点击页面左侧的“Object detection”。

点击“start training”,让 Edge Impulse 根据生成的特征训练模型。

  • 步骤 9. 当页面显示“job done”时,点击“Model testing”检查模型的工作效果。

建议结合我们提供的方法并检查每个模型的性能,以确定哪个模型更好。

将机器学习模型部署到 Jetson Nano

现在我们将训练好的机器学习模型部署到 Jetson Nano,并应用代码使其运行。

通过 Edge Impulse Linux CLI 部署机器学习模型

  • 步骤 2. 确保您的 Jetson Nano 已连接到互联网,并在 Edge Impulse 中设置设备。

!!!注意 如果您已经在“基于定制的 NVIDIA Jetson 摄像头数据集的机器学习模型训练”部分中将 Jetson Nano 连接到 Edge Impulse,则可以跳过此步骤。

您可以使用以下命令检查网络连接:

ping -c 3 www.google.com

如果网络正常工作,结果应如下所示:

3 packets transmitted, 3 received, 0% packet loss, time 2003ms

设置开始运行以下命令:

edge-impulse-linux

然后网站会请求 Edge Impulse 账户。

如下所示的内容表示连接已完成。我们在 Edge Impulse 中保存的所有项目都可以选择。

我们正在捕捉照片,因此需要选择我们的 USB 摄像头并在网站上应用。

为我们希望连接到网站的设备命名。

可以清楚地看到设备 Jetson Nano 现在已连接到项目。

  • 步骤 3. 通过以下代码将 ML 模型下载到 Jetson Nano。
edge-impulse-linux-runner

成功连接后会显示如下内容,模型将自动激活。

  • 步骤 4. 复制显示的地址并用浏览器打开。

检测结果将显示在浏览器上。

数据输出结果如下所示:

通过 Linux Python SDK 部署 ML 模型

在本项目中,我们将应用模型在屏幕上显示安全帽检测结果,通过显示“禁止进入”和“欢迎”来实现。Edge Impulse 提供了一个库,使得在 Linux 机器上运行 ML 模型和传感器数据采集成为可能。该 SDK 是开源的,托管在 GitHub。您也可以尝试我们已经设置好的镜像

  • 步骤 1. 为 Linux 安装最新版本的 Python 3(>=3.7)。

  • 步骤 2. 使用以下命令安装 Linux Python SDK:

sudo apt-get install libatlas-base-dev libportaudio2 libportaudiocpp0 portaudio19-dev
pip3 install edge_impulse_linux
sudo apt install python3.7-dev
wget -q -0 - https://cdn.edgeimpulse.com/firmware/linux/jetson.sh | bash
  • 步骤 4. 使用以下命令将 ML 模型下载到 Jetson Nano:
edge-impulse-linux-runner --download modelfile.eim

如果这是 Jetson Nano 和 Edge Impulse 之间的首次连接,网站将要求您输入 Edge Impulse 账户信息进行登录。

!!!注意 这会将文件下载为 modelfile.eim,如果您想切换项目,可以通过添加 '--clean' 来完成。

python3 hardhat_detectation.py /home/jetson-nano/modelfile.eim
  • 步骤 6. 结果应类似于以下内容:

或者它可以是一个图像,在 5 分钟内部署您的 ML 应用程序用于 PPE 检测管道?敬请关注我们!

技术支持与产品讨论

感谢您选择我们的产品!我们为您提供多种支持,以确保您使用我们的产品时体验顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...