Metinhsimi's picture
Upload 6 files
637e338 verified
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ı.")