Spaces:
Configuration error
Configuration error
| import cv2 | |
| import os | |
| import numpy as np | |
| from skimage.filters import gaussian | |
| from test import evaluate | |
| import streamlit as st | |
| from PIL import Image, ImageColor | |
| def sharpen(img): | |
| img = img * 1.0 | |
| gauss_out = gaussian(img, sigma=5, multichannel=True) | |
| alpha = 1.5 | |
| img_out = (img - gauss_out) * alpha + img | |
| img_out = img_out / 255.0 | |
| mask_1 = img_out < 0 | |
| mask_2 = img_out > 1 | |
| img_out = img_out * (1 - mask_1) | |
| img_out = img_out * (1 - mask_2) + mask_2 | |
| img_out = np.clip(img_out, 0, 1) | |
| img_out = img_out * 255 | |
| return np.array(img_out, dtype=np.uint8) | |
| def hair(image, parsing, part=17, color=[230, 50, 20]): | |
| b, g, r = color #[10, 50, 250] # [10, 250, 10] | |
| tar_color = np.zeros_like(image) | |
| tar_color[:, :, 0] = b | |
| tar_color[:, :, 1] = g | |
| tar_color[:, :, 2] = r | |
| np.repeat(parsing[:, :, np.newaxis], 3, axis=2) | |
| image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) | |
| tar_hsv = cv2.cvtColor(tar_color, cv2.COLOR_BGR2HSV) | |
| if part == 12 or part == 13: | |
| image_hsv[:, :, 0:2] = tar_hsv[:, :, 0:2] | |
| else: | |
| image_hsv[:, :, 0:1] = tar_hsv[:, :, 0:1] | |
| changed = cv2.cvtColor(image_hsv, cv2.COLOR_HSV2BGR) | |
| if part == 17: | |
| changed = sharpen(changed) | |
| changed[parsing != part] = image[parsing != part] | |
| return changed | |
| DEMO_IMAGE = 'imgs/116.jpg' | |
| st.title('Virtual Makeup') | |
| st.sidebar.title('Virtual Makeup') | |
| st.sidebar.subheader('Parameters') | |
| table = { | |
| 'hair': 17, | |
| 'upper_lip': 12, | |
| 'lower_lip': 13, | |
| } | |
| img_file_buffer = st.sidebar.file_uploader("Upload an image", type=[ "jpg", "jpeg",'png']) | |
| if img_file_buffer is not None: | |
| image = np.array(Image.open(img_file_buffer)) | |
| demo_image = img_file_buffer | |
| else: | |
| demo_image = DEMO_IMAGE | |
| image = np.array(Image.open(demo_image)) | |
| #st.set_option('deprecation.showfileUploaderEncoding', False) | |
| new_image = image.copy() | |
| st.subheader('Original Image') | |
| st.image(image,use_column_width = True) | |
| cp = 'cp/79999_iter.pth' | |
| ori = image.copy() | |
| h,w,_ = ori.shape | |
| #print(h) | |
| #print(w) | |
| image = cv2.resize(image,(1024,1024)) | |
| parsing = evaluate(demo_image, cp) | |
| parsing = cv2.resize(parsing, image.shape[0:2], interpolation=cv2.INTER_NEAREST) | |
| parts = [table['hair'], table['upper_lip'], table['lower_lip']] | |
| hair_color = st.sidebar.color_picker('Pick the Hair Color', '#000') | |
| hair_color = ImageColor.getcolor(hair_color, "RGB") | |
| lip_color = st.sidebar.color_picker('Pick the Lip Color', '#edbad1') | |
| lip_color = ImageColor.getcolor(lip_color, "RGB") | |
| colors = [hair_color, lip_color, lip_color] | |
| for part, color in zip(parts, colors): | |
| image = hair(image, parsing, part, color) | |
| image = cv2.resize(image,(w,h)) | |
| st.subheader('Output Image') | |
| st.image(image,use_column_width = True) | |