# --- 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]}**")