MapleStory Finger Point

Development/YOLO

YOLO v7 인식된 물체를 모자이크 하기

吳鍾振 2022. 12. 7. 21:34

현재 YOLO중 최신인 v7을 사용하여 물체 인식을 진행해보았다.

기본적으로 물체를 인식하게 되면 랜덤한 색상의 사각형 박스로 표기한다.

만약 사람을 인식한다면 얼굴뿐이 아닌 사람 몸 전체를 인식하여, 사각형 박스 내부에 사람이 들어가 있는 형태이다.

생각보다 인식이 엄청 정확해서 내가 가지고 있는 사진들로도 인식시켜보았다.

그런데 찍은 사진 중에 지나가던 사람도 찍혀 같이 인식되었다.

요즘은 개인정보가 중요시 되므로 만약 사람이라면 모자이크 처리하도록 해보면 어떨까 생각을 하여 진행해보았다.

 

먼저 YOLO v7을 개발한 WongKinYiu의 Github에 코드가 올라와 있어서 그대로 가져다 쓰면 된다. (YOLO v7은 PyTorch로 개발한다.)

그 다음 순서는 utils 폴더에 있는 plots.py에서 plot_one_box 함수를 수정해주면 된다.

 

# plots.py
def plot_one_box(x, img, color=None, label=None, line_thickness=3):
  	if label.find('person') == 0:
      	...
        x, y, w, h = int(x[0]), int(x[1]), int(x[2]) - int(x[0]), int(x[3]) - int(x[1])
        
        roi = img[y:y + h, x:x + w]
        roi = cv2.resize(roi, (w // 15, h // 15))
        mosaic = cv2.resize(roi, (w, h), interpolation=cv2.INTER_AREA)
        img[y:y + h, x:x + w] = mosaic

함수 중간의 if 구문을 사람 인식만 출력하도록 수정해준다. 원래는 인식된 모든 객체를 출력하는 구문이다.

x와 y는 사각형 박스의 시작 점. 즉 (x축 좌표, y축 좌표) 이다.
w와 h는 사각형 박스의 너비와 높이이다. 

아래 구문은 opencv 모자이크 알고리즘으로 여기서 참고하였다.

테스트를 진행해보면 사람만 모자이크 처리되어 출력되는 모습을 아주 잘 볼 수 있다../

 

반응형