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) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
随机推荐
- BiMPM:Bilateral Multi-Perspctive Matching for Natural Language Sentences
导言 本论文的工作主要是在 'matching-aggregation'的sentence matching的框架下,通过增加模型的特征(实现P与Q的双向匹配和多视角匹配),来增加NLSM(Natur ...
- XCTF-WEB-高手进阶区-upload1-笔记
这道题摸索着弄出了两种解法 思路大体都是跳过前端的后缀名过滤从而达到上传一句话木马的目的,之后使用菜刀&蚁剑来进行链接获取Flag <script type="text/jav ...
- 11 Linux(CentOS)用户与权限
用户管理 root 在root用户下可以进行以下操作 useradd 用户名 新增用户 userdel 用户名 删除用户,同时应该删除家目录下的用户文件,与邮箱目录下的用户文件 ...
- java 模拟斗地主发牌洗牌
一 模拟斗地主洗牌发牌 1.案例需求 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张 ...
- vue.js中 v-for,v-on,v-model,结合应用案例---记事本
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- php的四种值输出方式
//echo 深入理解echo ,echo是一个函数 //echo 功能:向浏览器输出一个或多个字符串; //echo 返回值:void 无返回值; echo "今天是个好天气"; ...
- angular中a标签带请求头下载excel
<!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...
- vue cli 中关于vue.config.js中chainWebpack的配置
Vue CLI 的官方文档上写:调整webpack配置最简单的方式就是在vue.config.js中的configureWebpack选项提供一个对象. Vue CLI 内部的 webpack 配置 ...
- 学习Python(新手教程链接)
1.这个是地址: https://www.ggdoc.com/cHl0aG9uIG1zaeaYr_S7gOS5iA2/NTY4Nzc1MWQxMDJkZTJiZDk3MDU4OGE20/
- HM16.0之帧间预测——xCheckRDCostInter()函数
参考:https://blog.csdn.net/nb_vol_1/article/category/6179825/1? 1.源代码: #if AMP_MRG Void TEncCu::xCheck ...