Spaces:
Build error
Build error
import torch | |
from diffusers import AutoPipelineForImage2Image | |
from PIL import Image, ImageDraw, ImageFont | |
import requests | |
from io import BytesIO | |
import gradio as gr | |
# log gpu availabilitu | |
print(f"Is CUDA available: {torch.cuda.is_available()}") | |
print(f"CUDA device: {torch.cuda.get_device_name(torch.cuda.current_device())}") | |
def image_to_template(generated_image, logo, button_text, punchline, theme_color): | |
# Resize logo if needed | |
logo = logo.resize((100, 100)) # Example size, adjust as needed | |
# Create a blank canvas with extra space for logo, punchline, and button | |
canvas_width = max(generated_image.width, logo.width) * 2 | |
canvas_height = generated_image.height + logo.height + 100 | |
canvas = Image.new('RGB', (canvas_width, canvas_height), 'white') | |
# Paste the logo and the generated image onto the canvas | |
canvas.paste(logo, (10, 10)) # Adjust position as needed | |
canvas.paste(generated_image, (0, logo.height + 20)) | |
# Add punchline and button | |
draw = ImageDraw.Draw(canvas) | |
font = ImageFont.load_default() # Or use a custom font | |
text_color = theme_color | |
# Draw punchline | |
draw.text((10, logo.height + generated_image.height + 30), punchline, fill=text_color, font=font) | |
# Draw button | |
button_position = (10, logo.height + generated_image.height + 60) # Adjust as needed | |
draw.rectangle([button_position, (canvas_width - 10, canvas_height - 10)], outline=theme_color, fill=text_color) | |
draw.text(button_position, button_text, font=font) | |
return canvas | |
def generate_template(initial_image, logo, prompt, button_text, punchline, image_color, theme_color): | |
pipeline = AutoPipelineForImage2Image.from_pretrained( | |
"./models/kandinsky-2-2-decoder", | |
torch_dtype=torch.float16, | |
variant="fp16", | |
use_safetensors=True | |
) | |
# pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True) | |
pipeline.enable_model_cpu_offload() | |
prompt = f"{prompt}, include the color {image_color}" | |
negative_prompt = "low quality, bad quality, blurry, unprofessional" | |
generated_image = pipeline( | |
prompt=prompt, | |
negative_prompt=negative_prompt, | |
image=initial_image, | |
height=256, | |
width=256).images[0] | |
template_image = image_to_template(generated_image, logo, button_text, punchline, theme_color) | |
return template_image | |
# Set up Gradio interface | |
iface = gr.Interface( | |
fn=generate_template, | |
inputs=[gr.inputs.Image(type="pil", label="Initial Image"), | |
gr.inputs.Image(type="pil", label="Logo"), | |
gr.inputs.Textbox(label="Prompt"), | |
gr.inputs.Textbox(label="Button Text"), | |
gr.inputs.Textbox(label="Punchline"), | |
gr.inputs.ColorPicker(label="Image Color"), | |
gr.inputs.ColorPicker(label="Theme Color")], | |
outputs=[gr.outputs.Image(type="pil")], | |
title="Ad Template Generation Using Diffusion Models Demo", | |
description="Generate ad template based on your inputs using a trained model.", | |
concurrency_limit=2, | |
# examples=[ | |
# [] | |
# ] | |
) | |
# Run the interface | |
iface.launch() | |