Spaces:
Paused
Paused
| # import spaces | |
| import gradio as gr | |
| import torch | |
| from diffusers import StableDiffusionPipeline, DPMSolverMultistepScheduler | |
| import numpy as np | |
| import os | |
| import cv2 | |
| from PIL import Image, ImageDraw | |
| import insightface | |
| from insightface.app import FaceAnalysis | |
| import time | |
| # Diffusion | |
| model_base = "runwayml/stable-diffusion-v1-5" | |
| pipe = StableDiffusionPipeline.from_pretrained(model_base, torch_dtype=torch.float16, use_safetensors=True, safety_checker=None,) | |
| pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config) | |
| lora_model_path = "./loralucy6/checkpoint-145000" | |
| pipe.unet.load_attn_procs(lora_model_path) | |
| pipe.to("cuda") | |
| # Insightface model | |
| app = FaceAnalysis(name='buffalo_l') | |
| app.prepare(ctx_id=0, det_size=(640, 640)) | |
| def face_swap(src_img, dest_img): | |
| src_img = Image.open('./images/' + src_img + '.JPG') | |
| # Convert to RGB | |
| src_img = src_img.convert(mode='RGB') | |
| dest_img = dest_img.convert(mode='RGB') | |
| # Convert to array | |
| src_img_arr = np.asarray(src_img) | |
| dest_img_arr = np.asarray(dest_img) | |
| # Face detection | |
| src_faces = app.get(src_img_arr) | |
| dest_faces = app.get(dest_img_arr) | |
| # Initialize swapper | |
| swapper = insightface.model_zoo.get_model('inswapper_128.onnx', download=False, download_zip=False) | |
| # Swap face | |
| res = dest_img_arr.copy() | |
| for face in dest_faces: | |
| res = swapper.get(res, face, src_faces[0], paste_back=True) | |
| # Convert to PIL image | |
| final_image = Image.fromarray(np.uint8(res)).convert('RGB') | |
| return final_image | |
| # @spaces.GPU(enable_queue=True) | |
| def greet(description,color,features,occasion,type_,face): | |
| start = time.time() | |
| # Parse input | |
| prompt = '' | |
| description = 'description:' + description.replace(' ', '-') | |
| color = ' color:' + ','.join(color) | |
| features = ' features:' + ','.join(features) | |
| occasion = ' occasion:' + ','.join(occasion) | |
| type_ = ' type:' + ','.join(type_) | |
| prompt += description + color + features + occasion + type_ | |
| print('prompt:',prompt) | |
| pipe.to("cuda") | |
| image = pipe( | |
| prompt, | |
| negative_prompt='deformed face,bad anatomy', | |
| width=312, | |
| height=512, | |
| num_inference_steps=100, | |
| guidance_scale=7.5, | |
| cross_attention_kwargs={"scale": 1.0} | |
| ).images[0] | |
| if(face != 'Normal'): | |
| image = face_swap(face, image) | |
| end = time.time() | |
| print('time:', end - start) | |
| return image | |
| iface = gr.Interface(fn=greet, theme="Nymbo/Alyx_Theme", | |
| inputs=[gr.Textbox(label='Description'), | |
| gr.Dropdown(interactive=True, label='Color',choices=['Beige','Black','Blue','Brown','Green','Grey','Orange','Pink','Purple','Red','White','Yellow'],multiselect=True), | |
| gr.Dropdown(interactive=True, label='Features',choices=['3/4-sleeve','Babydoll','Closed-Back','Corset','Crochet','Cutouts','Draped','Floral','Gloves','Halter','Lace','Long','Long-Sleeve','Midi','No-Slit','Off-The-Shoulder','One-Shoulder','Open-Back','Pockets','Print','Puff-Sleeve','Ruched','Satin','Sequins','Shimmer','Short','Short-Sleeve','Side-Slit','Square-Neck','Strapless','Sweetheart-Neck','Tight','V-Neck','Velvet','Wrap'],multiselect=True), | |
| gr.Dropdown(interactive=True, label='Occasion',choices=['Homecoming','Casual','Wedding-Guest','Festival','Sorority','Day','Vacation','Summer','Pool-Party','Birthday','Date-Night','Party','Holiday','Winter-Formal','Valentines-Day','Prom','Graduation'],multiselect=True), | |
| gr.Dropdown(interactive=True, label='Type',choices=['Mini-Dresses','Midi-Dresses','Maxi-Dresses','Two-Piece-Sets','Rompers','Jeans','Jumpsuits','Pants','Tops','Jumpers/Cardigans','Skirts','Shorts','Bodysuits','Swimwear'],multiselect=True), | |
| gr.Dropdown(interactive=True, label='Face',choices=['Normal','Cat','Lisa','Mila'], value='Cat'), | |
| ], | |
| outputs=gr.Image(type="pil", label="Final Image", width=312, height=512, show_share_button=False), | |
| examples=[['Kailani mesh sequins two piece maxi dress pink',['Pink'],['Cutouts','Long-Sleeve','Sequins','Side-Slit'],['Festival','Party','Prom'],['Maxi-Dresses','Two-Piece-Sets'],'Cat']], | |
| title='Dress Designer', | |
| description= | |
| """ | |
| Design your own dress with text! | |
| """ | |
| ) | |
| iface.launch() |