Spaces:
Sleeping
Sleeping
import os | |
import uuid | |
import gradio as gr | |
import torch | |
from PIL import Image | |
from diffusers import StableDiffusionXLPipeline, EulerAncestralDiscreteScheduler | |
# Configuração do modelo e pipeline | |
model_id = "stabilityai/stable-diffusion-xl-base-1.0" | |
# Carrega o pipeline do modelo | |
scheduler = EulerAncestralDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler") | |
pipe = StableDiffusionXLPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.float16) | |
pipe.to("cuda") # Usa GPU para acelerar o processamento | |
# Função para geração de imagens | |
def generate_image(prompt: str, height: int = 576, width: int = 1024, seed: int = None) -> Image.Image: | |
if not seed: | |
seed = random.randint(0, 99999) | |
# Configurar seed para reprodutibilidade | |
generator = torch.manual_seed(seed) | |
# Gerar a imagem | |
image = pipe(prompt, height=height, width=width, num_inference_steps=50, guidance_scale=7.5, generator=generator).images[0] | |
# Retorna a imagem gerada | |
return image | |
# Interface Gradio | |
with gr.Blocks() as demo: | |
gr.Markdown("## Gerador de Imagens com Stable Diffusion XL") | |
with gr.Row(): | |
with gr.Column(): | |
prompt = gr.Textbox(label="Texto (Prompt)", placeholder="Descreva a imagem que deseja gerar...") | |
seed = gr.Number(label="Seed (opcional)", value=None) | |
generate_button = gr.Button("Gerar Imagem") | |
with gr.Column(): | |
output_image = gr.Image(label="Imagem Gerada", type="pil") | |
# Conectar botão à função | |
generate_button.click(fn=generate_image, inputs=[prompt, gr.Number(value=576), gr.Number(value=1024), seed], outputs=output_image) | |
# Executar o app | |
if __name__ == "__main__": | |
demo.launch(server_name="0.0.0.0", server_port=7860) | |