본문 바로가기

프로젝트

opencv - 프로젝트 1 - 1. 얼굴 모자이크

딥러닝 프로젝트를 하다 보면 사람 이미지를 보여주는 경우가 있습니다. 하지만 사람 얼굴을 그대로 보여주면 초상화같은 다양한 문제가 있을 수 있으니 얼굴을 자동으로 모자이크를 하는 프로그램을 먼저 만드려고 합니다.

 

얼굴을 인식하는 데에 다양한 방법( haarcascade, DNN 얼굴 검출)이 있습니다. 저는 mediapipe를 이용하기로 했습니다. python(https://codestudycafe.tistory.com/26)과 vscode(https://codestudycafe.tistory.com/16)를 설치하고 pip install mediapipe를 실행합니다. 

 

mp.solutions.face_detection.FaceDetection으로 얼굴 인식 모델을 가져옵니다. mpDraw는 얼굴 인식한 것을 그려주는 기능인데 필요는 없지만 가져옵니다.

 

cv2로 이미지를 가져오면 BGR로 가져오게 됩니다. 모델은 RGB로 인식을 하는 것 같으니 형식을 바꿔줍니다. faceDetection.process로 얼굴 인식을 해줍니다.

 

이미 이걸로 얼굴 인식은 완료되었습니다. 이제 이미지 영역이 잘 잡혔는지 확인해 줍니다. relative_bounding_box로 인식한 영역을 찾고 해당 영역을 전부 검을색으로 칠해줍니다. 너비에 대한 비율, 높이에 대한 비율로 리턴이 되니 너비와 높이를 곱해서 좌표로 바꿔줍니다. 잘 인식했는지 확인하기 위해 mpDraw로 잘 그려지는지 확인해 줍니다.

 

그리고 imshow로 이미지를 출력해 줍니다.

 

 

잘 인식하는 것 같습니다. 하지만 이왕 하는거 모자이크까지 해봅시다. 그림을 10배 축소한 다음 다시 10배 확대를 합니다. 확대할 때 interpolation=cv2.INTER_NEAREST를 사용해서 빈 공간을 보충해 줍니다. 가장 가까운 픽셀의 값을 이용해 픽셀 값을 채워주는 방식입니다.

 

 

실제로 출력을 하면 모자이크가 잘 처리된 것을 볼 수 있습니다.