Skip to content
Handwritten Digit Recognition with MLOps

02 — Work

Handwritten Digit Recognition with MLOps

2025Solo Developer - Full Stack ML Engineer
MLOpsCNNDocker

Project Overview

Production-grade machine learning system that can accurately recognize handwritten digits in real-world conditions with 98.63% accuracy. Built using 21,000+ European handwritten digit images.

Project Details

Timeline
Sep 2025 — Oct 2025
Role
Solo Developer - Full Stack ML Engineer
Team
Solo

Challenge

The challenge wasn't just building a model that could hit 90% accuracy. It was engineering a robust preprocessing pipeline to turn those 21,000+ images into an MNIST-lookalike dataset, then deploying it properly with FastAPI, Docker, and a clean web interface.

Approach

Data Engineering: Designed a 5-step preprocessing pipeline (grayscale → LANCZOS resize to 28x28 → color inversion → normalization) that transforms raw images into MNIST format.
Model Architecture: Built a 3-layer CNN with batch normalization, dropout regularization, and strategic callbacks (EarlyStopping, ReduceLROnPlateau, ModelCheckpoint).

Backend Development: Implemented FastAPI with dependency injection for model loading, Pydantic for request/response validation, environment-based configuration (dev/prod/test modes), and structured error handling.

Key Results

  • 98.63% test accuracy
  • <100ms inference
  • Zero train-test mismatch

Technologies Used

  • Python
  • TensorFlow/Keras
  • FastAPI
  • Docker
  • JavaScript

View & Demo

Key Features

3-layer CNN with batch normalization and dropout

FastAPI REST API with dependency injection

Docker containerized deployment

Interactive web interface for digit drawing

Pydantic validation for robust input handling

Gallery

Image

Handwritten Digit Recognition with MLOps — image 1

Image

Handwritten Digit Recognition with MLOps — image 2

Image

Handwritten Digit Recognition with MLOps — image 3

Image

Handwritten Digit Recognition with MLOps — image 4

Image

Handwritten Digit Recognition with MLOps — image 5

Dirick.J3R — 2025