728x90
반응형

저번에는 실시간으로 얼굴 탐지를 하고 탐지된 얼굴들을 모두 모자이크 처리했었다.

이번에는 럭키짱의 강건마 이미지를 사용해 모자이크 처리를 해볼 것이다.

전에 했던 내용은 설명하지 않을 것이니 이해가 안 되는 사람은 이전 글을 참고하도록 하자!

3.1 OpenCV를 이용한 실시간 얼굴 모자이크 처리: https://jinho-study.tistory.com/231

 

3.1 OpenCV를 이용한 실시간 얼굴 모자이크 처리

저번에는 실시간 얼굴 탐지를 했었다. 이번에는 실시간으로 얼굴 탐지를 하고 탐지된 모든 얼굴 영역을 각각 탐지된 얼굴 이미지를 축소-확대한 이미지로 대체하는 방식으로 모자이크 처리

jinho-study.tistory.com

아래는 전체 코드를 정리한 코드이다.

import numpy as np
import cv2

xml = 'haarcascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(xml)

mosaic_img = cv2.imread('image/mosaic.png') # 럭키짱의 강건마 이미지를 저장

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:
            """ 탐지된 얼굴 영역을 강건마 이미지로 바꾸는 코드"""
            # 탐지된 얼굴 영역에 맞도록 강건마 이미지의 높이와 너비를 바꿔줌.
            t = cv2.resize(mosaic_img, dsize=(h, w), interpolation=cv2.cv2.INTER_LINEAR)
            frame[y:y+h, x:x+w] = t # 탐지된 얼굴 영역을 강건마 이미지로 모자이크 처리

            """ 사람의 어깨선과 머리선이 강건마 이미지와 딱 맞게 이어지도록 구현한 코드
                문제는 나한테만 딱 맞는다... """
#             wi, hi = int(w*0.08/2), int(h*0.23/2)
#             t = cv2.resize(mosaic_img, dsize=(w+wi*2, h+hi*2), interpolation=cv2.cv2.INTER_LINEAR)
#             frame[y-hi:y+h+hi, x-wi:x+w+wi] = t

    cv2.imshow('result', frame)
        
    k = cv2.waitKey(30) & 0xff
    if k == 27: # Esc 키를 누르면 종료
        break

cap.release()
cv2.destroyAllWindows()

모자이크 처리하는 기능을 조금 다르게 2개를 구현했는데 위는 탐지된 얼굴 영역을 강건마 이미지로 바꿔주고,

아래는 사람의 어깨선과 머리선이 강건마 이미지와 딱 맞게 이어지도록 강건만 이미지의 크기를 바꿔줬다.

근데 문제는 나한테만 딱 맞는다...

위의 코드를 실행하면 아래와 같이 실시간으로 탐지된 얼굴이 강건마로 잘 바뀌고 있는 것을 확인할 수 있다. 

내 얼굴 강건마

내 얼굴 기준으로는 말 그대로 기적의 비율을 보여준다.

너네 얼굴 강건마

여러 명 있어도 아주 잘 된다.

github: https://github.com/kimjinho1/Real-time-specific-object-mosaic-using-deep-learning/blob/master/3.2%20Real-time_face_mosaic_with_lucky-jjang.ipynb

 

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

728x90
반응형
728x90
반응형

저번에는 실시간 얼굴 탐지를 했었다. 이번에는 실시간으로 얼굴 탐지를 하고 탐지된 모든 얼굴 영역을

각각 탐지된 얼굴 이미지를 축소-확대한 이미지로 대체하는 방식으로 모자이크 처리를 해볼 것이다.  

전에 했던 내용은 설명하지 않을 것이니 이해가 안 되는 사람은 이전 글을 참고하도록 하자!

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로 바꿔줌

위의 코드를 실행하면 아래와 같이 실시간으로 탐지된 얼굴이 잘 모자이크 되고 있는 것을 확인할 수 있다. 

실시간 얼굴 모자이크 처리

github: https://github.com/kimjinho1/Real-time-specific-object-mosaic-using-deep-learning/blob/master/3.1%20Real-time_face_mosaic.ipynb

 

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

728x90
반응형

+ Recent posts