# sabbirahmed-cys/handwritten-digit-recognition architecture

> Architecture diagram of the GitHub repository sabbirahmed-cys/handwritten-digit-recognition, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sabbirahmed-cys/handwritten-digit-recognition
- Repository: https://github.com/sabbirahmed-cys/handwritten-digit-recognition

## Overview

This repository provides a Streamlit interface for recognizing a handwritten digit and a separate script for training the CNN it uses. The user uploads an image; the app preprocesses it, runs model inference, and displays the predicted digit and class probabilities. Training loads MNIST, prepares datasets, trains and evaluates a CNN, then saves the model consumed by the app. The graph reflects the shown scripts and README; the saved model is present in the tree, but its internals are not shown.

Main entry points: [`Handwritten_Digit_Recognition/app.py`](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py) (Streamlit app), [`Handwritten_Digit_Recognition/train.py`](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py) (CNN training), [`Handwritten_Digit_Recognition/digit_model.keras`](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/digit_model.keras) (Trained CNN)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Recognition interface"]
  node_app["Streamlit app<br/>[app.py]"]
  node_results["Prediction results<br/>[app.py]"]
end

subgraph group_runtime["Inference runtime"]
  node_preprocess["Image preprocessing<br/>[app.py]"]
  node_model["Trained CNN<br/>[digit_model.keras]"]
  node_inference["Digit inference<br/>[app.py]"]
end

subgraph group_training["Model training"]
  node_mnist[("MNIST dataset")]
  node_datasets["Dataset preparation<br/>[train.py]"]
  node_cnn["CNN training<br/>[train.py]"]
  node_evaluation["Test evaluation<br/>[train.py]"]
end

node_user(("Image uploader"))

node_user -->|"uploads image"| node_app
node_app -->|"preprocesses"| node_preprocess
node_app -->|"loads"| node_model
node_app -->|"calls predict"| node_inference
node_inference -->|"runs inference"| node_model
node_inference -->|"returns scores"| node_results
node_mnist -->|"supplies samples"| node_datasets
node_datasets -->|"provides batches"| node_cnn
node_cnn -->|"evaluates on test set"| node_evaluation
node_cnn -->|"saves model"| node_model

click node_app "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py"
click node_preprocess "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py"
click node_model "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/digit_model.keras"
click node_inference "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py"
click node_results "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py"
click node_datasets "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py"
click node_cnn "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py"
click node_evaluation "https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_results toneBlue
class node_preprocess,node_model,node_inference toneAmber
class node_mnist,node_datasets,node_cnn,node_evaluation toneMint
class node_user toneIndigo
```

## Components

### Recognition interface

- [Streamlit app](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py): `Handwritten_Digit_Recognition/app.py`
- [Prediction results](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py): `Handwritten_Digit_Recognition/app.py`

### Inference runtime

- [Image preprocessing](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py): `Handwritten_Digit_Recognition/app.py`
- [Trained CNN](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/digit_model.keras): `Handwritten_Digit_Recognition/digit_model.keras`
- [Digit inference](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/app.py): `Handwritten_Digit_Recognition/app.py`

### Model training

- **MNIST dataset**
- [Dataset preparation](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py): `Handwritten_Digit_Recognition/train.py`
- [CNN training](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py): `Handwritten_Digit_Recognition/train.py`
- [Test evaluation](https://github.com/sabbirahmed-cys/handwritten-digit-recognition/blob/main/Handwritten_Digit_Recognition/train.py): `Handwritten_Digit_Recognition/train.py`

### Other components

- **Image uploader**

## Connections

- Image uploader → Streamlit app: uploads image (evidence: `Handwritten_Digit_Recognition/app.py`)
- Streamlit app → Image preprocessing: preprocesses (evidence: `Handwritten_Digit_Recognition/app.py`)
- Streamlit app → Trained CNN: loads (evidence: `Handwritten_Digit_Recognition/app.py`)
- Streamlit app → Digit inference: calls predict (evidence: `Handwritten_Digit_Recognition/app.py`)
- Digit inference → Trained CNN: runs inference (evidence: `Handwritten_Digit_Recognition/app.py`)
- Digit inference → Prediction results: returns scores (evidence: `Handwritten_Digit_Recognition/app.py`)
- MNIST dataset → Dataset preparation: supplies samples (evidence: `Handwritten_Digit_Recognition/train.py`)
- Dataset preparation → CNN training: provides batches (evidence: `Handwritten_Digit_Recognition/train.py`)
- CNN training → Test evaluation: evaluates on test set (evidence: `Handwritten_Digit_Recognition/train.py`)
- CNN training → Trained CNN: saves model (evidence: `Handwritten_Digit_Recognition/train.py`)
