arifa-batool's picture
End-to-end MNIST handwritten digit recognition using a CNN, with a Flask web app featuring real-time canvas-based predictions.
f7da636 verified
document.addEventListener("DOMContentLoaded", () => {
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
function resetCanvas() {
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
resetCanvas();
ctx.strokeStyle = "white";
ctx.lineWidth = 20;
ctx.lineCap = "round";
let drawing = false;
canvas.addEventListener("mousedown", (e) => {
drawing = true;
ctx.beginPath();
ctx.moveTo(e.offsetX, e.offsetY);
});
canvas.addEventListener("mousemove", (e) => {
if (!drawing) return;
ctx.lineTo(e.offsetX, e.offsetY);
ctx.stroke();
});
canvas.addEventListener("mouseup", () => drawing = false);
canvas.addEventListener("mouseleave", () => drawing = false);
document.getElementById("clear-btn").addEventListener("click", () => {
resetCanvas();
document.getElementById("predicted-digit").innerText = "–";
});
document.getElementById("predict-btn").addEventListener("click", () => {
const dataURL = canvas.toDataURL("image/png");
fetch("/predict", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: "canvas_data=" + encodeURIComponent(dataURL)
})
.then(res => res.json())
.then(data => {
document.getElementById("predicted-digit").innerText =
`${data.digit}`;
});
});
});