컴퓨터공학/CNN & Mask RCNN

[Mask R-CNN] Python을 이용한 Mask RCNN (2) - Cam & Video

Upupa epops 2019. 1. 9. 03:38

앞에서 고정이미지에 대한 Mask R-CNN을 해보았는데, 

이번에는 Cam으로 받아들인 영상과 동영상에 대하여 Mask R-CNN을 실행해보았다.


유투브에서는 파이참을 쓰는걸로 보이나, 아직 파이참을 잘 다루지 못하여

Jupyter notebook을 이용하여 실행가능하도록 소스코드를 수정하였다.


본 포스팅은 저번 포스팅에서 작성한 아나콘다 환경을 이어서 사용하므로 기본적인 설치 방법은 아래 링크에서 확인할 수 있다.


2019/01/05 - [Laboratory/인공지능] - Python/Tensorflow/Keras를 이용한 Mask RCNN (1)


* 파이썬 초보라 이것저것 시도하다가 되는걸 올렸기때문에 더 좋은 방법을 알고계신다면 피드백 환영합니다 :)!

◇◇◇




1. Mask R-CNN for Cam

 - Cam을 이용하여 구동시켜보는 Mask R-CNN

 - youtube : https://www.youtube.com/watch?v=lLM8oAsi32g


1-1. Mask_RCNN series download

 - Cam을 이용한 예제는 git clone을 이용하여 Mask-RCNN-series.git을 다운받아야 한다.


 git clone https://github.com/markjay4k/Mask-RCNN-series.git



1-2. Create New file

 - 이전에 만들어둔 MaskRCNN 가상환경에 진입하여 jupyter notebook을 실행시킨다.

 - 이전에 만든 가상환경 폴더로 진입

   · Activate MaskRCNN

   · cd MaskRCNN폴더경로

 - Jupyter notebook 실행

   · Jupyter notebook

 - Demo.ipynb 파일이 저장되어있는 samples 폴더로 진입하여 New를 누르고 Python 3을 클릭

1-3. 소스코드 수정

- 수정을 위해 기존에 받은 visualize_cv.py 파일을 열어 소스코드를 확인한다.

- 경로가 다르면 적색 박스 내 코드에서 오류가 발생하므로 해당 부분을 수정해야 한다.


- 확인 후, jupyter notebook에서 만든 새 파일에 Visualize_cv.py 소스코드를 옮겨 적는다.

- 오류를 확인하기위해 demo파일과 맞춰보며 부분마다 나눠서 붙여넣었다.

 * 기존 demo파일과 비교하며 경로 설정, 모듈 임포트 부분을 수정하면 편리하다.

 * 코드 정리를 위해 Import 모듈 부분을 첫 라인으로 아래 그림과 같이 옮겼다.

ROOT_DIR의 경로를 수정하여 mrcnn과 coco를 import할 수 있게 아래 라인을 추가한다.

- 이 과정이 없으면 다음 줄 CocoConfig에서 오류가 발생한다.


 ROOT_DIR = os.path.abspath("../")  #최상위 경로로 경로 지정

 sys.path.append(ROOT_DIR)


 from mrcnn import utils       #utils.py가 있는 폴더 mrcnn 지정

 import mrcnn.model as modellib  #model.py가 있는 폴더 mrcnn을 import


 #coco.py가 저장된 경로 지정

 sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))

 import coco


 #ROOT_DIR = os.getcwd()  #주석처리


<기존 소스코드(좌) → 수정한 소스코드(우)>


- 그 뒤의 소스는 demo 파일과도 변동사항이 없으므로 그대로 붙여넣는다.



- cv2.VideoCapture 함수를 이용하여 캠으로 받아들인 후 masking된 영상을 출력한다.



- 마지막 라인까지 실행이 끝나면 아래와 같은 별도의 창이 뜨면서 결과를 확인할 수 있다.

프라이버시 문제로 모자이크처리를 했으나 원래는 제대로 나옵니다.


◇◇◇




2. Mask R-CNN for Video

 - 비디오 영상에서 인식하는 Mask R-CNN

 - youtube : https://www.youtube.com/watch?v=GvOBXrQjQxw&t=73s


2-1. Mask_RCNN series download(1-1과정과 동일)

 - git clone을 이용하여 Mask-RCNN-series.git을 다운받는다.

 - 본 절에서는 process_video.py 소스코드와 visualize_cv2.py를 import하므로 

   demo 파일이 있는 samples 폴더 안에 visualize_cv2.py를 넣고, 

   process_video.py는 에디트 프로그램으로 열어둔다.


 git clone https://github.com/markjay4k/Mask-RCNN-series.git



2-2. Create New File(1-2 과정과 동일)

- Demo.ipynb 파일이 저장되어있는 samples 폴더로 진입하여 New를 누르고 Python 3을 클릭


2-3. 소스코드 수정

- process_video 코드를 수정하기 전에 import해야하는 visualize_cv.py 파일을 수정해야한다.

- Mask_RCNN/samples/폴더에 저장한 visualize_cv.py 파일을 열어 아래와 같이 수정한다.

  * 1-3과 수정 형태 동일


 ROOT_DIR = os.path.abspath("../")  #최상위 경로로 경로 지정

 sys.path.append(ROOT_DIR)


 from mrcnn import utils       #utils.py가 있는 폴더 mrcnn 지정

 import mrcnn.model as modellib  #model.py가 있는 폴더 mrcnn을 import


 #coco.py가 저장된 경로 지정

 sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))

 import coco


 #ROOT_DIR = os.getcwd()  #주석처리



- process_video.py 코드를 새 파일에 옮겨적는다.

- 'videofile.mp4'라는 동영상을 불러와서 labeling&masking 후 'videofile_masked.avi'로 변환해준다.


- 결과는 아래와 같이 영상으로도, 저장된 동영상 파일로도 확인이 가능하다.


 * youtube에 있는 레이싱 영상을 녹화하여 구동해본 결과 영상니다.

   (출처 : https://www.youtube.com/watch?v=eSAVhH0T3Ls&t=58s)




※ 수정한 파일 첨부

edit_visualize_cv2.py

maskRCNN_two_move_demo.ipynb

maskRCNN_three_movie.ipynb



SMALL