import streamlit as st import numpy as np from PIL import Image import tensorflow as tf # Load the model @st.cache_resource def load_model(): return tf.keras.models.load_model('traffic_classifier.h5') model = load_model() # Class names 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:'Vehicle > 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 vehicle > 3.5 tons' } st.title('Traffic Sign Classifier') uploaded_file = st.file_uploader("Upload a traffic sign image", type=["jpg", "jpeg", "png"]) if uploaded_file is not None: image = Image.open(uploaded_file) st.image(image, caption='Uploaded Image', use_column_width=True) # Preprocess the image image = image.resize((30, 30)) image = image.convert('RGB') # Convert to RGB image = np.array(image) image = image / 255.0 # Normalize pixel values image = np.expand_dims(image, axis=0) # Make prediction pred = model.predict(image) predicted_class = np.argmax(pred, axis=-1)[0] st.write(f"Predicted traffic sign: {classes[predicted_class]}") st.write(f"Confidence: {pred[0][predicted_class]*100:.2f}%") st.write("Note: This application uses a pre-trained model. For best results, upload images that are similar to those used in the training dataset.")