基于OpenCV的人员剔除

共 2313字,需浏览 5分钟

 ·

2020-11-19 09:27

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

把不需要的人从背景中移除是一个有趣的任务。本期,我们一起探索如何使用带OpenCV从实时流中删除一个人。

           

   

01.准备工作

1. Python 3.xx(Python 3.7.4)

2. OpenCV(4.1.2版)

要从图像中删除一个对象,我们可能需要一个锚点作为起点,然后复制粘贴每个帧,类似对每个后续帧应用一个Mask。我们可以简单地从锚定框架中复制它,然后将其替换为要从中隐藏对象的当前框架来隐藏要隐藏的区域的坐标。

一个检测帧示例

要解决的第二个问题是找到一种方法来检测要删除的对象。OpenCV提供了一种简单的方法:基于支持向量机的“定向梯度直方图”检测器。它是必不可少的检测器,不是最快,不是最准确,不是最好的,但它可以正常工作。


02.工作流程


1. 实例化 HOGDescriptor

2. 获取视频的第一帧用作遮罩

3. 遍历每一帧,对于每个检测到的人,从第一帧开始用相应的替换该区域

4. 保存输出

03.代码


按照前面描述的工作流程,代码保存在github中,见文末。

让我们测试一下!

像一个老板一样。手放在口袋里消失了!

但是,引用伊隆·马斯克(Elon Musk)的话:“仍有改善的空间”。实际上结果并不是那么精确,尤其是当离相机更近的时候。

在测试了这段代码之后,整个输出看起来有问题且不稳定。因此,需要找到一种方法来改进它:用第一帧替换每个检测到的人似乎是个好方法,因此我可能需要找到一种更好的方法来检测物体!

改进之处:

在搜索COCO的模型ZOO时,我们发现了一个实例分割模型,每幅图像的推理时间为0.07秒,这是最快的实例之一(可能不是最准确的)。

我们自定义了模型,需要安装所有需要的依赖,例如pytorch,torchvision和detectron2:

# install dependencies:!pip install -U torch==1.4+cu100 torchvision==0.5+cu100 -f https://download.pytorch.org/whl/torch_stable.html!pip install cython pyyaml==5.1!pip install -U ‘git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'import torch, torchvision

以下代码和说明已在Google Colab实例上进行了测试,做出此选择是为了使此实验更易于复制,而不会因缺少依赖项,版本冲突和所有经常发生的无聊而苦恼。

然后我们需要安装Detectron2:

# install detectron2:!git clone https://github.com/facebookresearch/detectron2 detectron2_repo!pip install -e detectron2_repo

现在,我们可以继续导入所有需要的库并加载模型:

cfg = get_cfg()cfg.merge_from_file(model_zoo.get_config_file(“COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_1x.yaml”))cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this modelcfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(“COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_1x.yaml”)predictor = DefaultPredictor(cfg)

无法使用我们的predictor类进行推断,predictor需要在Tensors上返回一个需要转换为numpy数组的数组,然后可以像以前一样迭代该数组:

outputs = predictor(frame)outputs = outputs[“instances”].pred_boxes.to(‘cpu’).tensor.numpy().astype(int)

让我们检查一下最终结果。

Detectron2 VS HOGDetector

从gif可以观察到Detectron2如何更准确地检测到一个人,但是,需要说的是,当然,它需要更多的“深度”配置(依赖有时会很麻烦)。但是,最终结果不言而喻!

代码链接:https://github.com/robertosannazzaro/person-removal-detectron2

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 46
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报