对社交距离参考实现的多摄像头检测
发布日期: 05/04/2022
最后更新日期: 06/13/2022
概述
创建端到端视频分析管道,以检测人员并根据多个输入视频源计算人员之间的社交距离。多摄像头检测社交距离演示了如何在应用程序中使用视频分析微服务并将数据存储到 InfluxDB*。这些数据可以通过 Grafana* 仪表板进行可视化。
选择配置和下载,即可下载参考实施和下面列出的软件。
- 完成时间:45 分钟
- 编程语言:Python* 3.6
- 可用软件:视频分析微服务、视频分析服务、英特尔® 发行版 OpenVINO™ 工具套件 2021 版本
目标系统要求
- 以下处理器之一:
- 第 6 代至第 11 代智能英特尔® 酷睿™ 处理器
- 第 1 代至第 3 代英特尔® 至强® 可扩展处理器
- 具备英特尔® SIMD 流指令扩展 4.2(英特尔® SSE4.2)的英特尔凌动® 处理器
- 至少 8 GB 内存。
- 至少 64 GB 硬盘。
- 互联网连接。
- Ubuntu* 18.04.3 LTS 内核 5.0†
- Ubuntu* 20.04 LTS 内核 5.4†
有关支持的 GPU 和 VPU 处理器的要求,请参阅 OpenVINO™ 工具套件系统要求。
† 使用面向第 11 代智能英特尔® 酷睿™ 处理器的内核 5.8。
工作原理
这是一个参考实现,展示了如何在应用程序中使用视频分析微服务来创建社交媒体距离检测用例。参考实现由管道和模型配置文件组成,这些文件通过卷挂载与视频分析微服务 Docker 映像一起使用,并且可以与用于启动容器的 docker-compose.yml 文件一起使用。管道执行的结果已路由到 MQTT 代理,并可从这里查看。推理结果也被 Docker 映像 mcss-eva 中的视觉算法用于人口密度检测、社交距离计算等。
容器引擎与编排
该软件包使用 Docker* 和 Docker Compose进行自动化容器管理。
- Docker 是在企业环境中广泛使用的容器框架。它允许将应用程序及其依赖项打包在一起,并作为一个独立的单元运行。
- Docker Compose 是定义和运行多容器 Docker 应用程序的工具。
端到端视频分析
多摄像头监控解决方案提供了一个端到端视频分析应用程序,用于从多个输入视频信号源检测人员并计算人与人之间的社交距离。它使用视频分析微服务来获取输入视频并执行深度学习推理。根据发布在 MQTT 主题上的推理输出数据,它计算社交距离违规并将推理结果提供给 Web 服务器。
以下步骤由应用程序执行:
- 用于推理的视频文件应存于资源文件夹中。
- 当视频分析微服务启动时,模型、管道和资源文件夹会挂载在微服务中。REST API 可用于与微服务交互。
- MCSS 微服务创建一个 POST 请求,并将其发送到视频分析微服务以启动视频分析管道。
- 收到 POST 请求后,边缘视频分析管道启动请求的管道实例并将推理结果发布到 MQTT 代理。该管道使用 Open Model Zoo 中的 person-detection-retail-0013 模型来检测视频流中的人员。
- MCSS 微服务订阅 MQTT 消息,接收推理输出元数据,并计算所有人之间的欧几里得距离。
- 根据以上测量结果,检查是否有人违反社交距离规定,即小于 N 个像素的间隔距离。
- 将输入视频帧、推理输出结果和违反社交距离规定提供给 Web 服务器以供查看。

入门
第 1 步:安装参考实施
选择配置和下载以下载参考实施,然后按照以下步骤进行安装。
- 打开新终端,前往下载文件夹并解压缩下载的 RI 包:
unzip multi_camera_detection_of_social_distancing.zip
- 转到 multi_camera_detection_of_social_distancing 目录:
cd multi_camera_detection_of_social_distancing
- 更改 edgesoftwar 可执行文件的权限:
chmod 755 edgesoftware
- 运行以下命令,以安装参考实施:
sudo groupadd docker sudo usermod -aG docker $USER newgrp docker ./edgesoftware install
注意:如果您在拉取图像时遇到问题,请尝试以下命令:sudo ./edgesoftware install
有关详细信息,请参阅本文档末尾的故障排除。 - 在安装过程中,系统会提示您提供产品密钥。产品密钥包含在英特尔向您发送的确认您下载的电子邮件中。
图 2:产品密钥 - 安装完成后,您会看到消息 “Installation of package complete”(软件包安装完成)以及每个模块的安装状态。
图 3:安装成功
- 转到工作目录:
cd multi_camera_detection_of_social_distancing/MultiCamera_Detection_of_Social_Distancing_<version>/MCSD_Resources
注意: 在上面的命令中,<version> 是下载的软件包版本。
第 2 步:下载输入视频
如果想要输入信号源在应用程序中获得更好的处理效果,请将摄像头摆放在眼睛水平角度上。
下载具有 1280x720 分辨率的样本视频,通过将空格替换为 _ 字符来重命名文件(例如,Pexels_Videos_2670.mp4),并将其放置在以下目录中:
multi_camera_detection_of_social_distancing/MultiCamera_Detection_of_Social_Distancing_<version>/MCSD_Resources/resources
其中 <version> 是下载时选择的软件包版本。
(数据集应遵守此许可证的规定。数据集许可证的条款和条件适用。英特尔® 不授予对数据文件的任何权利。)
要使用多个视频或任何其他视频,请下载视频文件并将其放置在资源目录下。
第 3 步:下载 object_detection 模型
要下载的模型在 model_list 文件夹中的 models.list.yml 中定义。
执行以下命令以从 Open Model Zoo 下载所需的 object_detection 模型 (person-detection-retail-0013):
sudo chmod +x ../Edge_Video_Analytics_Resources/tools/model_downloader/model_downloader.sh
sudo ../Edge_Video_Analytics_Resources/tools/model_downloader/model_downloader.sh --model-list models_list/models.list.yml
您将会看到类似以下内容的输出:

