Handwritten digit recognition deployed as a cloud-native application on AWS: a trained neural network served through a web interface, with serverless inference, object storage, a NoSQL results store, and load-balanced traffic — achieving ~90% classification accuracy on MNIST digits.
M.Sc. Data Science coursework (Cloud Computing) — Hochschule Fulda.
flowchart LR
U[User<br/>web interface] --> ELB[Elastic Load Balancer]
ELB --> EC2[EC2 instances<br/>web app]
EC2 --> L[AWS Lambda<br/>model inference]
L --> S3[(S3<br/>images / model artifacts)]
L --> DDB[(DynamoDB<br/>prediction results)]
| Service | Role in this project |
|---|---|
| EC2 | Hosts the web application serving the digit-upload interface |
| Elastic Load Balancer | Distributes incoming traffic across instances |
| Lambda | Runs model inference serverlessly on submitted images |
| S3 | Stores uploaded digit images and/or model artifacts |
| DynamoDB | Persists prediction results / request records |
A neural network trained on the MNIST handwritten digit dataset (~90% test accuracy). Model artifacts (.h5, .pkl) are included in the repository.
- User uploads / draws a digit image in the web interface
- The load balancer routes the request to an EC2-hosted app instance
- The image is passed to the inference function; preprocessing normalizes it to MNIST format (28×28 grayscale)
- The model returns the predicted digit; the result is stored in DynamoDB and returned to the user
- Separation of concerns in the cloud: web serving, compute, storage, and persistence each on the appropriate managed service rather than a single monolithic server
- Serverless inference: pay-per-request model execution without managing inference servers
- Horizontal scalability: load balancing across instances from day one
Python · AWS EC2 · AWS Lambda · S3 · DynamoDB · Elastic Load Balancer · HTML/CSS
Note: this project requires an AWS account to deploy; it is not runnable locally as-is. The repository documents the implementation.