import streamlit as st from tensorflow.keras.models import load_model from PIL import Image import numpy as np import os import cv2 from streamlit_webrtc import VideoTransformerBase, webrtc_streamer # Model dosyasının yolu model_path = 'german.h5' # Modeli yükleme if os.path.isfile(model_path): try: model = load_model(model_path) st.write("Model başarıyla yüklendi.") except Exception as e: st.error(f"Model yüklenirken bir hata oluştu: {e}") else: st.error(f"Model dosyası bulunamadı: {model_path}") def process_img(img): img = img.convert('RGB') # RGBA'dan RGB'ye dönüştürme img = img.resize((32, 32), Image.LANCZOS) # 32x32 piksel boyutuna dönüştürme img = np.array(img) / 255.0 # Normalize etme img = np.expand_dims(img, axis=0) # Resme boyut ekleme return img class VideoTransformer(VideoTransformerBase): def __init__(self): self.model = model self.latest_frame = None def transform(self, frame): img = frame.to_ndarray(format="bgr24") self.latest_frame = img return img def get_latest_frame(self): if self.latest_frame is not None: return Image.fromarray(cv2.cvtColor(self.latest_frame, cv2.COLOR_BGR2RGB)) return None st.title("Almanya Trafik İşaretleri Sınıflandırması / German Traffic Sign Classification :traffic_light:") st.write('Kamera kullanarak modelimizi trafik işaretinizi sınıflandırsın.\nUse the camera to predict your traffic sign.') # WebRTC video akışını başlatma video_transformer = webrtc_streamer(key="example", video_transformer_factory=VideoTransformer) # Fotoğraf çekme butonu if st.button("Fotoğraf Çek"): if video_transformer.video_transformer: frame = video_transformer.video_transformer.get_latest_frame() if frame is not None: st.image(frame, caption="Çekilen Resim", use_column_width=True) img = process_img(frame) prediction = model.predict(img) prediction_class = np.argmax(prediction) # Sınıf isimleri classes = { 0: 'Speed limit (20km/h)', 1: 'Speed limit (30km/h)', 2: 'Speed limit (50km/h)', 3: 'Speed limit (60km/h)', 4: 'Speed limit (70km/h)', 5: 'Speed limit (80km/h)', 6: 'End of speed limit (80km/h)', 7: 'Speed limit (100km/h)', 8: 'Speed limit (120km/h)', 9: 'No passing', 10: 'No passing veh over 3.5 tons', 11: 'Right-of-way at intersection', 12: 'Priority road', 13: 'Yield', 14: 'Stop', 15: 'No vehicles', 16: 'Veh > 3.5 tons prohibited', 17: 'No entry', 18: 'General caution', 19: 'Dangerous curve left', 20: 'Dangerous curve right', 21: 'Double curve', 22: 'Bumpy road', 23: 'Slippery road', 24: 'Road narrows on the right', 25: 'Road work', 26: 'Traffic signals', 27: 'Pedestrians', 28: 'Children crossing', 29: 'Bicycles crossing', 30: 'Beware of ice/snow', 31: 'Wild animals crossing', 32: 'End speed + passing limits', 33: 'Turn right ahead', 34: 'Turn left ahead', 35: 'Ahead only', 36: 'Go straight or right', 37: 'Go straight or left', 38: 'Keep right', 39: 'Keep left', 40: 'Roundabout mandatory', 41: 'End of no passing', 42: 'End no passing veh > 3.5 tons' } st.write("Sonuç: ", classes[prediction_class]) else: st.error("Kamera görüntüsü alınamadı.") else: st.error("Kamera başlatılmadı.")