Opencv+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训练的初始化权重,所以分类数为80yolov3.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
视频中的数字即代表违反社交安全距离的人数。
总结
为了获得最准确的结果,你应该通过内部/外部参数校准摄像机,以便可以将像素映射到可测量的单位;一种更简单的替代方法(但准确度低)是应用三角相似度校准(链接)。这些方法都可以将像素映射到可测量的单位。
如果你不想用相机校准来实现社交距离检测器,那你必须严格依赖像素距离,但像素距离不一定那么准确。在这里我们社交距离检测器使用像素距离。
更多有关python、深度学习和计算机编程和电脑知识的精彩内容,可以关注微信公众号:码农的后花园

Opencv+Yolov3算法实现社交距离安全检测讲解和实战(Social Distance Detector)的更多相关文章
- ModelArts 与HiLens Kit联合开发丨行人社交距离风险提示Demo
摘要:本Demo使用YOLOv3_Resnet18模型来检测的视频流中的行人,获取行人坐标(即图中蓝色方框),然后计算所有检测到的人之间的相互"距离". 前情提要 听到行人社交距离 ...
- OpenCV 学习笔记03 直线和圆检测
检测边缘和轮廓不仅重要,还经常用到,它们也是构成其他复杂操作的基础. 直线和形状检测与边缘和轮廓检测有密切的关系. 霍夫hough 变换是直线和形状检测背后的理论基础.霍夫变化是基于极坐标和向量开展的 ...
- Opencv分水岭算法——watershed自动图像分割用法
分水岭算法是一种图像区域分割法,在分割的过程中,它会把跟临近像素间的相似性作为重要的参考依据,从而将在空间位置上相近并且灰度值相近的像素点互相连接起来构成一个封闭的轮廓,封闭性是分水岭算法的一个重要特 ...
- 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式
腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式 某移动公司实时 ...
- Acwing 社交距离 分类讨论+贪心
一种新型疾病,COWVID-19,开始在全世界的奶牛之间传播. Farmer John 正在采取尽可能多的预防措施来防止他的牛群被感染. Farmer John 的牛棚是一个狭长的建筑物,有一排共 N ...
- 【OpenCV文档】用于角点检测的Fast算法
原文地址:http://docs.opencv.org/trunk/doc/py_tutorials/py_feature2d/py_fast/py_fast.html#fast-algorithm- ...
- 基于YOLOv3和Qt5的车辆行人检测(C++版本)
概述 YOLOv3: 车辆行人检测算法 GitHub Qt5: 制作简单的GUI OpenCV:主要用于putText.drawRec等 Step YOLOv3检测结果 Fig 1. input im ...
- MTCNN算法与代码理解—人脸检测和人脸对齐联合学习
目录 写在前面 算法Pipeline详解 如何训练 损失函数 训练数据准备 多任务学习与在线困难样本挖掘 预测过程 参考 博客:blog.shinelee.me | 博客园 | CSDN 写在前面 主 ...
- Python+OpenCV图像处理(十四)—— 直线检测
简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
随机推荐
- java开发在线下载功能,自动打开浏览器下载功能下载网络文件或图片
因为业务的需要,公司产品要求商品详情页面有个下载的功能 找了很多的方法,发现有的需要打开一个新窗口,而且在某些浏览器上不适用,所以继续寻找更好的方法 跟同事沟通后发现他那里有个下载的方法,不过是C#写 ...
- java 用集合完成随机点名器和库存管理案例
一 随机点名器 1.案例需求 随机点名器,即在全班同学中随机的找出一名同学,打印这名同学的个人信息. 我们来完成随机点名器,它具备以下3个内容: 存储所有同学姓名 总览全班同学姓名 随机点名其中一人, ...
- C#LeetCode刷题之#453-最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3877 访问. 给定一个长度为 n 的非空整数数组,找到让数组所有 ...
- 攻防世界-web(进阶)-NaNNaNNaNNaN-Batman
用winhex打开,发现是一个javascript代码.将文件重命名为html文件,用浏览器打开. 打开是一个输入框,输入任何东西都梅反应,尝试弹框输入也无果,继续查看代码. 查看代码,可以看到最开始 ...
- vue cli 中关于vue.config.js中chainWebpack的配置
Vue CLI 的官方文档上写:调整webpack配置最简单的方式就是在vue.config.js中的configureWebpack选项提供一个对象. Vue CLI 内部的 webpack 配置 ...
- 【NOI2004】郁闷的出纳员 - Splay
题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...
- 欧几里得算法(gcd) 裴蜀定理 拓展欧几里得算法(exgcd)
欧几里得算法 又称辗转相除法 迭代求两数 gcd 的做法 由 (a,b) = (a,ka+b) 的性质:gcd(a,b) = gcd(b,a mod b) int gcd(int a,int b){ ...
- 虚拟化技术之kvm管理工具virsh常用基础命令(二)
上一篇博客我们主要聊了下virsh 管理kvm虚拟机的命令相关用法和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13508231.html:今天我们来继 ...
- Salesforce学习笔记之代码若干
有几段试验性的代码因为公司要更新沙盒,删除了.在本地虽然还保存了副本,但怕以后刷新时误删,所以贴一份在这里,以便需要时拷贝. 1.用aura组件包装一个flow foo.cmp: <aura:c ...
- gcc手动安装
Linux下: 手动安装gcc需要5个基础包 百度网盘链接:链接:包链接 密码:izxj 按照以上顺序安装:rpm -ivh 包名 为什么要手动安装呢,因为遇到这个情况:linux服务器没有权限连 ...