import gradio as gr import torch import numpy as np import random import os from PIL import Image from model import PretrainedUNet from dataset import LEVIRCDDataset from inference import load_model, run_inference, create_overlay from utils import setup_dataset # Configuration MODEL_PATH = "levid-cd-15.09_weights.pth" DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') # Initialize print(f"Using device: {DEVICE}") # Setup dataset dataset_path = setup_dataset() if dataset_path is None: raise Exception("Failed to setup dataset") # Load dataset dataset = LEVIRCDDataset(dataset_path) if len(dataset) == 0: raise Exception("No valid images found in dataset") # Load model try: model = load_model(MODEL_PATH, DEVICE) print("Model loaded successfully!") except Exception as e: print(f"Error loading model: {e}") model = None def get_random_prediction(): """Get random image and run prediction""" if model is None: return None, None, None, None if len(dataset) == 0: return None, None, None, None # Get random sample idx = random.randint(0, len(dataset) - 1) sample = dataset.get_sample(idx) # Run inference pred_mask = run_inference( model, sample['img_a_tensor'], sample['img_b_tensor'], DEVICE ) # Create visualizations img_before = sample['img_a_orig'] img_after = sample['img_b_orig'] # Ground truth overlay (red) - FIX THIS PART img_gt = create_overlay( sample['img_b_orig'], sample['mask_orig'], [255, 100, 100], threshold=0.5 # Changed from 128 to 0.5 ) # Prediction overlay (blue) img_pred = create_overlay( sample['img_b_orig'], pred_mask, [100, 100, 255], threshold=0.5 ) return img_before, img_after, img_gt, img_pred # Create Gradio interface with gr.Blocks(title="Yapılaşma Değişim Tespiti", theme=gr.themes.Soft()) as demo: gr.Markdown(""" # 🏗️ Yapay Zeka Yardımıyla Yapılaşmadaki Değişimlerin İzlenmesi ### 📖 Uygulama Hakkında Bu yapay zekâ modeli, Amerika Birleşik Devletleri'nin **Texas eyaletinde, Austin şehrine ait uydu görüntüleri** kullanılarak eğitilmiştir. Gösterilen tüm tahminler bu bölgeye aittir. Sistem iki farklı sonucu karşılaştırmalı olarak sunar: - **İnsan eliyle işaretlenmiş gerçek veriler** (Kırmızı renk ile gösterilir) - **Yapay zekâ tarafından otomatik üretilen tahminler** (Mavi renk ile gösterilir) """) # Random button with gr.Row(): btn = gr.Button( "🎲 Rastgele Görsel Göster", variant="primary", scale=1 ) # Image grid - 2x2 layout with gr.Row(): with gr.Column(): img_before = gr.Image( label="📅 Önceki Görüntü", type="pil", height=300 ) with gr.Column(): img_after = gr.Image( label="📅 Sonraki Görüntü", type="pil", height=300 ) with gr.Row(): with gr.Column(): img_gt = gr.Image( label="👤 İnsan Eliyle İşaretlenmiş", type="pil", height=300 ) with gr.Column(): img_pred = gr.Image( label="🤖 Yapay Zekâ Tahmini", type="pil", height=300 ) # Info footer gr.Markdown(""" --- **Kaynak kodlara "Files" dosyası üzerinden ulaşabilirsiniz.. """) # Connect button btn.click( fn=get_random_prediction, inputs=None, outputs=[img_before, img_after, img_gt, img_pred] ) # Load initial image on startup demo.load( fn=get_random_prediction, inputs=None, outputs=[img_before, img_after, img_gt, img_pred] ) if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)