首頁>技術>

01.準備工作

1. Python 3.xx(Python 3.7.4)

2. OpenCV(4.1.2版)

一個檢測幀示例

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

22
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • JVM系列之記憶體與垃圾回收篇