File size: 2,368 Bytes
c01b9d7 f6ef3ed c01b9d7 f6ef3ed c01b9d7 f6ef3ed c01b9d7 f6ef3ed c01b9d7 f6ef3ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
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.") |