Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import numpy as np | |
| import tensorflow as tf | |
| from tensorflow.keras.models import load_model | |
| import cv2 | |
| from PIL import Image, ImageOps | |
| # Load the trained model | |
| model = load_model('digit_recognizer_model.h5') | |
| # Streamlit app title | |
| st.title("Handwritten Digit Recognizer") | |
| # Instructions | |
| st.write("Draw a digit below and click 'Predict' to see the model's prediction.") | |
| # Create a canvas component | |
| from streamlit_drawable_canvas import st_canvas | |
| # Set up the canvas | |
| canvas_result = st_canvas( | |
| fill_color="black", # Drawing background color | |
| stroke_width=10, | |
| stroke_color="white", | |
| background_color="black", | |
| height=280, | |
| width=280, | |
| drawing_mode="freedraw", | |
| key="canvas", | |
| ) | |
| # Predict button | |
| if st.button('Predict'): | |
| if canvas_result.image_data is None: | |
| st.write("Please draw a digit first!") | |
| else: | |
| # Convert the canvas image to grayscale | |
| img = cv2.cvtColor(canvas_result.image_data.astype('uint8'), cv2.COLOR_BGR2GRAY) | |
| # Resize to 28x28 pixels, the input size for the model | |
| img_resized = cv2.resize(img, (28, 28)) | |
| # Invert the image (white background, black digit) | |
| img_resized = cv2.bitwise_not(img_resized) | |
| # Normalize the image | |
| img_resized = img_resized / 255.0 | |
| # Reshape for the model: (1, 28, 28, 1) | |
| img_resized = img_resized.reshape(1, 28, 28, 1) | |
| # Predict the digit | |
| prediction = model.predict(img_resized) | |
| predicted_digit = np.argmax(prediction) | |
| # Display the prediction | |
| st.write(f"Predicted Digit: {predicted_digit}") | |
| # Clear button | |
| if st.button('Clear'): | |
| st.experimental_rerun() | |