반응형
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에 의존적이라 해당 라이브러리가 인식하지 못하는 얼굴의 경우 모자이크 처리가 어렵다는 단점이 있습니다. 라이브러리를 이용해서 바로 얼굴에 모자이크를 처리할 수 있다는 점에 의미를 두고 싶습니다. 다음 포스팅을 통해 동영상, 캠에서의 인물들의 얼굴을 모자이크 처리 테스트를 실시하겠습니다.
반응형
'Python > OpenCV' 카테고리의 다른 글
[OpenCV] HOG(Histogram of Oriented Gradients) 이미지 테스트 (0) | 2022.03.03 |
---|---|
[OpenCV] cvlib 영상 인물 얼굴 모자이크 (0) | 2022.02.07 |
[OpenCV] putText 파라미터 (0) | 2022.01.03 |
[OpenCV] 광 흐름 탐지 - optical flow detection (0) | 2022.01.03 |
[OpenCV] dlib 영상&캠 얼굴 랜드마크 (face landmark) (0) | 2022.01.03 |
댓글