无论是从酒店房间接听电话、在办公里楼工作,还是根本不想在家庭办公室等情况,电话会议模糊功能都可以让会议与会者专注于自己,这样的功能对于在家工作并希望保护其家庭成员隐私的人特别有用。
为了实现这样的功能,微软利用计算机视觉、深度学习以及实例分割技术实现。
在之前的博文中,介绍了如何利用YOLO以及OpenCV实现目标检测的功能,今天将采用Mask R-CNN来构建视频模糊功能。
使用OpenCV进行实例分割
在本教程的第一部分中,将简要介绍实例分割;之后将使用实例分割和OpenCV来实现:
- 从视频流中检测出用户并分割;
- 模糊背景;
- 将用户添加回流本身;
什么是实例分割?
图1:对象检测和实例分割之间的区别
如上图所示,对于 对象检测(左图,Object Detection)而言,在各个对象周围绘制出一个框。 实例分割(右图,Instance Segmentation)而言,是需要尝试确定哪些像素属于对应的对象。通过上图,可以清楚地看到两者之间的差异。
执行对象检测时,是需要:
- 计算每个对象的边界框(x,y的)-坐标;
- 然后将类标签与每个边界框相关联;
从上可以看出,对象检测并没有告诉我们关于对象本身的形状,而只获得了一组边界框坐标。而另一方面,实例分割需要计算出一个逐像素掩模用于图像中的每个对象。
即使对象具有相同的类标签,例如上图中的两只狗,我们的实例分割算法仍然报告总共三个独特的对象:两只狗和一只猫。
使用实例分割,可以更加细致地理解图像中的对象——比如知道对象存在于哪个(x,y)坐标中。此外,通过使用实例分割,可以轻松地从背景中分割前景对象。
本文使用Mask R-CNN进行实例分割。
项目结构
项目树:
$ tree --dirsfirst
.
├── mask-rcnn-coco
│ ├── frozen_inference_graph.pb
│ ├── mask_rcnn_inception_v2_coco_2018_01_28.pbtxt
│ └── object_detection_classes_coco.txt
└── instance_segmentation.py
1 directory, 4 files
项目包括一个目录(由三个文件组成)和一个Python脚本:
-
mask-rcnn-coco/
:Mask R-CNN模型目录包含三个文件:-
frozen_inference_graph .pb
:Mask R-CNN模型的权重,这些权重是在COCO数据集上预先训练所得到的; -
mask_rcnn_inception_v2_coco_2018_01_28 .pbtxt
:Mask R-CNN模型的配置文件,如果你想在自己的数据集上构建及训练自己的模型,可以参阅网上的一些资源更改该配置文件。 -
object_detection_classes_coco.txt
:此文本文件中列出了数据集中包含的90个类,每行表示一个类别。
-
-
instance_segmentation .py
:背景模糊脚本,本文的核心内容, 将详细介绍该代码并评估其算法性能。
使用OpenCV实现实例分割
下面开始使用OpenCV实现实例分割。首先打开instance_segmenta