import gradio as gr from diffusers import StableDiffusionImg2ImgPipeline, DDIMScheduler import torch from PIL import Image import time import os print("=" * 50) print("🔄 در حال لود مدل...") print("=" * 50) # تشخیص دستگاه device = "cuda" if torch.cuda.is_available() else "cpu" dtype = torch.float16 if device == "cuda" else torch.float32 print(f"📍 دستگاه: {device}") # لود مدل pipe = StableDiffusionImg2ImgPipeline.from_pretrained( "hafsa000/interior-design", torch_dtype=dtype, safety_checker=None ) pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config) pipe = pipe.to(device) # بهینه‌سازی برای CPU if device == "cpu": pipe.enable_attention_slicing() print("⚠️ حالت CPU: پردازش کند خواهد بود (5-15 دقیقه هر تصویر)") else: print("✅ مدل روی GPU لود شد!") # استایل‌ها STYLES = { "Minimalistic": "minimalist interior design, clean lines, neutral colors, natural light, photorealistic, 8k", "Boho": "bohemian interior design, colorful textiles, plants, eclectic decor, photorealistic, 8k", "Farmhouse": "farmhouse interior design, rustic wood, vintage decor, warm colors, photorealistic", "Neoclassical": "neoclassical interior design, elegant, marble, gold accents, photorealistic, 8k", "Parisian": "parisian apartment interior, chic decor, elegant furniture, photorealistic, 8k", "Scandinavian": "scandinavian interior design, white walls, light wood, cozy textiles, plants, photorealistic", "Japanese": "japanese interior design, minimal, zen atmosphere, natural materials, photorealistic", "Midcentury Modern": "midcentury modern interior design, retro furniture, organic shapes, warm wood, photorealistic", "Industrial": "industrial style interior, exposed brick, metal accents, raw materials, photorealistic", "Luxury": "luxury interior design, marble, gold accents, premium materials, photorealistic, 8k", } def redesign(image, style_name, strength, guidance): if image is None: return None, "❌ لطفاً عکس آپلود کنید" print(f"🎨 پردازش با سبک: {style_name}") start_time = time.time() prompt = STYLES.get(style_name, STYLES["Minimalistic"]) try: # تنظیمات برای CPU (اگه CPU هست، steps کمتر) num_steps = 15 if device == "cpu" else 30 result = pipe( prompt=prompt, image=image, strength=float(strength), guidance_scale=float(guidance), negative_prompt="blurry, low quality, distorted, cartoon, drawing", num_inference_steps=num_steps ).images[0] elapsed = time.time() - start_time print(f"✅ تمام شد در {elapsed:.1f} ثانیه") return result, f"✅ طراحی کامل شد ({elapsed:.1f} ثانیه)" except Exception as e: print(f"❌ خطا: {e}") import traceback traceback.print_exc() return None, f"❌ خطا: {str(e)}" # رابط کاربری with gr.Blocks(title="AI Interior Designer", theme=gr.themes.Soft()) as demo: gr.Markdown("# 🏠 طراحی اتاق با هوش مصنوعی") gr.Markdown(f"⚙️ در حال اجرا روی: **{device.upper()}**") with gr.Row(): with gr.Column(): img_input = gr.Image(type="pil", label="📷 عکس اتاق", height=400) style = gr.Dropdown( choices=list(STYLES.keys()), value="Minimalistic", label="🎨 سبک طراحی" ) with gr.Row(): strength = gr.Slider(0.3, 0.9, value=0.65, step=0.05, label="💪 میزان تغییر") guidance = gr.Slider(5.0, 15.0, value=7.5, step=0.5, label="🎯 دقت به پرامپت") btn = gr.Button("✨ طراحی کن!", variant="primary", size="lg") status = gr.Textbox(label="وضعیت", interactive=False) with gr.Column(): output = gr.Image(label="🖼️ نتیجه طراحی", height=400) btn.click(redesign, [img_input, style, strength, guidance], [output, status]) demo.launch(server_name="0.0.0.0", server_port=7860)