meryemarpaci's picture
Update app.py
1231ba3 verified
raw
history blame
4.16 kB
import os
import gradio as gr
import torch
import logging
import sys
from PIL import Image
import numpy as np
from diffusers import StableDiffusionImg2ImgPipeline
from peft import PeftModel
# Loglama ayarları
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout)
]
)
logger = logging.getLogger("app")
print("===== Application Startup at", torch.cuda.is_available(), "=====")
# Model ve işlem fonksiyonları
def load_model(lora_model_id="meryemarpaci/sd2base-inpainting-lora"):
"""LoRA modelini yükle"""
print("Model yükleniyor...")
try:
# Baz model yükleme
print("Baz model yükleniyor...")
model_id = "stabilityai/stable-diffusion-2-base"
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32
)
# LoRA ağırlıklarını yükleme
print(f"LoRA ağırlıkları yükleniyor: {lora_model_id}")
pipe.unet = PeftModel.from_pretrained(pipe.unet, lora_model_id)
# GPU'ya taşıma
if torch.cuda.is_available():
pipe = pipe.to("cuda")
print("Model GPU'ya yüklendi")
else:
print("xformers mevcut değil, varsayılan dikkat kullanılıyor:", torch.cuda.is_available())
print("Model başarıyla yüklendi!")
return pipe
except Exception as e:
print(f"Model yüklenirken hata: {str(e)}")
raise e
def process_inpainting(image, mask, prompt, negative_prompt, guidance_scale, steps):
"""İnpainting işlemi gerçekleştir"""
try:
# Model yükleme (her seferinde yüklemek performans açısından ideal değil ama daha güvenli)
pipe = load_model()
# Görüntü ve maske kontrolü
if image is None:
return None, "Lütfen bir görüntü yükleyin."
if mask is None:
return None, "Lütfen bir maske yükleyin."
# Görüntüyü ve maskeyi PIL formatına dönüştür
if isinstance(image, np.ndarray):
image = Image.fromarray(image)
if isinstance(mask, np.ndarray):
mask = Image.fromarray(mask)
# Maskeyi siyah-beyaz yap
mask = mask.convert("L")
# İnpainting işlemi
result = pipe(
prompt=prompt,
image=image,
strength=0.8, # İnpainting için uygun değer
num_inference_steps=steps,
guidance_scale=guidance_scale,
negative_prompt=negative_prompt if negative_prompt else None,
).images[0]
return result, "İnpainting işlemi başarıyla tamamlandı!"
except Exception as e:
error_msg = f"İnpainting işleminde hata: {str(e)}"
print(error_msg)
return None, error_msg
# Basit arayüz
title = "İnpainting LoRA Demo"
description = """
# İnpainting LoRA Modeli Demo
Bu demo, görüntülerdeki maskelenmiş bölgeleri akıllıca tamamlayan bir LoRA modelini kullanır.
**Kullanım:**
1. Bir görüntü yükleyin
2. Bir maske yükleyin (beyaz bölgeler doldurulacak)
3. Prompt girin ve "İnpainting Yap" butonuna tıklayın
"""
# Gradio 3.x ile uyumlu basit arayüz
demo = gr.Interface(
fn=process_inpainting,
inputs=[
gr.Image(label="Orijinal Görüntü", type="pil"),
gr.Image(label="Maske (Beyaz alanlar doldurulacak)", type="pil"),
gr.Textbox(label="Prompt", value="Yüksek kaliteli bir fotoğraf"),
gr.Textbox(label="Negatif Prompt (İsteğe Bağlı)"),
gr.Slider(label="Guidance Scale", minimum=1.0, maximum=15.0, value=7.5, step=0.5),
gr.Slider(label="Adım Sayısı", minimum=20, maximum=100, value=50, step=1)
],
outputs=[
gr.Image(label="Sonuç"),
gr.Textbox(label="Durum")
],
title=title,
description=description,
allow_flagging="never"
)
# Ana uygulama
if __name__ == "__main__":
demo.launch()