Spaces:
Running
Running
| import time | |
| import uuid | |
| import gradio as gr | |
| import numpy as np | |
| from PIL import Image | |
| from .generation import call_generation | |
| from .util import upload_np_2_oss | |
| def get_image_url(request_id, pil_image, suffix): | |
| np_image = np.array(pil_image.convert("RGB")) | |
| image_url = upload_np_2_oss(np_image, request_id + suffix) | |
| return image_url | |
| def is_no_image_placeholder(pil_image): | |
| from PIL import Image, ImageChops | |
| no_image_placeholder = Image.open("assets/No-Image-Placeholder.png").convert("RGB") | |
| diff = ImageChops.difference(pil_image, no_image_placeholder) | |
| if diff.getbbox() is None: | |
| return True | |
| else: | |
| return False | |
| def text_to_single_id_generation_process( | |
| pil_faceid=None, pil_supp_faceids=None, | |
| pil_mix_faceid_1=None, mix_scale_1=0.0, | |
| pil_mix_faceid_2=None, mix_scale_2=0.0, | |
| faceid_scale=0.0, face_structure_scale=0.0, | |
| prompt="", negative_prompt="", | |
| pil_style=None, style_scale=0.0, | |
| seed=-1, image_resolution="512x512", use_sr=True, | |
| ): | |
| request_id = time.strftime('%Y%m%d-', time.localtime(time.time())) + str(uuid.uuid4()) | |
| if prompt == "": | |
| raise gr.Error("Please enter the prompt") | |
| if pil_style and is_no_image_placeholder(pil_style): | |
| pil_style = None | |
| faceid_url = [] | |
| if pil_faceid: | |
| faceid_url.append(get_image_url(request_id, pil_faceid, suffix="_faceid.png")) | |
| if pil_supp_faceids and len(pil_supp_faceids) > 0: | |
| for idx, pil_supp_faceid in enumerate(pil_supp_faceids): | |
| pil_supp_faceid = Image.open(pil_supp_faceid) | |
| faceid_url.append(get_image_url(request_id, pil_supp_faceid, suffix=f"_supp_faceid_{idx}.png")) | |
| mix_face_url = [] | |
| mix_scale = [] | |
| if pil_mix_faceid_1 is not None: | |
| mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_1, suffix=f"_mix_faceid_1_{mix_scale_1:.2f}.png") | |
| ) | |
| mix_scale.append(mix_scale_1) | |
| if pil_mix_faceid_2 is not None: | |
| mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_2, suffix=f"_mix_faceid_2_{mix_scale_2:.2f}.png") | |
| ) | |
| mix_scale.append(mix_scale_2) | |
| # The outer parenthesis represent the ID, and the inner parenthesis represent the mix face image for each ID. | |
| faceid_image_url, mix_faceid_image_url, mix_faceid_scale = [], [], [] | |
| if len(faceid_url) > 0: | |
| faceid_image_url.append(faceid_url) | |
| mix_faceid_image_url.append(mix_face_url) | |
| mix_faceid_scale.append(mix_scale) | |
| if pil_style is None: | |
| style_image_url = "" | |
| else: | |
| style_image_url = get_image_url(request_id, pil_style, suffix="_style.png") | |
| data = dict( | |
| input=dict( | |
| faceid_image_url=faceid_image_url, | |
| mix_faceid_image_url=mix_faceid_image_url, | |
| mix_faceid_scale=mix_faceid_scale, | |
| style_image_url=style_image_url, | |
| prompt=prompt, | |
| negative_prompt=negative_prompt | |
| ), | |
| parameters=dict( | |
| image_resolution=image_resolution, | |
| faceid_scale=faceid_scale * 10., | |
| face_structure_scale=face_structure_scale * 10., | |
| style_scale=style_scale * 10., | |
| use_sr=int(use_sr), | |
| seed=seed, | |
| mode="text-to-image", | |
| ) | |
| ) | |
| res = call_generation(data) | |
| return res | |
| def text_to_multi_id_generation_process( | |
| pil_faceid_1st=None, pil_supp_faceids_1st=None, | |
| pil_mix_faceid_1_1st=None, mix_scale_1_1st=0.0, | |
| pil_mix_faceid_2_1st=None, mix_scale_2_1st=0.0, | |
| pil_faceid_2nd=None, pil_supp_faceids_2nd=None, | |
| pil_mix_faceid_1_2nd=None, mix_scale_1_2nd=0.0, | |
| pil_mix_faceid_2_2nd=None, mix_scale_2_2nd=0.0, | |
| faceid_scale=0.0, face_structure_scale=0.0, | |
| prompt="", negative_prompt="", | |
| pil_style=None, style_scale=0.0, | |
| seed=-1, image_resolution="512x512", use_sr=True, | |
| ): | |
| request_id = time.strftime('%Y%m%d-', time.localtime(time.time())) + str(uuid.uuid4()) | |
| if prompt == "": | |
| raise gr.Error("Please enter the prompt") | |
| if pil_style and is_no_image_placeholder(pil_style): | |
| pil_style = None | |
| first_faceid_url = [] | |
| if pil_faceid_1st: | |
| first_faceid_url.append(get_image_url(request_id, pil_faceid_1st, suffix="_faceid_1st.png")) | |
| if pil_supp_faceids_1st and len(pil_supp_faceids_1st) > 0: | |
| for idx, pil_supp_faceid_1st in enumerate(pil_supp_faceids_1st): | |
| pil_supp_faceid_1st = Image.open(pil_supp_faceid_1st) | |
| first_faceid_url.append(get_image_url(request_id, pil_supp_faceid_1st, suffix=f"_faceid_1st_{idx}.png")) | |
| second_faceid_url = [] | |
| if pil_faceid_2nd: | |
| second_faceid_url.append(get_image_url(request_id, pil_faceid_2nd, suffix="_faceid_2nd.png")) | |
| if pil_supp_faceids_2nd and len(pil_supp_faceids_2nd) > 0: | |
| for idx, pil_supp_faceid_2nd in enumerate(pil_supp_faceids_2nd): | |
| pil_supp_faceid_2nd = Image.open(pil_supp_faceid_2nd) | |
| second_faceid_url.append(get_image_url(request_id, pil_supp_faceid_2nd, suffix=f"_faceid_2nd_{idx}.png")) | |
| first_mix_face_url, first_mix_scale = [], [] | |
| if pil_mix_faceid_1_1st: | |
| first_mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_1_1st, suffix=f"_mix_faceid_1_1st_{mix_scale_1_1st:.2f}.png") | |
| ) | |
| first_mix_scale.append(mix_scale_1_1st) | |
| if pil_mix_faceid_2_1st is not None: | |
| first_mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_2_1st, suffix=f"_mix_faceid_2_1st_{mix_scale_2_1st:.2f}.png") | |
| ) | |
| first_mix_scale.append(mix_scale_2_1st) | |
| second_mix_face_url, second_mix_scale = [], [] | |
| if pil_mix_faceid_1_2nd: | |
| second_mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_1_2nd, suffix=f"_mix_faceid_1_2nd_{mix_scale_1_2nd:.2f}.png") | |
| ) | |
| second_mix_scale.append(mix_scale_1_2nd) | |
| if pil_mix_faceid_2_2nd is not None: | |
| second_mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_2_2nd, suffix=f"_mix_faceid_2_2nd_{mix_scale_2_2nd:.2f}.png") | |
| ) | |
| second_mix_scale.append(mix_scale_2_2nd) | |
| # The outer parenthesis represent the ID, and the inner parenthesis represent the mix face image for each ID. | |
| faceid_image_url, mix_faceid_image_url, mix_faceid_scale = [], [], [] | |
| if len(first_faceid_url) > 0: | |
| faceid_image_url.append(first_faceid_url) | |
| mix_faceid_image_url.append(first_mix_face_url) | |
| mix_faceid_scale.append(first_mix_scale) | |
| if len(second_faceid_url) > 0: | |
| faceid_image_url.append(second_faceid_url) | |
| mix_faceid_image_url.append(second_mix_face_url) | |
| mix_faceid_scale.append(second_mix_scale) | |
| if pil_style is None: | |
| style_image_url = "" | |
| else: | |
| style_image_url = get_image_url(request_id, pil_style, suffix="_style.png") | |
| data = dict( | |
| input=dict( | |
| faceid_image_url=faceid_image_url, | |
| mix_faceid_image_url=mix_faceid_image_url, | |
| mix_faceid_scale=mix_faceid_scale, | |
| style_image_url=style_image_url, | |
| prompt=prompt, | |
| negative_prompt=negative_prompt | |
| ), | |
| parameters=dict( | |
| image_resolution=image_resolution, | |
| faceid_scale=faceid_scale * 10., | |
| face_structure_scale=face_structure_scale * 10., | |
| style_scale=style_scale * 10., | |
| use_sr=int(use_sr), | |
| seed=seed, | |
| mode="text-to-image", | |
| ) | |
| ) | |
| res = call_generation(data) | |
| return res | |
| def image_to_single_id_generation_process( | |
| pil_faceid=None, pil_supp_faceids=None, | |
| pil_mix_faceid_1=None, mix_scale_1=0.0, | |
| pil_mix_faceid_2=None, mix_scale_2=0.0, | |
| faceid_scale=0.0, face_structure_scale=0.0, | |
| pil_style=None, style_scale=1.0, | |
| seed=-1, image_resolution="768x512", use_sr=True, | |
| ): | |
| request_id = time.strftime('%Y%m%d-', time.localtime(time.time())) + str(uuid.uuid4()) | |
| if pil_faceid is None: | |
| raise gr.Error("Please upload an ID image") | |
| if pil_style is None: | |
| raise gr.Error("Please upload a reference image") | |
| faceid_url = [] | |
| if pil_faceid: | |
| faceid_url.append(get_image_url(request_id, pil_faceid, suffix="_faceid.png")) | |
| if pil_supp_faceids and len(pil_supp_faceids) > 0: | |
| for idx, pil_supp_faceid in enumerate(pil_supp_faceids): | |
| pil_supp_faceid = Image.open(pil_supp_faceid) | |
| faceid_url.append(get_image_url(request_id, pil_supp_faceid, suffix=f"_supp_faceid_{idx}.png")) | |
| mix_face_url = [] | |
| mix_scale = [] | |
| if pil_mix_faceid_1 is not None: | |
| mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_1, suffix=f"_mix_faceid_1_{mix_scale_1:.2f}.png") | |
| ) | |
| mix_scale.append(mix_scale_1) | |
| if pil_mix_faceid_2 is not None: | |
| mix_face_url.append( | |
| get_image_url(request_id, pil_mix_faceid_2, suffix=f"_mix_faceid_2_{mix_scale_2:.2f}.png") | |
| ) | |
| mix_scale.append(mix_scale_2) | |
| # The outer parenthesis represent the ID, and the inner parenthesis represent the mix face image for each ID. | |
| faceid_image_url, mix_faceid_image_url, mix_faceid_scale = [], [], [] | |
| if len(faceid_url) > 0: | |
| faceid_image_url.append(faceid_url) | |
| mix_faceid_image_url.append(mix_face_url) | |
| mix_faceid_scale.append(mix_scale) | |
| if pil_style is None: | |
| style_image_url = "" | |
| else: | |
| style_image_url = get_image_url(request_id, pil_style, suffix="_style.png") | |
| data = dict( | |
| input=dict( | |
| faceid_image_url=faceid_image_url, | |
| mix_faceid_image_url=mix_faceid_image_url, | |
| mix_faceid_scale=mix_faceid_scale, | |
| style_image_url=style_image_url, | |
| ), | |
| parameters=dict( | |
| image_resolution=image_resolution, | |
| faceid_scale=faceid_scale * 10., | |
| face_structure_scale=face_structure_scale * 10., | |
| style_scale=style_scale * 10., | |
| use_sr=int(use_sr), | |
| seed=seed, | |
| mode="image-to-image", | |
| ) | |
| ) | |
| res = call_generation(data) | |
| return res | |