Yolov3算法实现社交距离安全检测项目讲解和实战(Social Distance Detector)

点击上方码农的后花园”,选择星标” 公众号

精选文章,第一时间送达

在我们进行交流谈话时,人与人之间总要保持一定的距离,尤其是在疫情的情况下,人与人之间更要保持一定的安全距离,今天给大家来介绍一个检测社交距离的项目,实现社交距离检测器。

社交距离(Social Distance)

社会隔离是一种控制传染病传播的方法,保持一定的社交距离,可以让我们减少亲密接触,从而减少传染病的传播,在疫情期间,我们用人与人之间的实际距离,比如人与人之间相隔2米来衡量,作为一个阈值,超过2米远,则是安全距离,反之违反了安全距离,在计算机中如何做到这样的检测呢?如何构建这样社交距离检测器呢?

构建社交距离检测器

我们首先使用Opencv和常见的目标检测算法,如:yolov3检测我们要检测的视频流中的所有人,然后再计算所有检测到的人之间的相互“ 距离 ”,和我们现实生活中用“米”这样的单位衡量距离不一样的是,在计算机中,简单的方法是我们用检测到的两个人的质心,也就是检测到的目标框的中心之间相隔的像素值作为计算机中的“距离”来衡量视频中的人之间的距离是否超过安全距离。

构建步骤:

  • 使用目标检测算法检测视频流中的所有人,得到位置信息和质心位置

  • 计算所有检测到的人质心之间的相互距离

  • 设置安全距离,计算每个人之间的距离对,检测两个人之间的距离是否小于N个像素,小于则处于安全距离,反之则不处于。

项目架构:

pyimagesearch目录:

social_distancing_config.py:配置文件,定义初始化最小概率来过滤弱检测和非极大抑制阈值,定义最小安全社交社会距离,单位:像素。

detection.py:  使用目标检测算法yolov3对视频流中的目标进行检测,得到目标的位置(左上右下)以及质心位置。

yolo-coco目录:

coco.names: 定义目标检测算法要检测的类别,这里使用目标检测算法yolov3-coco训练的初始化权重,所以分类数为80

yolov3.cfg:  yolov3网络结构的定义文件,利用yolov3模型检测,得到目标位置信息。

yolov3.weights :yolov3模型的初始化权重

social_distance_detector.py: 对视频文件或者网络摄像头视频流,借助detection.py得到的检测结果,计算成对人之间的距离并进行阈值判断是否处于安全社交距离之内,最终将结果进行展示绘制 ,输入视频street.mp4,输出outputstreet.mp4。

整体实现流程图

代码讲解

detect_people.py

使用yolov3目标检测器来检测视频流中的行人,得到视频中每一个人的位置信息,并进行处理,最终返回的results列表,包含5个信息:目标人的置信度、目标人位置、目标的质心位置。

social_distance_detector.py

 根据检测算法的结果进行处理,绘制展现最终输出结果。

环境搭建

  • Windows 10

  • Anaconda + Pycharm 

  • Python ==3.6

  • Opencv-Python==4.1.2.30

  • imutils + scipy +numpy

结果展示 

在控制台输入命令:

python social_distance_detector.py --input street.mp4 --output outputstreet.avi

视频中的数字即代表违反社交安全距离的人数。

总结

为了获得最准确的结果,你应该通过内部/外部参数校准摄像机,以便可以将像素映射到可测量的单位;一种更简单的替代方法(但准确度低)是应用三角相似度校准(链接)。这些方法都可以将像素映射到可测量的单位。

如果你不想用相机校准来实现社交距离检测器,那你必须严格依赖像素距离,但像素距离不一定那么准确。在这里我们社交距离检测器使用像素距离。

代码获取,微信公众号:码农的后花园,后台回复关键字:项目实战 ,即可获取。 

 

 

  • 7
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
YOLOv3和SSD都是目标检测算法,用于在图像或视频中检测和定位物体。以下是它们的原理: YOLOv3(You Only Look Once version 3)算法YOLOv3 算法采用了单个神经网络模型,将图像作为整体输入,直接在图像中预测所有边和类别。具体来说,YOLOv3 首先将输入图像分成 S * S 个网格单元,每个单元负责检测图像中的物体。对于每个网格单元,YOLOv3 预测 B 个边和其对应的置信度和类别概率,其中 B 表示每个单元负责检测的边数量。YOLOv3 还使用卷积层来提供特征图,以更好地捕捉物体的特征。最后,YOLOv3 通过非极大值抑制(NMS)筛选出最有可能的边,去除冗余的边,并输出每个物体的边界和类别。 SSD(Single Shot MultiBox Detector)算法: SSD 算法同样采用单个神经网络模型,但与 YOLOv3 不同的是,SSD 在不同层次的特征图上预测边和类别。具体来说,SSD 使用特征提取网络(如 VGG、ResNet 等)来提取多个不同尺度的特征图,然后在这些特征图上预测边和类别。对于每个特征图单元,SSD 预测 K 个边和其对应的置信度和类别概率,其中 K 表示每个单元负责检测的边数量。SSD 通过对不同特征图上的边进行匹配来合并不同尺度的预测结果,并使用 NMS 筛选出最有可能的边,去除冗余的边,并输出每个物体的边界和类别。 总的来说,YOLOv3 和 SSD 都是高效的目标检测算法,能够在较低的计算成本下实现准确的物体检测和定位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值