German_Traffic / src /streamlit_app.py
zaidasim232's picture
Update src/streamlit_app.py
7e9be78 verified
Raw
History Blame Contribute Delete
3.59 kB
# --- KERAS SÜRÜM UYUMSUZLUĞU YAMASI ---
# Keras'ın eski sürümündeki Dense katmanına 'quantization_config' parametresini yok saymasını söylüyoruz.
import keras
if hasattr(keras.layers, 'Dense'):
original_init = keras.layers.Dense.__init__
def patched_init(self, *args, **kwargs):
kwargs.pop('quantization_config', None) # Eğer varsa bu parametreyi sil
original_init(self, *args, **kwargs)
keras.layers.Dense.__init__ = patched_init
# --------------------------------------
import streamlit as st
from tensorflow.keras.models import load_model
from PIL import Image
import numpy as np
from keras.models import load_model
import os
# Modeli yükle
# streamlit_app.py dosyasının bulunduğu klasörün yolunu alır
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
MODEL_PATH = os.path.join(BASE_DIR, 'german_trafic_model_en_son.keras')
model = load_model(MODEL_PATH)
def process_image(img):
# Resmi RGB formatına zorla (PNG'lerdeki şeffaflık kanalı hatasını önler)
img = img.convert('RGB')
img = img.resize((64, 64))
img = np.array(img)
img = img / 255.0
img = np.expand_dims(img, axis=0)
return img
st.title('Alman Trafiği Sınıflandırma :')
st.write('Bir resim yükleyin, modelin hangi sınıfa ait olduğunu tahmin etmesini sağlayın!')
file = st.file_uploader('Bir resim yükle', type=['jpg', 'jpeg', 'png'])
if file is not None:
img = Image.open(file)
st.image(img, caption='Yüklenen Resim', use_container_width=True)
image = process_image(img)
prediction = model.predict(image)[0]
predicted_class_index = np.argmax(prediction)
print(predicted_class_index)
# GTSRB Sınıf İsimleri (0 - 42)
class_names = {
0: "Hız Sınırı (20 km/s)",
1: "Hız Sınırı (30 km/s)",
2: "Hız Sınırı (50 km/s)",
3: "Hız Sınırı (60 km/s)",
4: "Hız Sınırı (70 km/s)",
5: "Hız Sınırı (80 km/s)",
6: "Hız Sınırı Sonu (80 km/s)",
7: "Hız Sınırı (100 km/s)",
8: "Hız Sınırı (120 km/s)",
9: "Geçme Yasağı (Otomobiller)",
10: "3.5 Ton Üzeri Araçlar İçin Geçme Yasağı",
11: "Tali Yol - Ana Yol Kavşağı",
12: "Anayol",
13: "Yol Ver",
14: "DUR (Stop)",
15: "Taşıt Trafiğine Kapalı Yol",
16: "3.5 Ton Üzeri Kamyon Giremez",
17: "Girişi Olmayan Yol (Yasak Yol)",
18: "Tehlike",
19: "Sola Tehlikeli Viraj",
20: "Sağa Tehlikeli Viraj",
21: "Tehlikeli Virajlar (İlki Sola)",
22: "Kasıslı Yol (Engebeli Yol)",
23: "Kaygan Yol",
24: "Sağdan Daralan Yol",
25: "Yol Çalışması",
26: "Trafik Işıkları",
27: "Yaya Geçidi",
28: "Okul Geçidi",
29: "Bisiklet Geçebilir",
30: "Buzlanma / Kar Tehlikesi",
31: "Vahşi Hayvan Geçebilir",
32: "Tüm Hız ve Geçme Yasaklarının Sonu",
33: "Sağa Mecburi Yön",
34: "Sola Mecburi Yön",
35: "İleri Mecburi Yön",
36: "İleri ve Sağa Mecburi Yön",
37: "İleri ve Sola Mecburi Yön",
38: "Sağdan Geçiniz",
39: "Soldan Geçiniz",
40: "Ada Etrafında Dönünüz (Dönel Kavşak)",
41: "Geçme Yasağı Sonu",
42: "3.5 Ton Üzeri Araçlar İçin Geçme Yasağı Sonu",
}
# 3. Bulduğumuz indeksi liste olarak değil, direkt sayı olarak gönderiyoruz
st.write(f"Tahmin Edilen Sınıf: **{class_names[predicted_class_index]}**")