File size: 1,805 Bytes
edd338a
 
 
 
1dff4c8
edd338a
 
1dff4c8
 
edd338a
1dff4c8
 
 
 
edd338a
1dff4c8
 
 
 
edd338a
1dff4c8
 
edd338a
1dff4c8
 
edd338a
1dff4c8
 
edd338a
1dff4c8
 
 
edd338a
 
1dff4c8
 
 
 
 
 
 
 
 
 
 
 
edd338a
1dff4c8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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)