前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用AI来检测违反社交距离的行为

使用AI来检测违反社交距离的行为

作者头像
代码医生工作室
发布2020-05-08 16:12:54
9720
发布2020-05-08 16:12:54
举报
文章被收录于专栏:相约机器人

作者 | Priya Dwivedi

来源 | Medium

编辑 | 代码医生团队

介绍

现在,美国和欧洲的许多城市都在谨慎地重新开放。人们被指示要冒险冒险遵守社会疏远规则。但是人们会跟随他们吗?对于城市来说,评估这一点并采取相应的行动可能很重要。如果大多数人跟随他们,那么可以安全地打开更多的地方。但是如果有很多违规行为,则关闭它可能会更安全。这正是迈阿密海滩公园发生的事情。该公园于4月底开放,但在一周之内关闭,因为太多的人无视与戴着口罩和社交疏远相关的规定。该市通过人员监视公园并发出警告来检测到此情况。但是人工监视可能不是实际的解决方案。

如何使用AI和机器学习来检测人们是否遵循社会疏离规则?大多数城市已经在公共场所安装了可用于此目的的摄像头。在此博客中,展示了如何使用人员跟踪算法来监视违规情况。还在Github上开源了代码。请参阅下面的实际模型。

https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation

社会隔离违规检测和计数

在Deep Learning Analytics中,非常热衷于使用数据科学和机器学习来解决问题。

人物追踪

数据

需要的第一件事是视频数据,用于建立和测试模型。使用了公开可用的MOT数据集。MOT数据集是计算机视觉人员跟踪的规范数据集。对此数据进行了许多最先进的算法训练和测试。该数据集包含许多开放源代码的剪辑,这些剪辑显示了人们在不同摄像机角度下的移动。选择了一个带固定摄像机的子夹,该子夹安装在高处,可以显示德国的市中心。可以从此处下载此剪辑。请参见下面的剪辑片段之一。

https://motchallenge.net/

http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html#datasets

Town Center Clip的样品架

使用深度排序进行人员跟踪

在计算机视觉中,人员跟踪是为人员提供ID,在出现的每个帧中检测他们并转发其ID的任务。此人离开框架后,将不会重复使用其ID。如果有新人进入,他们将使用新的ID进行初始化。

跟踪往往是一项艰巨的任务,因为人们看起来可能很相似,导致模型切换ID。人们可能会被遮挡在另一个人或物体后面,并在重新出现时被分配一个新的ID。在过去的几年中,深度学习技术已大大提高了多对象跟踪基准的性能。多对象跟踪的最新技术精度为62.0

为什么需要跟踪人以实现社会疏离检测的目的?这样做的原因是,希望找到违反社会隔离规则的唯一人数。在没有追踪器的情况下,如果两个人在一起走近,那么他们将在每一帧中被视为违规,但是如果使用追踪器,则可以将其视为一次违规事件。

使用了深度排序模型进行跟踪。该模型的代码已由作者在github上公开提供。深度排序模型使用人员的位置及其外观进行跟踪。使用卡尔曼滤波器捕获位置信息,该卡尔曼滤波器可预测盒子的下一个可能位置,而外观信息是使用生成嵌入的深度学习模型生成的。

https://github.com/nwojke/deep_sort

要在此视频上运行代码,需要将原始图像和具有所有边界框位置的检测文件传递给跟踪器。然后,跟踪器使用此信息为每个帧中的每个人分配一个ID。深入博客上的自述文件对此进行了详细说明。请参阅下面的内容在此剪辑上进行跟踪的结果。每个人都被分配了一个ID,该ID已成功地结转到下一帧。跟踪器还会输出包含轨道详细信息的csv。已经在Github上共享了这个文件,将在下一部分代码中使用它。

https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation

使用深度排序模型进行人员跟踪

检测违反社会距离的行为

为了检测到社会疏远违规行为,采用框架中的每个轨道并测量其与框架中其他每个轨道的距离。每个轨道基本上都是带有ID的边界框。因此可以使用边界框与它们之间的欧式距离将边界框与另一个边界进行比较。如下所示。

代码语言:javascript
复制
def distance_boxes (boxA, boxB):
    import math
    center_boxA = [(boxA[0] + boxA[2])/ 2.0, (boxA[1] + boxA[3])/2.0]
    center_boxB = [(boxB[0] + boxB[2])/ 2.0, (boxB[1] + boxB[3])/2.0]
    pixel_distance  = math.sqrt( ((center_boxA[0]-center_boxB[0])**2)+((center_boxA[1]-center_boxB[1])**2) )
    return pixel_distance

现在开始建模。该代码在下面共享。这与Github中的代码相同。

https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social%20Distancing%20Violation.ipynb

对社会距离进行建模

每帧运行的主要步骤是:

  1. 比较每个轨道与其他轨道之间的像素距离
  2. 如果距离<接近阈值,则两个人彼此太靠近。因此将两个边界框的数据框都设为安全= 1。变量“ safe”稍后用于可视化
  3. 还想计算每个ID的违规总数。这被视为与它们过于接近的其他ID。因此只要距离<接近度,都会在字典中维护一个音轨列表,这些轨道太靠近了

该代码运行速度很慢,因为它需要将每个轨道与其他轨道进行比较,并在600帧内完成。由于将分别测量磁道1与磁道2之间的距离,然后磁道2与磁道1之间的距离,因此重复了许多此类计算。为了节省时间,将一次计算的结果都存储了下来。因此,当比较磁道1和磁道2时,结果将写入数据帧的相应行中。这样可以将运行时间减少一半。

发现70像素的像素距离对于检测“似乎是”步行距离太近的人来说是相当合理的。代码的可视化模块在框过近时以红色突出显示框,并显示每个框的违规计数。带有结果的示例框架如下所示。

模型输出

实际部署

如果要在生产环境中部署它,则需要考虑一些事项。

  1. 需要注册摄像机,以便我们可以正确地将像素距离映射到现实世界中的距离
  2. 如果摄像机连续排列,则我们可能需要添加人员重新识别功能,以帮助跟踪器在摄像机之间结转ID和违规计数。在过去几年中,人们重新识别是一个研究很多的领域 https://arxiv.org/abs/2001.04193
  3. 此处的代码重量很轻,可以在与相机绑定的嵌入式设备(如Jetson TX2)上运行。

结论

在大量应用程序中,跟踪是计算机视觉中的重要问题。一种这样的应用是检测社会疏远违规行为。这可以帮助城市评估公共健康风险并安全地重新开放。

希望尝试一下该代码,并尝试一下更改邻近条件时发生的情况。

https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social%20Distancing%20Violation.ipynb

在深度学习分析中,非常热衷于使用机器学习解决现实世界中的问题。

参考文献

  • 交通运输挑战

https://motchallenge.net/

  • 深度排序算法

https://arxiv.org/abs/1703.07402

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档