File size: 5,263 Bytes
e33f385
 
 
 
 
 
 
 
568788b
e33f385
568788b
e33f385
 
 
568788b
 
 
 
 
 
 
 
 
 
e33f385
 
568788b
e33f385
 
 
 
 
 
 
 
 
 
 
 
 
568788b
e33f385
 
 
568788b
ffcfd9d
e33f385
 
 
 
 
 
 
 
568788b
 
e33f385
 
 
 
 
 
 
 
568788b
ffcfd9d
568788b
e33f385
 
568788b
 
e33f385
 
 
 
568788b
e33f385
 
 
 
 
 
 
 
 
568788b
e33f385
 
 
b98875b
 
e33f385
b98875b
1643fd8
b98875b
 
 
98e7838
b98875b
1643fd8
b98875b
1643fd8
b98875b
1643fd8
b98875b
 
 
e33f385
b98875b
e33f385
b98875b
 
e33f385
 
1643fd8
b98875b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1643fd8
 
e9967f3
b98875b
 
e9967f3
b98875b
e33f385
 
 
568788b
 
e33f385
 
 
568788b
 
 
 
 
 
 
 
 
 
e33f385
 
 
568788b
e33f385
 
 
 
 
 
 
 
 
 
 
568788b
e33f385
ffcfd9d
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import os
import numpy as np
import gradio as gr
import tensorflow as tf
from PIL import Image

# Sabitler
IMAGE_SIZE = 128
MODEL_PATH = "best_model.keras"

# 90 sınıflık hayvan isimleri
class_names = [
    'antelope', 'badger', 'bat', 'bear', 'bee', 'beetle', 'bison', 'boar', 'butterfly', 
    'cat', 'caterpillar', 'chimpanzee', 'cockroach', 'cow', 'coyote', 'crab', 'crow', 
    'deer', 'dog', 'dolphin', 'donkey', 'dragonfly', 'duck', 'eagle', 'elephant', 
    'flamingo', 'fly', 'fox', 'goat', 'goldfish', 'goose', 'gorilla', 'grasshopper', 
    'hamster', 'hare', 'hedgehog', 'hippopotamus', 'hornbill', 'horse', 'hummingbird', 
    'hyena', 'jellyfish', 'kangaroo', 'koala', 'ladybugs', 'leopard', 'lion', 'lizard', 
    'lobster', 'mosquito', 'moth', 'mouse', 'octopus', 'okapi', 'orangutan', 'otter', 
    'owl', 'ox', 'oyster', 'panda', 'parrot', 'pelecaniformes', 'penguin', 'pig', 
    'pigeon', 'porcupine', 'possum', 'raccoon', 'rat', 'reindeer', 'rhinoceros', 
    'sandpiper', 'seahorse', 'seal', 'shark', 'sheep', 'snake', 'sparrow', 'squid', 
    'squirrel', 'starfish', 'swan', 'tiger', 'turkey', 'turtle', 'whale', 'wolf', 
    'wombat', 'woodpecker', 'zebra'
]

# Model yükleyici
def load_model():
    try:
        if os.path.exists(MODEL_PATH):
            model = tf.keras.models.load_model(MODEL_PATH)
            print("Model başarıyla yüklendi!")
            return model
        else:
            print("Model dosyası bulunamadı. Demo modunda çalışılacak.")
            return None
    except Exception as e:
        print(f"Model yüklenirken hata oluştu: {e}")
        return None

# Görüntü işleme
def preprocess_image(img):
    img = img.convert('RGB')
    img = img.resize((IMAGE_SIZE, IMAGE_SIZE))
    img_array = np.array(img) / 255.0
    img_array = np.expand_dims(img_array, axis=0)
    return img_array

# Tahmin fonksiyonu
def predict(img):
    model = load_model()
    
    if model is None:
        import random
        predictions = np.random.rand(len(class_names))
        predictions /= np.sum(predictions)
    else:
        img_array = preprocess_image(img)
        predictions = model.predict(img_array)[0]
    
    top_indices = predictions.argsort()[-3:][::-1]
    top_predictions = predictions[top_indices]
    top_classes = [class_names[i] for i in top_indices]
    
    return {label: float(prob) for label, prob in zip(top_classes, top_predictions)}

# Başlık
title = "🦁 Hayvan Görüntü Sınıflandırıcı"

# Açıklama 
description = """
<div style="text-align: center;">
  <h2>Hayvan Görüntü Sınıflandırma Uygulaması</h2>
  <p>Bu uygulama, derin öğrenme modeli kullanarak hayvan türlerini tanıyabilen bir sınıflandırıcıdır.</p>
  <p>Basitçe bir görüntü yükleyin veya webcam kullanarak fotoğraf çekin, model hangi hayvan olduğunu tahmin edecek!</p>
  <p><strong>Model, 90 farklı hayvan sınıfını</strong> tanıyabilmektedir.</p>
  <hr>
  <p><strong>Nasıl Kullanılır:</strong></p>
  <ol>
    <li>Bir hayvan resmi yükleyin veya webcam ile çekin</li>
    <li>Sonuçları anında görün!</li>
  </ol>
</div>
"""

# CSS 
css = """
.gradio-container {
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    background-color: #181818;
    color: #f0f0f0;
}

input, button, textarea, select {
    background-color: #2a2a2a !important;
    color: #ffffff !important;
    border: 1px solid #444 !important;
}

label, .label, .output_class, .output_label, .upload_box {
    color: #ffffff !important;
}

.gr-image-upload {
    background-color: #2a2a2a !important;
    border: 1px solid #555 !important;
    color: #ffffff !important;
}

.examples {
    background-color: #222;
    border: 1px solid #444;
    border-radius: 10px;
    padding: 15px;
}

h1, h2 {
    color: #ffd700; /* altın sarısı başlıklar */
}

h3 {
    color: #90caf9; /* açık mavi alt başlık */
}

table {
    background-color: #1f1f1f;
    border-collapse: collapse;
}

td {
    padding: 8px 15px;
    background-color: #2a2a2a;
    border: 1px solid #444;
    color: #ffffff;
    border-radius: 4px;
}

.footer {
    margin-top: 30px;
    text-align: center;
    color: #aaa;
    border-top: 1px solid #333;
    padding-top: 20px;
    background-color: #1e1e1e;
}
"""

# Footer
footer = f"""
<div class="footer">
  <p>Bu uygulama TensorFlow ve Gradio kullanılarak geliştirilmiştir.</p>
  <p>Derin öğrenme modeli, hayvan görüntülerinden oluşan kapsamlı bir veri seti üzerinde eğitilmiştir.</p>
  <hr>
  <h3>Tanıyabildiği Hayvan Sınıfları ({len(class_names)})</h3>
  <table style="margin:auto;">
    {"".join([
        "<tr>" + "".join(
            f"<td style='padding:5px 15px;'>• {name}</td>" for name in class_names[i:i+6]
        ) + "</tr>" for i in range(0, len(class_names), 6)
    ])}
  </table>
  <p style="margin-top:20px;">© 2025 Hayvan Sınıflandırıcı</p>
</div>
"""

# Gradio Arayüzü
demo = gr.Interface(
    fn=predict,
    inputs=gr.Image(type="pil", label="Hayvan Görüntüsü Yükle"),
    outputs=gr.Label(num_top_classes=3, label="En İyi 3 Tahmin"),
    title=title,
    description=description,
    article=footer,
    css=css,
    allow_flagging="never"
)

# Başlat
if __name__ == "__main__":
    demo.launch()