Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import tensorflow as tf | |
| import numpy as np | |
| from PIL import Image, ImageOps | |
| st.set_page_config( | |
| page_title="MNIST Digit Recognition", | |
| page_icon="🧮" | |
| ) | |
| st.title("🧮 MNIST Digit Recognition") | |
| st.write( | |
| "Upload a handwritten digit image and the model will predict the digit (0-9)." | |
| ) | |
| # Load Model | |
| def load_model(): | |
| model = tf.keras.models.load_model( | |
| "mnist_digit_recognizer.keras" | |
| ) | |
| return model | |
| model = load_model() | |
| uploaded_file = st.file_uploader( | |
| "Upload Digit Image", | |
| type=["png","jpg","jpeg"] | |
| ) | |
| if uploaded_file is not None: | |
| image = Image.open( | |
| uploaded_file | |
| ).convert("L") | |
| # Resize to MNIST size | |
| image = image.resize( | |
| (28,28) | |
| ) | |
| # Invert colors if needed | |
| image = ImageOps.invert( | |
| image | |
| ) | |
| st.image( | |
| image, | |
| caption="Uploaded Image", | |
| width=150 | |
| ) | |
| # Preprocessing | |
| img_array = np.array( | |
| image | |
| ) | |
| img_array = img_array / 255.0 | |
| img_array = img_array.reshape( | |
| 1, | |
| 28, | |
| 28, | |
| 1 | |
| ) | |
| # Prediction | |
| prediction = model.predict( | |
| img_array | |
| ) | |
| digit = np.argmax( | |
| prediction | |
| ) | |
| confidence = np.max( | |
| prediction | |
| ) * 100 | |
| st.success( | |
| f"Predicted Digit: {digit}" | |
| ) | |
| st.info( | |
| f"Confidence: {confidence:.2f}%" | |
| ) | |
| st.write( | |
| "Prediction probabilities:" | |
| ) | |
| for i, probability in enumerate(prediction[0]): | |
| st.write( | |
| f"{i}: {probability*100:.2f}%" | |
| ) |