Spaces:
Sleeping
Sleeping
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}`; | |
| }); | |
| }); | |
| }); | |