Spaces:
Build error
Build error
| from controlnet_aux import OpenposeDetector | |
| from diffusers import StableDiffusionControlNetPipeline, ControlNetModel | |
| from diffusers import UniPCMultistepScheduler | |
| import gradio as gr | |
| import torch | |
| from PIL import Image, ImageDraw, ImageFont | |
| import os | |
| import cv2 | |
| import glob | |
| from PIL import Image | |
| import numpy as np | |
| from diffusers.utils import load_image | |
| import random | |
| # Constants | |
| low_threshold = 100 | |
| high_threshold = 200 | |
| # Models | |
| pose_model = OpenposeDetector.from_pretrained("lllyasviel/ControlNet") | |
| controlnet = ControlNetModel.from_pretrained( | |
| "lllyasviel/sd-controlnet-openpose" | |
| ) | |
| pipe = StableDiffusionControlNetPipeline.from_pretrained( | |
| "runwayml/stable-diffusion-v1-5", controlnet=controlnet, safety_checker=None | |
| ) | |
| pipe = pipe.to("cpu") | |
| def get_pose(image): | |
| return pose_model(image) | |
| def generate_an_image_from_text(text, text_size_, width, lenght): | |
| # Create a blank image | |
| image = Image.new('RGB', (width, lenght), color = (255, 255, 255)) | |
| # Create a drawing object | |
| draw = ImageDraw.Draw(image) | |
| # font def | |
| dir_path = '' | |
| # Get a list of all the font files in the directory | |
| print("start generation") | |
| font_files = glob.glob(os.path.join(dir_path, '*.ttf')) | |
| # Get a list of font paths | |
| font_paths = [] | |
| for font_file in font_files: | |
| font_paths.append(font_file) | |
| # Select a random font | |
| font_path = random.choice(font_paths) | |
| #print(font_path) | |
| font = ImageFont.truetype(font_path, text_size_) | |
| # Get the text size | |
| text_size = draw.textsize(text, font) | |
| # Calculate the x and y positions for the text | |
| x = (image.width - text_size[0]) / 2 | |
| y = (image.height - text_size[1]) / 2 | |
| # Draw the text on the image | |
| draw.text((x, y), text, fill=(0, 0, 0), font=font) | |
| print("end generation") | |
| return image | |
| def to_Canny(image): | |
| print("start canny") | |
| # Let's load the popular vermeer image | |
| image = np.array(image) | |
| low_threshold = 100 | |
| high_threshold = 200 | |
| image = cv2.Canny(image, low_threshold, high_threshold) | |
| image = image[:, :, None] | |
| image = np.concatenate([image, image, image], axis=2) | |
| canny_image = Image.fromarray(image) | |
| print("end canny") | |
| return canny_image | |
| def inference(prompt,canny_image,number,seed, steps ): | |
| print("start inference") | |
| pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config) | |
| # This command loads the individual model components on GPU on-demand. So, we don't | |
| # need to explicitly call pipe.to("cuda"). | |
| #pipe.enable_model_cpu_offload() | |
| # xformers | |
| #pipe.enable_xformers_memory_efficient_attention() | |
| # Generator seed, | |
| generator = torch.manual_seed(seed) | |
| image_ = canny_image | |
| prompt = prompt | |
| out_image = pipe( | |
| prompt, num_inference_steps=steps, generator=generator, image=image_, num_images_per_prompt=number) | |
| print('end inference') | |
| return out_image | |
| def generation(prompt,text,seed,police_size, lenght, width,number,num_inference_steps): | |
| img = generate_an_image_from_text(text,police_size,lenght,width) | |
| img = to_Canny(img) | |
| output = inference(prompt,img, number,seed,num_inference_steps) | |
| all_outputs = [] | |
| for image in output.images: | |
| all_outputs.append(image) | |
| return all_outputs | |
| gr.Interface(fn=generation, | |
| inputs=[gr.Textbox(value="A steampunk Alphabetic Logo, steampunk style, with glowing mecha parts, mecha alphabets, high quality, high res, ultra HD"), gr.Textbox(), gr.Slider(0, 200,value=60), gr.Slider(0, 200, value=90), gr.Slider(0, 1024, value=512), gr.Slider(0, 1024, value=512), | |
| gr.Slider(0, 7,value=2, step=1),gr.Slider(0, 20,value=5, step=1)], outputs=gr.Gallery().style(grid=[2], height="auto"), title="Generate a logo using Text ",cache_examples=True, examples=[["A steampunk Alphabetic Logo, steampunk style, with glowing mecha parts, mecha alphabets, high quality, high res, ultra HD", "Logo",60,90,512,512,2,5]]).launch(enable_queue=True) | |