黑镜特别篇《白色圣诞节》中有种名为「屏蔽」的黑科技,每个人安装上智能眼,可以凭意愿屏蔽动态视界中的任何人(及其相关的任何影像和声音),变成一团移动的白色马赛克。被屏蔽者无法解除这种屏蔽,除非死亡。相比之下,朋友圈的屏蔽是不是弱爆了?本文作者给出了一种自动「屏蔽」人像的脚本(不同于黑镜中的视频屏蔽),底层实现是在 MS COCO 数据集上预训练的 Mask R-CNN,但它不需要 GPU!此外,它不仅可屏蔽人像,还可以屏蔽包括长颈鹿和汽车在内的多达 80 种不同类型的物体,向黑镜中的黑科技迈出了第一步。
黑镜之《白色圣诞节》中的黑科技:屏蔽。
用法
Person Blocker 可使用以下命令行调用并输出结果:
python3 person_blocker.py -i images/img3.jpg -c '(128, 128, 128)' -o 'bus' 'truck'
这个命令如下有一些参数来控制模型的推断效果:
-i/--image:指定输入图像的路径与文件。
-m/—model:加载预训练 COCO 模型权重的路径,默认情况下为当前目录。如果没有指定路径,且当前目录下不存在权重文件,那么模型将自动下载预训练权重至当前目录。
-c/—color:指定掩码的颜色,它可以是引号内的 16 进制或 RGB 三元素元组的格式,默认为白色。
-o/--object:遮掩目标的可用列表或具体目标的 ID,我们可以在文件 classes.py 中看到所有可遮掩的目标,或直接使用-names flag,默认的遮掩目标为「person」。
-l/—labeled:通过检测的目标和对应的目标 ID 标注图像并保存。
-n/—names:打印目标的类别选项,并退出。
这一份脚本可输出两种图像,即静态的 png 图像和动态的 gif 图像。我们可选的遮掩目标有 80 种,如下 classes.py 文件中给出了所有的目标类别:
def get_class_names(): return np.array(['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush'])
使用案例
python3 person_blocker.py -i images/img1.jpg
python3 person_blocker.py -i images/img2.jpg -c '#c0392b' -o 'giraffe'
python3 person_blocker.py -i images/img3.jpg -c '(128, 128, 128)' -o 'bus' 'truck'
遮掩特定的目标需要两个步骤:首先执行推断模型并获取所有的目标 ID,然后再根据 ID 选择性地遮掩这些目标。
python3 person_blocker.py -i images/img4.jpg -l
python3 person_blocker.py -i images/img4.jpg -o 1
最后,如果读者想使用或测试该脚本,那么它需要的依赖库与 Mask R-CNN 基本相同:
Python 3.4+
TensorFlow 1.3+
Keras 2.0.8+
Numpy, skimage, scipy, Pillow, cython, h5py
matplotlib, imageio