第 4 步:查看参考实施的管道
此 RI 的管道位于 /MCSD_Resources/pipelines/ 文件夹中。此管道使用在上述步骤中下载的 person-detection-retail-0013 模型。管道模板定义如下:
"template": [
"{auto_source} ! decodebin",
" ! gvadetect model={models[object_detection][person_detection][network]} name=detection",
" ! gvametaconvert name=metaconvert ! gvametapublish name=destination",
" ! appsink name=appsink"
]
该管道将标准 GStreamer 元素用于输入源和解码媒体文件,使用 gvadetect 检测对象,使用 gvametaconvert 从检测中生成 json,使用 gvametapublish 将结果发布到 MQTT 目的地。gvadetect 元素的模型标识符已更新为新模型。下载的模型位于 models/object_detection/person_detection 目录中。
请参阅定义媒体分析管道,以了解管道模板并定义您自己的管道。
第 5 步:运行应用程序
- 转到工作目录:
cd multi_camera_detection_of_social_distancing/MultiCamera_Detection_of_Social_Distancing_<version>/MCSD_Resources
- 使用命令设置 HOST_IP 环境变量:
export HOST_IP=$(hostname -I | cut -d' ' -f1)
- 通过执行命令运行应用程序:
sudo -E docker-compose up -d
- 要检查所有容器是否启动和运行,请执行命令:
sudo docker-compose ps
您将会看到类似以下内容的输出:图 5:检查运行容器的状态
- 要检查应用程序日志,请运行命令:
sudo docker logs -f mcss-eva
您将会看到类似以下内容的输出:
图 6:运行容器的日志
第 6 步:查看输出
要查看输出流,请使用 url <System IP:5000> 打开浏览器。
在某些情况下,视频执行甚至会在您查看仪表板之前就结束了。要查看输出流,您可能需要通过执行以下命令重新运行 mcss-eva 容器:
sudo docker restart mcss-eva

注意:在启用代理的网络发生故障和执行 sudo docker-compose up 命令失败的情况下,请参阅本文档的故障排除部分。
第 7 步:在 Grafana 上可视化输出
- 通过浏览器导航至 localhost:3000。
注意:如果远程访问,请转到 http://<hostIP>:3000。使用命令获取主机系统 IP:hostname -I | cut -d' ' -f1
- 以用户 admin 和密码 admin 登录系统。
- 单击 Home 并选择 MCSS Main Dashboard 以打开主仪表板。
图 8:Grafana 主屏幕
图 9:选择 MCSS 的主仪表板
图 10:MCSS 主 Grafana 仪表板
图 11:MCSS 通道 Grafana 仪表板
结论和后续步骤
该应用程序成功地利用了英特尔® 发行版 OpenVino™ 工具套件插件,使用视频分析微服务来检测和测量人与人之间的距离,并将数据存储到 InfluxDB 中。它可以进一步扩展以支持来自网络流(RTSP 摄像头)的视频源,并可优化算法以获得更优性能。
了解更多
要继续学习,请参阅以下指南和软件资源:
故障排除
- 在完整安装期间,请确保您具有可用的互联网连接。如果互联网连接在任何时候断开,则安装可能会失败。
- 如果进行从英特尔注册表下载和提取映像的提取步骤时安装失败,则通过提供产品密钥重新运行安装命令 sudo ./edgesoftware 安装。
- 确保您使用的是全新的 Ubuntu* 安装。较旧版本的软件可能会引起问题,尤其是 Docker 和 Docker Compose。
-
在代理环境中,如果设置了单个用户代理(即在 .bashrc 文件中),那么某些组件安装可能会失败或安装挂起。确保您已在 /etc/environment 中设置了代理。
-
如果您的系统处于代理网络,请在 docker-compose.yml 文件的环境部分添加代理详细信息。
HTTP_PROXY=http://<IP:port>/ HTTPS_PROXY=http://<IP:port>// NO_PROXY=localhost,127.0.0.1
-
如果缺少代理详细信息,则无法获取运行管道和在容器内安装所需软件包必要的源视频文件。
运行命令:sudo -E docker-compose up -
此外,如果您的系统处于代理网络,请在路径/etc/system/docker.service.d 中添加 Docker 的代理详细信息,并在 proxy.conf 文件中添加详细信息:
HTTP_PROXY=http://<IP:port>/ HTTPS_PROXY=http://<IP:port>// NO_PROXY=localhost,127.0.0.1
更新代理后,执行以下命令:
sudo systemctl restart docker sudo systemctl daemon-reload
-
如果显示冲突错误,则停止/移除容器。
要移除 edge_video_analytics_microservice 和 eiv_mqtt,请按以下步骤操作:-
首先,运行以下命令之一:
sudo docker stop edge_video_analytics_microservice eiv_mqtt
或者
sudo docker rm edge_video_analytics_microservice eiv_mqtt
-
接下来,从以下指定路径运行 sudo docker-compose down:
cd multi_camera_detection_of_social_distancing/MultiCamera_Detection_of_Social_Distancing_<version>/Edge_Video_Analytics_Resources sudo docker-compose down
注意: 在上面的命令中,<version> 是下载的软件包版本。
-
支持论坛
如果您无法解决问题,请联系支持论坛。
产品和性能信息
性能因用途、配置和其他因素而异。请访问 www.Intel.cn/PerformanceIndex 了解更多信息。