Cicikush's picture
Update app.py
fb137fc verified
import gradio as gr
import os
import sys
import subprocess
# --- 1. StyleGAN2 Kütüphanelerini Hazırlama (En Önemli Adım) ---
# dnnlib ve legacy gibi özel kütüphaneleri bulabilmek için
# stylegan2-ada-pytorch deposunu klonlamamız gerekiyor.
# Klonlanacak repo ve hedef klasör adı
repo_url = "https://github.com/NVlabs/stylegan2-ada-pytorch.git"
repo_dir = "stylegan2-ada-pytorch"
# Eğer klasör zaten yoksa, git clone komutunu çalıştır
if not os.path.exists(repo_dir):
print(f"'{repo_dir}' deposu indiriliyor...")
subprocess.run(["git", "clone", repo_url])
print("Depo başarıyla indirildi.")
# Klonlanan klasörün yolunu Python'un arama yollarına ekle
# Bu sayede `import dnnlib` ve `import legacy` komutları çalışır.
sys.path.insert(0, os.path.join(os.getcwd(), repo_dir))
# Artık import edebiliriz
import pickle
import numpy as np
import torch
import dnnlib
import legacy
from PIL import Image
# --- 2. Model Adı ve Yükleme ---
# !! DEĞİŞTİRİLECEK YER !!
# Hugging Face'e yüklediğiniz .pkl model dosyasının tam adını buraya yazın.
MODEL_FILENAME = "network-snapshot-000006.pkl"
MODEL_PATH = MODEL_FILENAME
device = torch.device('cpu') # Ücretsiz CPU donanımı için 'cpu'
# Modelin yüklenmesi
G = None
try:
print(f"Model yükleniyor: {MODEL_PATH}")
with dnnlib.util.open_url(MODEL_PATH) as f:
G = legacy.load_network_pkl(f)['G_ema'].to(device)
print("Model başarıyla yüklendi.")
except Exception as e:
print(f"Model yüklenemedi: {e}")
gr.Warning(f"Model Yüklenemedi! Dosya adının ({MODEL_FILENAME}) doğru olduğundan emin olun. Hata: {e}")
# --- 3. Görüntü Üretme Fonksiyonu ---
def generate_image(seed, truncation_psi):
if G is None:
raise gr.Error("Model yüklenemediği için görüntü üretilemiyor. Lütfen Space loglarını kontrol edin.")
if seed == -1:
seed = np.random.randint(0, 2**32 - 1)
print(f"Görüntü üretiliyor... Seed: {seed}, Truncation: {truncation_psi}")
z = torch.from_numpy(np.random.RandomState(seed).randn(1, G.z_dim)).to(device)
img = G(z, None, truncation_psi=truncation_psi, noise_mode='const')
img = (img.permute(0, 2, 3, 1) * 127.5 + 128).clamp(0, 255).to(torch.uint8)
return Image.fromarray(img[0].cpu().numpy(), 'RGB'), seed
# --- 4. Gradio Arayüzü ---
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🎨 StyleGAN2 ile Eğitilmiş Anime Karakter Üreticisi")
gr.Markdown("Bu demo, özel olarak eğitilmiş bir StyleGAN2 modeli kullanarak yeni anime karakterleri üretir.")
with gr.Row():
with gr.Column(scale=1):
seed_input = gr.Number(label="Seed Numarası (-1 = Rastgele)", value=-1, precision=0)
truncation_input = gr.Slider(label="Truncation Psi (0.5=Daha Ortalama, 1.0=Daha Çeşitli)", minimum=0.1, maximum=1.5, step=0.05, value=0.7)
with gr.Row():
random_btn = gr.Button("Rastgele Oluştur 🎲")
generate_btn = gr.Button("Belirtilen Seed ile Oluştur ⚙️", variant="primary")
with gr.Column(scale=1):
image_output = gr.Image(label="Sonuç", type="pil")
used_seed_output = gr.Number(label="Kullanılan Seed", interactive=False)
generate_btn.click(fn=generate_image, inputs=[seed_input, truncation_input], outputs=[image_output, used_seed_output])
random_btn.click(fn=lambda: -1, inputs=None, outputs=seed_input).then(
fn=generate_image, inputs=[seed_input, truncation_input], outputs=[image_output, used_seed_output]
)
gr.Examples(examples=[[100, 0.7], [42, 0.8]], inputs=[seed_input, truncation_input])
# Uygulamayı başlat
demo.launch()