重磅干货,第一时间送达 01.准备工作 1. Python 3.xx(Python 3.7.4) 2. OpenCV(4.1.2版) 一个检测帧示例 要解决的第二个问题是找到一种方法来检测要删除的对象。OpenCV提供了一种简单的方法:基于支持向量机的“定向梯度直方图”检测器。它是必不可少的检测器,不是最快,不是最准确,不是最好的,但它可以正常工作。 1. 实例化 HOGDescriptor 2. 获取视频的第一帧用作遮罩 3. 遍历每一帧,对于每个检测到的人,从第一帧开始用相应的“空”替换该区域 4. 保存输出 按照前面描述的工作流程,代码保存在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 model cfg.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 交流群 |
|