본문 바로가기

스파르타코딩개발일지

TIL Deep-Learning 3일차

지난 주차에서 배운것들은 일반 이미지 크기변환,모델적용,모델적용한부분 합성,얼굴인식,얼굴을통해 나이를인식하거나 마스크의유무를 나타내는 모델을 적용시키는 것이였다

이번 4주차에서는 다른이미지를 동영상에 합성시키는것으로 1>2주차 에서했듯이 3>4주차 했던것들과 매우유사했다.

 

import cv2
import dlib

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('models/shape_predictor_5_face_landmarks.dat')

cap = cv2.VideoCapture('videos/01.mp4')
sticker_img = cv2.imread('imgs/pig.png', cv2.IMREAD_UNCHANGED)
----------------------------------여기까지는 이미지or동영상을 읽고변수명을 정해줌 

지금까지 다른점이있다면 dlib를 사용했다는점이다---------------------------------------------
while True:
    ret, img = cap.read()

    if ret == False:
        break
--------------------------------------while문으으로 멈추게되면 false하게 된다.---------------------------
    dets = detector(img)

    for det in dets:
        shape = predictor(img, det)

        try:
            x1 = det.left()
            y1 = det.top()
            x2 = det.right()
            y2 = det.bottom()

            # compute pig nose coordinates
            center_x = shape.parts()[4].x
            center_y = shape.parts()[4].y - 5

            h, w, c = sticker_img.shape

            nose_w = int((x2 - x1) / 4)
            nose_h = int(h / w * nose_w)

            nose_x1 = int(center_x - nose_w / 2)
            nose_x2 = nose_x1 + nose_w

            nose_y1 = int(center_y - nose_h / 2)
            nose_y2 = nose_y1 + nose_h

            # overlay nose
            overlay_img = sticker_img.copy()
            overlay_img = cv2.resize(overlay_img, dsize=(nose_w, nose_h))

            overlay_alpha = overlay_img[:, :, 3:4] / 255.0
            background_alpha = 1.0 - overlay_alpha

            img[nose_y1:nose_y2, nose_x1:nose_x2] = overlay_alpha * overlay_img[:, :, :3] + background_alpha * img[nose_y1:nose_y2, nose_x1:nose_x2]
        except:
            pass
-----------------------------------------여기까지는 이미지를 적용시켜줄 동영상의 눈코입의 좌표를조절하거나 이미지의 크기를 변경해준다.

맨위에서 dlib 의 detector() 함수를이용해 선언해주었다.------------------------------------------------------------------
    cv2.imshow('result', img)
    if cv2.waitKey(1) == ord('q'):
        break

 

------------------이미지를 윈도우창에서 열어주기----------------------

 

 

코드자체는 그렇게 어렵지않았지만 대부분의 오류는 강의자료와 지금 사용하는 버전의 라이브러리가 맞지않아서 충돌현상이 났었다.. 이마저도 실행안되는오류는 아니였고 노란줄로 불편했을뿐 ..

 

 

'스파르타코딩개발일지' 카테고리의 다른 글

TIL 팀프로젝트 (딥러닝편)  (0) 2022.11.24
TIL 팀프로젝트d-1  (0) 2022.11.22
TIL Deep-Learning 2일차  (0) 2022.11.17
TIL Deep-Learning 1일  (1) 2022.11.16
TIL Docke&Linux 5일차  (0) 2022.11.15