|
--- |
|
title: Image Classifier With CNN |
|
emoji: π |
|
colorFrom: red |
|
colorTo: red |
|
sdk: docker |
|
app_port: 8501 |
|
tags: |
|
- streamlit |
|
pinned: true |
|
short_description: A CNN-based image classification with TensorFlow |
|
license: mit |
|
--- |
|
|
|
# πΌοΈ Image Classification with ResNet50 |
|
|
|
## Table of Contents |
|
|
|
1. [Project Description](#1-project-description) |
|
2. [Methodology & Key Features](#2-methodology--key-features) |
|
3. [Technology Stack](#3-technology-stack) |
|
4. [Deployment Options](#4-deployment-options) |
|
5. [Model](#5-model) |
|
|
|
## 1. Project Description |
|
|
|
This project implements an **image classification system** using a pre-trained **ResNet50 CNN** (trained on ImageNet with 1,000+ categories). |
|
|
|
The repository includes **two versions**: |
|
|
|
1. **Full Architecture (local, Dockerized):** |
|
|
|
- Built as a **multi-service ML system** with FastAPI (backend inference), Redis (queue/cache), and Streamlit (frontend). |
|
- Designed to demonstrate a scalable, production-like workflow. |
|
|
|
2. **Lightweight Streamlit App (deployed):** |
|
- Adapted into a **single Streamlit app** for cost-effective deployment on **Hugging Face Spaces**. |
|
- Lets users upload an image and instantly see the **predicted category** with confidence. |
|
|
|
This dual approach allows others to explore both a **realistic ML architecture** and a **lightweight, deployable demo**. |
|
|
|
> [!IMPORTANT] |
|
> |
|
> - Check out the deployed app here: ποΈ [Image Classification App](https://huggingface.co/spaces/iBrokeTheCode/Image_Classifier_with_CNN) ποΈ |
|
> - Check out the source code for multi-service setup: ποΈ [Multi-Service - Source Code](https://huggingface.co/spaces/iBrokeTheCode/Image_Classifier_with_CNN/tree/main) ποΈ |
|
> - Check out the source code for lightweight Streamlit App: ποΈ [Lightweight App - Source Code](https://huggingface.co/spaces/iBrokeTheCode/Image_Classifier_with_CNN/tree/main/src) ποΈ |
|
|
|
 |
|
|
|
## 2. Methodology & Key Features |
|
|
|
- **Model:** ResNet50 (pre-trained on **ImageNet** with 1,000+ classes). |
|
- **Pipeline:** Input images are resized, normalized, and passed to the model. |
|
- **Output:** Top-1 prediction with **confidence score** is displayed. |
|
- **Multi-service architecture:** |
|
- **FastAPI** serves inference requests. |
|
- **Redis** handles caching and task queueing. |
|
- **Streamlit** provides the interactive UI. |
|
- **Lightweight deployment:** Direct **Streamlit-only** version for Hugging Face Spaces. |
|
|
|
## 3. Technology Stack |
|
|
|
This project was built using the following technologies: |
|
|
|
**Deployment & Hosting:** |
|
|
|
- [Docker](https://www.docker.com/) β containerization for the full architecture. |
|
- [Hugging Face Spaces](https://huggingface.co/docs/hub/spaces) β for lightweight deployment. |
|
- [Streamlit](https://streamlit.io/) β interactive web app frontend. |
|
|
|
**Backend & Infrastructure:** |
|
|
|
- [FastAPI](https://fastapi.tiangolo.com/) β high-performance inference API. |
|
- [Redis](https://redis.io/) β caching and message queue. |
|
|
|
**Modeling & Training:** |
|
|
|
- [TensorFlow / Keras](https://www.tensorflow.org/) β ResNet50 model (pre-trained on ImageNet). |
|
|
|
**Development Tools:** |
|
|
|
- [Ruff](https://github.com/charliermarsh/ruff) β Python linter and formatter. |
|
- [uv](https://github.com/astral-sh/uv) β fast Python package installer and resolver. |
|
|
|
## 4. Deployment Options |
|
|
|
You can run this project in two ways: |
|
|
|
### A. Run the Lightweight Version (Streamlit-only) |
|
|
|
1. Clone the repo: |
|
|
|
```bash |
|
git clone https://huggingface.co/spaces/iBrokeTheCode/Image_Classifier_with_CNN |
|
|
|
cd Image_Classifier_with_CNN |
|
``` |
|
|
|
2. Install dependencies: |
|
|
|
```bash |
|
pip install -r requirements.txt |
|
``` |
|
|
|
3. Run the app: |
|
|
|
```bash |
|
streamlit run src/streamlit_app.py |
|
``` |
|
|
|
### B. Run the Full Architecture (Dockerized) |
|
|
|
The repository also contains **Dockerfiles** for each service. |
|
|
|
1. Clone the repo: |
|
|
|
```bash |
|
git clone https://huggingface.co/spaces/iBrokeTheCode/Image_Classifier_with_CNN |
|
|
|
cd Image_Classifier_with_CNN |
|
``` |
|
|
|
2. Pre-configure your environment variables: |
|
|
|
```bash |
|
cp .env.original .env |
|
``` |
|
|
|
3. Create a network for containers |
|
|
|
```bash |
|
docker network create shared_network |
|
``` |
|
|
|
4. Build and start all services: |
|
|
|
```bash |
|
docker compose up --build -d |
|
|
|
# Stop services |
|
docker compose down |
|
``` |
|
|
|
5. Populate the database |
|
|
|
```bash |
|
cd api |
|
cp .env.original .env |
|
docker-compose up --build -d |
|
``` |
|
|
|
6. Access the app at: |
|
|
|
``` |
|
http://localhost:9090 |
|
``` |
|
|
|
Then use this credentials to pass the login: |
|
|
|
- Username: admin@example.com |
|
- Password: admin |
|
|
|
7. Access the FastAPI app at: |
|
|
|
``` |
|
http://localhost:8000/docs |
|
``` |
|
|
|
## 5. Model |
|
|
|
This project uses the pre-training model ResNet50. |
|
|
|
- **Model:** [ResNet50](https://www.tensorflow.org/api_docs/python/tf/keras/applications/ResNet50) |
|
- **Classes:** 1,000+ categories (objects, animals, everyday items). |
|
|