MaskCam:Jetson Nano AIoT口罩检测相机

2021-04-14 17:54:35 浏览数 (1)

这个项目来自:

翻译自:https://www.hackster.io/BDTI/maskcam-a-jetson-nano-aiot-mask-detection-camera-a04eea

MaskCam是基于Jetson Nano的智能相机系统的原型参考设计,该系统实时测量人群口罩的使用情况,并在边缘执行所有AI计算。MaskCam可检测并跟踪其视野中的人员,并通过对象检测,跟踪和投票算法确定他们是否戴着口罩。

它将检测统计信息上载到云中,在其中可以使用Web GUI监视摄像头正在观看的区域中的口罩合规性。它可以将特定的视频片段保存到本地磁盘(例如,突然涌入的许多人没有戴口罩),并且可以选择通过RTSP流式传输视频。

(放置在机场的MaskCam)

MaskCam由Berkeley Design Technology,Inc.(BDTI)和Tryolabs SA开发,并由NVIDIA资助开发。MaskCam是根据MIT许可证提供的。有关MaskCam的更多信息,请参阅BDTI的报告(https://www.bdti.com/sites/default/files/MyBDTI/pubs/Developing-Prototype-Mask-Jetson-Nano.pdf)。该项目在MIT许可下也完全开源。有关使用和修改MaskCam的更多详细信息,可参见GitHub存储库(https://github.com/bdtinc/maskcam)。

(注意:我们发现BDTI的报告里对比了Jetson系列的规格,特意列在这里)

该项目所需的材料

要设置MaskCam,您将需要:

  • 运行JetPack 4.4.1或4.5的Jetson Nano Developer Kit。(请参阅https://developer.nvidia.com/zh-cn/embedded/learn/get-started-jetson-nano-devkit ,了解如何在Jetson Nano上安装JetPack。)
  • 使用5V4A DC电源供电。
  • 一个USB网络摄像头连接到您的Nano
  • 利用网线,或者USB WiFi,或者M.2 WiFi模块将您的Jetson Nano连接到互联网
  • 另一台装有可以显示RTSP流的程序的计算机-我们建议使用VLC或QuickTime 。

本项目采用:

入门

在我们的Jetson Nano Dev Kit上运行MaskCam的最简单,最快的方法是使用我们的预制容器。

首先,打开Jetson Nano的电源,然后等待其完全启动。打开一个终端并使用以下命令从Docker Hub下载MaskCam容器(下载大约需要10分钟):

代码语言:javascript复制
sudo docker pull maskcam/maskcam-beta

使用查找本地Jetson Nano IP地址ifconfig。稍后将使用此地址查看来自摄像机的实时视频流,并通过Web服务器与Nano交互。

确保将USB摄像头连接到Nano,然后通过运行以下命令启动MaskCam。确保用您的Nano的IP地址代替<your-jetson-ip>

代码语言:javascript复制
sudo docker run --runtime nvidia --privileged --rm -it --env MASKCAM_DEVICE_ADDRESS=<your-jetson-ip> -p 1883:1883 -p 8080:8080 -p 8554:8554 maskcam/maskcam-beta

MaskCam容器将maskcam_run.py使用USB相机作为默认输入设备(),开始运行口罩检测脚本/dev/video0。加载时,它将在终端中产生各种输出消息。如果有错误,该过程将在几秒钟后自动结束。查看本指南末尾的“故障排除”部分,以获取有关解决错误的提示。

30秒左右后,它应不断生成状态消息(例如Processed 100 frames...)。让它保持运行状态(不要按Ctrl C,但要注意设备将开始加热)并继续进行下一部分,以查看实时口罩检测视频流!

观看实时视频流

如果您滚动浏览日志而没有看到任何错误,则应该找到类似以下的消息:

代码语言:javascript复制
Streaming at rtsp://aaa.bbb.ccc.ddd:8554/maskcam

aaa.bbb.ccc.ddd您之前提供的地址在哪里MASKCAM_DEVICE_ADDRESS。如果您未提供地址,则会在此处看到一些未知的地址标签,但流式传输仍将起作用。

您可以将该URL复制粘贴到另一台计算机上的RSTP流查看器中(请参阅下面视频如何使用VLC进行复制)。

如果一切顺利,您应该获得Nano视频流的奖励,脸上戴着口罩的绿色框和不戴着口罩的面部红色框。实时直播视频的示例如下所示。

该视频流给出了MaskCam如何工作的一般演示。但是,MaskCam还具有其他功能,例如能够将口罩检测统计信息发送到云并通过Web浏览器查看它们。如果您希望看到这些功能的实际效果,则需要设置一个MQTT服务器,这将在下一部分介绍:MQTT和Web服务器设置。

如果在运行实时流时遇到任何错误,请查看“疑难解答”部分,以获取有关解决错误的提示。有关配置MaskCam的更多详细信息,请查看GitHub页面上的“设置设备配置参数”部分(https://github.com/bdtinc/maskcam#mqtt-and-web-server-setup)。

MQTT和Web服务器设置

MaskCam旨在与Web服务器一起设置,该服务器存储掩码检测统计信息,并允许用户与设备进行远程交互。我们编写了用于实例化服务器的代码,该服务器从设备接收统计信息,将其存储在数据库中,并具有基于Web的GUI前端来显示它们。下面显示了示例设备的前端屏幕截图。

您可以通过在本地网络上的PC上启动服务器,然后将Jetson Nano MaskCam设备指向该服务器来测试和探索此功能。本节说明如何执行此操作。MQTT代理和Web服务器可以在Linux或OSX机器上构建和运行。我们已经在Ubuntu 18.04LTS和OSX Big Sur上对其进行了测试。

该服务器由多个docker容器组成,这些容器使用docker-compose一起运行。请按照平台的安装说明在您的机器上安装docker-compose,然后再继续。在下一步中设置容器时,将自动安装所有其他必需的软件包和库。

安装docker-compose之后,克隆此仓库:

代码语言:javascript复制
git clone https://github.com/bdtinc/maskcam.git

转到server/文件夹,该文件夹具有在四个容器上实现的所有必需组件:Mosquitto代理,后端API,数据库和Streamlit前端。

这些容器是使用环境变量配置的,因此可以通过复制默认模板来创建.env文件:

代码语言:javascript复制
cd servercp database.env.template database.envcp frontend.env.template frontend.envcp backend.env.template backend.env

唯一需要更改的文件是database.env。用文本编辑器打开它,更换<DATABASE_USER><DATABASE_PASSWORD>以及<DATABASE_NAME>用自己的值的字段。以下是一些示例值,但是出于安全原因,您最好更具创造力:

代码语言:javascript复制
POSTGRES_USER=postgresPOSTGRES_PASSWORD=some_passwordPOSTGRES_DB=maskcam

编辑数据库环境文件之后,您可以构建所有容器并使用单个命令运行它们:

代码语言:javascript复制
sudo docker-compose up -d

发出命令后请等待几分钟,以确保所有容器均已构建并正在运行。然后,通过运行ifconfig命令检查计算机的本地IP 。(应该是与开始的地址192.168...10...172...)。这是服务器IP将被用于连接到服务器(因为服务器托管在此计算机上)。

接下来,打开Web浏览器并输入服务器IP来访问前端网页:

代码语言:javascript复制
http://<server IP>:8501/

如果您在前端看到ConnectionError,请再等待几秒钟,然后重新加载页面。后端容器可能需要一些时间才能完成数据库设置。

现在,您的本地Web服务器已经设置好,并准备从Jetson Nano接收MQTT消息。

使用服务器设置设备

在本地计算机上(或在具有公共IP的AWS EC2实例中)设置服务器后,请切换回Jetson Nano设备。使用以下命令运行MaskCam容器,其中:

  • MQTT_BROKER_IP 设置为服务器的IP
  • MQTT_DEVICE_NAME 是您设备的名称(例如“ Camera1”)
  • MASKCAM_DEVICE_ADDRESS 是您的Jetson Nano的IP地址
代码语言:javascript复制
sudo docker run --runtime nvidia --privileged --rm -it --env MQTT_BROKER_IP=<server IP> --env MQTT_DEVICE_NAME=my-jetson-1 --env MASKCAM_DEVICE_ADDRESS=<your-jetson-ip> -p 1883:1883 -p 8080:8080 -p 8554:8554 maskcam/maskcam-beta

就是这样!如果设备可以访问服务器的IP,那么您应该在输出日志中看到一些成功的连接消息,然后在前端的下拉菜单中看到您的设备(如果没有看到,请重新加载页面)。在前端中,选择Group data by: Second并单击Refresh status以查看新数据到达时绘图如何变化。

故障排除

如果在使用MaskCam时遇到任何错误或问题,请查看我们的GitHub存储库中的“常见错误故障排除”部分。它列出了常见错误以及如何解决这些错误。

更多信息

如果您想了解有关MaskCam的更多信息并深入研究使其工作的代码,请访问我们的开源GitHub存储库,网址为 https://github.com/bdtinc/maskcam 。该仓库还提供了有关使用balenaOS设置MaskCam的说明,以便可以将其作为完全容器化的应用程序进行部署和管理。

更多的项目:

給盲人一双眼睛:用Jetson NANO做一个盲人导航器

是时候薅羊毛了:NVIDIA 启动 Jetson Nano 2GB 开发套件赠送计划

利用NVIDIA TRT和Deepstream创建一个实时车牌检测和识别应用程=

0 人点赞