import streamlit as st from streamlit_drawable_canvas import st_canvas from keras.models import load_model import numpy as np import cv2 st.set_page_config( page_title="Digit Recognizer", layout="centered", initial_sidebar_state="expanded" ) st.markdown(""" """, unsafe_allow_html=True) st.sidebar.title("🖌️ Drawing Settings") drawing_mode = st.sidebar.selectbox("Drawing tool:", ("freedraw", "line")) stroke_width = st.sidebar.slider("Stroke width", 1, 25, 10) stroke_color = st.sidebar.color_picker("Stroke color", "#000000") bg_color = st.sidebar.color_picker("Canvas background", "#FFFFFF") bg_image = st.sidebar.file_uploader("Upload background image", type=["png", "jpg"]) realtime_update = st.sidebar.checkbox("Update in realtime", True) @st.cache_resource def load_mnist_model(): return load_model("Handwritten_digit.keras") model = load_mnist_model() st.markdown("
Draw a digit (0–9) and let the ANN model predict it!
", unsafe_allow_html=True) st.markdown("🖍️ Tip: Use a high stroke width for better prediction accuracy.
", unsafe_allow_html=True) st.markdown("", unsafe_allow_html=True) # -------- Canvas Drawing -------- canvas_result = st_canvas( fill_color="rgba(173, 216, 230, 0.3)", stroke_width=stroke_width, stroke_color=stroke_color, background_color=bg_color, update_streamlit=realtime_update, height=200, width=200, drawing_mode=drawing_mode, key="canvas", ) st.markdown("", unsafe_allow_html=True) # -------- Prediction Logic -------- if canvas_result.image_data is not None: st.image(canvas_result.image_data, caption="Your Drawing", width=150) img = cv2.cvtColor(canvas_result.image_data.astype("uint8"), cv2.COLOR_RGBA2GRAY) img = 255 - img img_resized = cv2.resize(img, (28, 28)) img_normalized = img_resized / 255.0 img_reshaped = img_normalized.reshape((1, 28, 28)) prediction = model.predict(img_reshaped) predicted_digit = np.argmax(prediction) st.markdown(f"