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