File size: 3,606 Bytes
f198920
1b98f74
9dbebec
f198920
9dbebec
13e431f
f198920
4dcd0c4
9aa2989
9dbebec
f198920
 
9dbebec
f198920
9aa2989
f198920
9dbebec
9aa2989
9dbebec
f198920
 
9aa2989
f198920
9aa2989
 
f198920
 
4dcd0c4
1b98f74
c0aad99
9aa2989
f198920
 
 
4dcd0c4
9aa2989
4dcd0c4
9aa2989
f198920
4dcd0c4
9aa2989
 
4dcd0c4
 
f198920
 
 
 
 
 
 
 
9dbebec
f198920
 
4dcd0c4
f198920
 
 
9aa2989
 
f198920
 
9aa2989
 
 
f198920
9dbebec
9aa2989
 
9dbebec
f198920
9aa2989
 
 
f198920
 
 
9aa2989
 
 
 
 
f198920
 
9aa2989
 
f198920
4dcd0c4
 
f198920
 
 
 
 
4dcd0c4
f198920
c0aad99
9aa2989
4dcd0c4
f198920
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import gradio as gr
from PIL import Image
import numpy as np
import random
import json

class UltraLightGeoDemo:
    def __init__(self):
        self.dataset_info = "S2-NAIP Mini Demo - Hafif örnek veri ile"
    
    def predict_coordinates(self, image):
        """Demo tahmin - model yüklemeden"""
        try:
            # Rastgele koordinatlar (demo amaçlı)
            lat = round(random.uniform(36.0, 42.0), 4)  # Türkiye civarı
            lon = round(random.uniform(26.0, 45.0), 4)
            
            confidence = round(random.uniform(0.4, 0.95), 2)
            
            result = {
                'latitude': lat,
                'longitude': lon,
                'confidence': confidence,
                'note': 'DEMO TAHMİN — Gerçek model eğitilmedi',
                'next_step': 'Gerçek mini model eğitimi için Kaggle örneğini kullanın.'
            }
            return result
        except Exception as e:
            return {'error': str(e)}


# Gradio arayüzü
def create_demo_interface():
    demo = UltraLightGeoDemo()
    
    with gr.Blocks(title="🌍 Jeo-Referanslama Mini Demo", theme=gr.themes.Soft()) as interface:
        gr.Markdown("""
        # 🌍 Jeo-Referanslama **Mini DEMO**
        **Ultra Hafif Sürüm - Gerçek model olmadan çalışır**
        
        🔹 Bu versiyon sadece az sayıda veri örneğiyle (mini dataset) test yapılmasını önerir.  
        🔹 Gerçek eğitim için aşağıdaki Kaggle bağlantısını kullanabilirsiniz.
        """)
        
        with gr.Row():
            with gr.Column():
                image_input = gr.Image(
                    type="filepath",
                    label="Uydu Görüntüsü Yükle",
                    height=300
                )
                predict_btn = gr.Button("📍 Demo Tahmin Yap", variant="primary")
            
            with gr.Column():
                output_json = gr.JSON(label="Tahmin Sonuçları")
        
        # Kaggle bağlantısı
        gr.Markdown("""
        ---
        ## 🚀 Gerçek (mini) Model İçin Kaggle'a Git:
        **[👉 KAGGLE'DA MİNİ SİSTEMİ ÇALIŞTIR](https://kaggle.com)**
        
        **Kaggle'da yapman gerekenler:**
        1. Bağlantıya tıkla → "Notebooks" → "New Notebook"
        2. "Settings" sekmesinde **GPU (T4)** seç
        3. Aşağıdaki hafif veri yükleme kodunu çalıştır
        """)
        
        # Kaggle için mini dataset kodu
        with gr.Accordion("📋 Kaggle Mini Eğitim Kodu", open=False):
            gr.Markdown("""
            ```python
            # HAFİF EĞİTİM KODU - 500 örnekle mini test
            !pip install torch torchvision transformers datasets tqdm --quiet

            import torch
            from transformers import AutoModel
            from datasets import load_dataset

            print("🛰️ S2-NAIP mini örnek yükleniyor...")
            dataset = load_dataset("allenai/s2-naip", split="train[:500]")  # sadece 500 örnek
            print(f"Yüklendi: {len(dataset)} örnek")

            device = "cuda" if torch.cuda.is_available() else "cpu"
            model = AutoModel.from_pretrained("facebook/dinov2-small").to(device)

            print("✅ Mini eğitim/deneme için hazır!")
            ```
            """)
        
        predict_btn.click(
            fn=demo.predict_coordinates,
            inputs=image_input,
            outputs=output_json
        )
    
    return interface


if __name__ == "__main__":
    demo = create_demo_interface()
    demo.launch(server_name="0.0.0.0", server_port=7860)