这个项目来自:
翻译自: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>
。
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
文件:
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>
用自己的值的字段。以下是一些示例值,但是出于安全原因,您最好更具创造力:
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
设置为服务器的IPMQTT_DEVICE_NAME
是您设备的名称(例如“ Camera1”)MASKCAM_DEVICE_ADDRESS
是您的Jetson Nano的IP地址
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创建一个实时车牌检测和识别应用程=