3.1 OpenCV를 이용한 실시간 얼굴 모자이크 처리
저번에는 실시간 얼굴 탐지를 했었다. 이번에는 실시간으로 얼굴 탐지를 하고 탐지된 모든 얼굴 영역을
각각 탐지된 얼굴 이미지를 축소-확대한 이미지로 대체하는 방식으로 모자이크 처리를 해볼 것이다.
전에 했던 내용은 설명하지 않을 것이니 이해가 안 되는 사람은 이전 글을 참고하도록 하자!
2. OpenCV를 이용한 실시간 얼굴 탐지: https://jinho-study.tistory.com/230
2. OpenCV를 이용한 실시간 얼굴 탐지
저번에는 단순히 이미지로 얼굴을 탐지했었다. 이번에는 노트북 웹캠을 통해 실시간으로 얼굴 탐지를 해볼 것이다. 전에 했던 내용은 설명하지 않을 것이니 이해가 안 되는 사람은 이전 글을 참
jinho-study.tistory.com
아래는 전체 코드를 정리한 코드이다.
import numpy as np
import cv2
xml = 'haarcascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(xml)
cap = cv2.VideoCapture(0) # 노트북 웹캠을 카메라로 사용
cap.set(3,640) # 너비
cap.set(4,480) # 높이
while(True):
ret, frame = cap.read()
frame = cv2.flip(frame, 1) # 좌우 대칭
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.05,5)
print("Number of faces detected: " + str(len(faces)))
if len(faces):
for (x,y,w,h) in faces:
face_img = frame[y:y+h, x:x+w] # 탐지된 얼굴 이미지 crop
face_img = cv2.resize(face_img, dsize=(0, 0), fx=0.04, fy=0.04) # 축소
face_img = cv2.resize(face_img, (w, h), interpolation=cv2.INTER_AREA) # 확대
frame[y:y+h, x:x+w] = face_img # 탐지된 얼굴 영역 모자이크 처리
cv2.imshow('result', frame)
k = cv2.waitKey(30) & 0xff
if k == 27: # Esc 키를 누르면 종료
break
cap.release()
cv2.destroyAllWindows()
얼굴 영역에 박스를 치는 코드가 빠졌고, 모자이크 처리를 해주는 코드 4줄이 추가되었다.
face_img = frame[y:y+h, x:x+w] -> 탐지된 얼굴 영역의 이미지를 face_img에 저장
face_img = cv2.resize(face_img, dsize=(0, 0), fx=0.04, fy=0.04) -> face_img의 높이와 너비를 0.04배 해줌
face_img = cv2.resize(face_img, (w, h), interpolation=cv2.INTER_AREA) -> face_img를 원래 비율로 되돌려준다. 이 과정에서 이미지가 깨짐
frame[y:y+h, x:x+w] = face_img -> 탐지된 얼굴 영역을 face_img로 바꿔줌
위의 코드를 실행하면 아래와 같이 실시간으로 탐지된 얼굴이 잘 모자이크 되고 있는 것을 확인할 수 있다.
kimjinho1/Real-time-specific-object-mosaic-using-deep-learning
딥러닝을 이용한 실시간 특정 객체 모자이크 처리 . Contribute to kimjinho1/Real-time-specific-object-mosaic-using-deep-learning development by creating an account on GitHub.
github.com