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)
코드 실행시 위와 같은 사진을 얻으실 수 있습니다.
코드와 사진파일은 여기서 다운받으실 수 있습니다.
drive.google.com/drive/folders/1pgVqnF2-rnOxcUQ3SO4JwHUFTdiSe5t9
미리 학습된 모델다운로드 주소입니다.
위 유튜브는 코드에 대한 자세한 설명이 나와있으니 참고하시길 바랍니다.
728x90
'인공지능 > 실습' 카테고리의 다른 글
[LSTM]을 이용해서 삼성전자 주식 예측해보기 (0) | 2020.12.01 |
---|---|
[tensorflow GAN]tensorflow GAN(심층 합성곱 생성적 적대 신경망) 기본예제 (0) | 2020.11.26 |
[yolov5] yolov5 custom dataset learn (yolov5 커스텀 데이터 학습) (0) | 2020.11.19 |
[ubuntu] YOLOV4파일을 tflite형식으로 변환하기(convert YOLOV4 to tflite) (0) | 2020.10.22 |
[ubuntu,yolo]이미지 라벨링을 위한 YOLO-mark설치(YOLO-mark installation for image labeling) (0) | 2020.10.22 |