Spaces:
Sleeping
Sleeping
| 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ı.") |