File size: 2,948 Bytes
4eeec90 1ce879b 5d0a205 7bda071 4eeec90 1ce879b 7bda071 1ce879b 5d0a205 a0df5ec 6bff229 1ce879b 5d0a205 a0df5ec 5d0a205 1ce879b 7bda071 2daeeee 7bda071 2daeeee 7bda071 1ce879b 7bda071 1ce879b 6a72465 1ce879b 6a72465 1ce879b 6a72465 1ce879b 6a72465 51165d9 1ce879b |
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
import gradio as gr
from diffusers import DiffusionPipeline
import torch
#für die komplexere Variante der Erzeugung
from diffusers import DDPMScheduler, UNet2DModel
from PIL import Image
import numpy as np
##############################################
#Hilfsfunktionen
##############################################
#######################################
#Bild nach dem eingegebenen prompt erzeugen - mit Pipeline
def erzeuge(prompt):
return pipeline(prompt).images #[0]
########################################
#Bild erzeugen - nich über Pipeline sondern mit mehr Einstellungsmöglichkeiten
def erzeuge_komplex(prompt):
scheduler = DDPMScheduler.from_pretrained("google/ddpm-cat-256")
model = UNet2DModel.from_pretrained("google/ddpm-cat-256").to("cuda")
scheduler.set_timesteps(50)
sample_size = model.config.sample_size
noise = torch.randn((1, 3, sample_size, sample_size)).to("cuda")
input = noise
for t in scheduler.timesteps:
with torch.no_grad():
noisy_residual = model(input, t).sample
prev_noisy_sample = scheduler.step(noisy_residual, t, input).prev_sample
input = prev_noisy_sample
image = (input / 2 + 0.5).clamp(0, 1)
image = image.cpu().permute(0, 2, 3, 1).numpy()[0]
image = Image.fromarray((image * 255).round().astype("uint8"))
return image
######################################################
#Modelle laden
#######################################
#Alternativ erzeugen
#gr.Interface.load("models/stabilityai/stable-diffusion-2").launch()
#######################################
#Alternativ: Model über pipeline laden
pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2")
pipeline.to("cuda")
########################################
#Alternativ: Bild erzeugen - nicht über Pipeline sondern mit mehr Einstellungsmöglichkeiten
#scheduler = DDPMScheduler.from_pretrained("google/ddpm-cat-256")
#model = UNet2DModel.from_pretrained("google/ddpm-cat-256").to("cuda")
######################################################
#Gradio UI erzeugen
######################################################
with gr.Blocks() as demo:
with gr.Column(variant="panel"):
with gr.Row(variant="compact"):
text = gr.Textbox(
label="Deine Beschreibung:",
show_label=False,
max_lines=1,
placeholder="Bildbeschreibung",
).style(
container=False,
)
btn = gr.Button("erzeuge Bild").style(full_width=False, min_width=100)
gallery = gr.Gallery(
label="Erzeugtes Bild", show_label=False, elem_id="gallery"
).style(columns=[2], rows=[2], object_fit="contain", height="auto")
btn.click(erzeuge, inputs=[text], outputs=[gallery])
text.submit(erzeuge, inputs=[text], outputs=[gallery])
if __name__ == "__main__":
demo.launch() |