1. 程式人生 > >Mask RCNN 實戰(二)--像黑鏡一樣遮蔽圖片和視訊中的人和物體

Mask RCNN 實戰(二)--像黑鏡一樣遮蔽圖片和視訊中的人和物體

Mask RCNN:專案地址

《黑鏡:聖誕特別篇》裡,出現了“遮蔽”技術。不喜歡一個人,可以遮蔽他。這樣,你們就再也看不見對方,也無法打電話、寫信。甚至你看到電視機上的她和照片上的她,都只有一團模糊的影子。你的整個世界都會和她絕緣,直至她死掉。


1、專案簡介:

你可以採用基於COCO訓練集的預訓練權重,不需要GPU,不僅可以自動識別影象中的人,還可以識別包括汽車,揹包等80多種常見的類別,不同於黑鏡中的黑科技但是又很接近。(PS:使用前需要下載maskrcnn預訓練權重)

在終端輸入命令:

wget https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5
將權重和model.py在同一目錄下。

2、安裝相應的庫和環境


Python 3.4+

TensorFlow 1.3+

Keras 2.0.8+

Numpy, skimage, scipy, Pillow, cython, h5py

matplotlib, imageio

安裝指令的話,直接在解壓後的person-blocker-master檔案中輸入:

pip3 install -r requirements.txt

等待一會便可以自動安裝,若安裝出問題,可以嘗試一下采用 sudo命令

3、用法

在專案檔案終端輸入:

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'])

上面那條命令的效果:


例如:
1、python3 person_blocker.py -i images/img1.jpg

遮蔽圖片中的人


2、python3 person_blocker.py -i images/img2.jpg -c '#c0392b' -o 'giraffe'

遮蔽圖片中的長頸鹿:


遮掩特定的目標需要兩個步驟:首先執行推斷模型並獲取所有的目標 ID,然後再根據 ID 選擇性地遮掩這些目標。

python3 person_blocker.py -i images/img4.jpg -l

python3 person_blocker.py -i images/img4.jpg -o 1

希望大家可以動手嘗試一下!