728x90

텐서플로우에서 제공하는 간이라는 기능을 이용한 모델들을 찾아보다가 뷰티간이라는 흥미로운 모델이 있어서 가지고 왔습니다.

뷰티간은 생얼의 이미지를 화장한 이미지를 넣었을 때 화장한 이미지의 화장법을 생얼의 이미지에 대입시켜주는 모델입니다.

 

사용법은 학습된 모델을 다운로드 하면 간단히 사용하실 수 있습니다.

사용 환경은 tensorflow = 1.15.3 , python = 3 , 주피터 노트북 환경에서 사용하였습니다.

 

먼저 환경설정을 import 해줍니다.

 

import dlib
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import tensorflow as tf
import numpy as np

얼굴에서 필요한 부분을 따오는 함수입니다.

def align_faces(img):
    dets = detector(img, 1)
    
    objs = dlib.full_object_detections()

    for detection in dets:
        s = sp(img, detection)
        objs.append(s)
        
    faces = dlib.get_face_chips(img, objs, size=256, padding=0.35)
    
    return faces

미리학습 되어진 모델을 집어넣어주고 각 변수들을 선언해줍니다.

sess = tf.Session()
sess.run(tf.global_variables_initializer())

saver = tf.train.import_meta_graph('models/model.meta')
saver.restore(sess, tf.train.latest_checkpoint('models'))
graph = tf.get_default_graph()

X = graph.get_tensor_by_name('X:0') # source
Y = graph.get_tensor_by_name('Y:0') # reference
Xs = graph.get_tensor_by_name('generator/xs:0') # output

이미지에 대한 계산식입니다.

def preprocess(img):
    return img.astype(np.float32) / 127.5 - 1.

def postprocess(img):
    return ((img + 1.) * 127.5).astype(np.uint8)

생얼 사진과 화장 사진을 불러옵니다.

img1 = dlib.load_rgb_image('imgs/10.jpg')
img1_faces = align_faces(img1)

img2 = dlib.load_rgb_image('imgs/makeup/XMY-014.png')
img2_faces = align_faces(img2)

fig, axes = plt.subplots(1, 2, figsize=(16, 10))
axes[0].imshow(img1_faces[0])
axes[1].imshow(img2_faces[0])

코드 실행시 위와 같은 결과를 얻으실 수 있습니다.

이제 이미지를 대입해주셨으면 생얼 사진을 화장사진으로 바꿔주는 코드입니다.

src_img = img1_faces[0]
ref_img = img2_faces[0]

X_img = preprocess(src_img)
X_img = np.expand_dims(X_img, axis=0)

Y_img = preprocess(ref_img)
Y_img = np.expand_dims(Y_img, axis=0)

output = sess.run(Xs, feed_dict={
    X: X_img,
    Y: Y_img
})

output_img = postprocess(output[0])

fig, axes = plt.subplots(1, 3, figsize=(20, 10))
axes[0].set_title('Source')
axes[0].imshow(src_img)
axes[1].set_title('Reference')
axes[1].imshow(ref_img)
axes[2].set_title('Result')
axes[2].imshow(output_img)

 

코드 실행시 위와 같은 사진을 얻으실 수 있습니다.

 

코드와 사진파일은 여기서 다운받으실 수 있습니다.

github.com/kairess/BeautyGAN

 

 

kairess/BeautyGAN

transfer the makeup style of a reference face image to a non-makeup face - kairess/BeautyGAN

github.com

drive.google.com/drive/folders/1pgVqnF2-rnOxcUQ3SO4JwHUFTdiSe5t9

미리 학습된 모델다운로드 주소입니다.

 

BeautyGAN - Google 드라이브

 

drive.google.com

www.youtube.com/watch?v=Uhn3dmW1uuM&ab_channel=%EB%B9%B5%ED%98%95%EC%9D%98%EA%B0%9C%EB%B0%9C%EB%8F%84%EC%83%81%EA%B5%AD

위 유튜브는 코드에 대한 자세한 설명이 나와있으니 참고하시길 바랍니다.

728x90

+ Recent posts