본문 바로가기
Python/OpenCV

[OpenCV] cvlib 이미지 인물 얼굴 모자이크

by hotelshoe 2022. 2. 7.
반응형

OpenCV를 활용하여 이미지 속 인물들의 얼굴을 모자이크 합니다.

먼저, 사용될 라이브러리로는 OpenCV와 더불어 cvlib을 사용할 것입니다.

cvlib은 객체인식에 용이한 라이브러리로 tensorflow와 OpenCV가 함께 설치되어 있어야만 설치가 가능하므로 설치 전 라이브러리 설치 유무를 잘 확인해야 합니다.

 

pip install opencv-python tensorflow
pip install cvlib

1. 얼굴인식

얼굴 모자이크 처리에 앞서 먼저 cvlib 라이브러리의 detect_face를 통해 이미지 속 인물의 얼굴을 인식하는 것을 테스트합니다. 하단 소스 코드를 통해 테스트를 진행해 보겠습니다. 

import cv2
import cvlib as cv

img_path = '/img.jpg' #-- 이미지 경로 입력
img = cv2.imread(img_path)

face, confidence = cv.detect_face(img)

#-- 인식된 얼굴의 경계 상자 그리기
for f in face:
    (startX, startY) = f[0], f[1]
    (endX, endY) = f[2], f[3]

    cv2.rectangle(img, (startX, startY), (endX, endY), (0, 0, 255), 3)

cv2.imshow("FaceDetect", img)

cv2.waitKey()
cv2.destroyAllWindows()

 

 

출력 예시
출력 예시
출력 예시

해당 코드에 인물이 있는 이미지를 입력하여 출력한 결과, 1~2 명의 경우 어느 정도의 인식 효과를 볼 수 있지만 다수 혹은 겹쳐진 인물의 경우 식별하기 어려움을 보입니다.

 

이제 cvlib의 detect_face를 활용해 얼굴을 인식하고 모자이크 처리를 실시하겠습니다.

 


2. 얼굴 모자이크

import cvlib as cv
import cv2

img_path = '/.jpg' #-- 이미지 파일 경로 입력
img = cv2.imread(img_path)

 
face, confidence = cv.detect_face(img)

for idx, f in enumerate(face):
    (startX, startY) = f[0], f[1]
    (endX, endY) = f[2], f[3]
 
    #-- 모자이크 효과 주기
    face_region = img[startY:endY, startX:endX]
    B = face_region.shape[0]
    S = face_region.shape[1]

    face_region = cv2.resize(face_region, None, fx=0.05, fy=0.05, interpolation=cv2.INTER_AREA)
    face_region = cv2.resize(face_region, (S, B), interpolation=cv2.INTER_AREA)
    img[startY:endY, startX:endX] = face_region
 
cv2.imshow("FaceMosaic", img)

cv2.waitKey()
cv2.destroyAllWindows()

 

출력 예시
출력 예시
출력 예시

출력 결과 detect_face에 의존적이라 해당 라이브러리가 인식하지 못하는 얼굴의 경우 모자이크 처리가 어렵다는 단점이 있습니다. 라이브러리를 이용해서 바로 얼굴에 모자이크를 처리할 수 있다는 점에 의미를 두고 싶습니다. 다음 포스팅을 통해 동영상, 캠에서의 인물들의 얼굴을 모자이크 처리 테스트를 실시하겠습니다.

반응형

댓글