社交距离检测

666 阅读2分钟

软硬件环境

  • windows 10 64bit
  • anaconda with python 3.7
  • opencv 4.4.0
  • tensorflow 2.1

简介

自从新型冠状肺炎爆发以来,社交距离检测,不管是在学界还是工业界都是一个热门话题。基本原理都是首先利用目标检测算法(可用的方法很多)检测出人,然后计算出人与人之间的距离,一般是像素距离,如果低于某一事先设定的值,就认为低于社交安全距离,系统随即发出警告。

本文介绍的这个开源项目,使用的模型是faster_rcnn_inception_v2_coco,使用的是tensorflow深度学习框架。项目地址是: github.com/basileroth7…

安装环境

创建python虚拟环境

conda create -n covid python=3.7
conda activate covid

接着去下载源码

git clone https://github.com/basileroth75/covid-social-distancing-detection.git
cd covid-social-distancing-detection

安装依赖库

pip install -r requirements.txt

# 原工程中漏了opencv依赖
pip install opencv-python

接下来去下载tensorflow的模型,地址是: pan.baidu.com/s/1UWu1D0jp…, 提取码:j3i8

下载后解压到models文件夹下,其实在生产环境中使用frozen_inference_graph.pb文件就可以了。文件结构如下

social_distance_detect

测试效果

cd src
python social_distanciation_video_detection.py

程序运行后,在终端一直回车就好,使用默认的参数进行测试。当人物进入到蓝线范围内时,就会被系统用绿色框出来

social_distance_detect

当人物距离小于110像素时(这是默认值),系统会用红色框出来,表示社交距离不够

social_distance_detect

如果是其它测试视频的话,可能就需要进行校准了,方法如下

cd src
python calibrate_with_mouse.py

程序启动后,会要求用户输入测试视频的文件名、视频帧大小。默认值是PETS2009.avi和800像素,接着来到打开后的opencv窗口,使用鼠标左键分别点击4个点,顺序是右上、右下、左下和左上,这4个点连成一个四边形。

social_distance_detect

代码执行完成后,会将相应数据写入到配置文件conf/config_birdview.yml

image_parameters:
  height_og: 800
  img_path: ../img/static_frame_from_video.jpg
  
  # 左下 
  p1:
  - 481
  - 411

  # 左上
  p2:
  - 482
  - 247
  
  # 右下
  p3:
  - 715
  - 411

  # 右上
  p4:
  - 693
  - 187
  size_frame: '800'
  width_og: 600

参考资料