image-api / README.md
Tantawi65
Deploy to Hugging Face Spaces - clean commit
22a70b4
---
title: SkinAI Diagnostics
emoji: πŸ”¬
colorFrom: blue
colorTo: purple
sdk: docker
app_port: 7860
pinned: false
---
# Skin Cancer Classifier API
SkinAI Diagnostics β€” a FastAPI-powered web application for skin cancer image classification using deep learning.
---
## Overview
This project delivers a professional web interface for classifying dermatoscopic images. It enables users to upload a skin lesion image and obtain a prediction with calibrated confidence scores, alongside links to technical details of the underlying model.
---
## Repository Structure
```
skin-cancer-api/
β”œβ”€β”€ app/
β”‚ β”œβ”€β”€ main.py # FastAPI application entry point
β”‚ β”œβ”€β”€ predict.py # Image preprocessing and prediction logic
β”‚ β”œβ”€β”€ model_loader.py # Loads the trained EfficientNetV2S model
β”‚ β”œβ”€β”€ model/ # Local model storage (auto-downloaded if missing)
β”‚ β”‚ └── efficientnetv2s.h5 # Pretrained model file
β”œβ”€β”€ test_images/ # Sample images for testing the app
β”‚ └── ...
β”œβ”€β”€ requirements.txt # Python dependencies
β”œβ”€β”€ Dockerfile # Docker setup for deployment
β”œβ”€β”€ .dockerignore # Docker ignore rules
└── README.md # Project documentation (this file)
```
---
## Features
- Seven-class classification of dermatoscopic images:
- Actinic Keratoses and Intraepithelial Carcinoma (AKIEC)
- Basal Cell Carcinoma (BCC)
- Benign Keratosis-like Lesions (BKL)
- Dermatofibroma (DF)
- Melanoma (MEL)
- Melanocytic Nevi (NV)
- Vascular Lesions (VASC)
- Professional web interface built with FastAPI and Jinja2
- Temperature Scaling (T-scaling) for calibrated probabilities
- Technical transparency: model architecture, training setup, and metrics
- Confidence visualization with a probability chart
- Sample images available in `test_images/`
---
## Model Details
- Base Model: EfficientNetV2S (20.5 million parameters)
- Dataset: [HAM10000](https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/DBW86T)
- Calibration: Temperature Scaling (optimal T=2.77)
- Performance:
- Accuracy: 0.88
- Macro F1-score: 0.80
- Expected Calibration Error (ECE): 0.022 (after T-scaling)
For full technical details, see the Model Technical Information section in the app.
---
## Model Download from Hugging Face
The model file `efficientnetv2s.h5` is hosted on [Hugging Face Hub](https://huggingface.co/Miguel764/efficientnetv2s-skin-cancer-classifier) and is automatically downloaded the first time the app runs.
How it works:
- Expected local path: `app/model/efficientnetv2s.h5`
- On startup, `app/model_loader.py` checks for the file
- If missing, it is downloaded via `huggingface_hub` and saved to `app/model/`
- Subsequent runs load the local copy
Note for Docker users: When running inside a container, the downloaded model is stored inside the container’s filesystem. Mount a volume if you need to persist it on the host.
Manual download link (optional): https://huggingface.co/Miguel764/efficientnetv2s-skin-cancer-classifier
---
## Installation & Usage
### 1) Clone the repository
```sh
git clone https://github.com/yourusername/skin-cancer-api.git
cd skin-cancer-api
```
### 2) Install dependencies
```sh
pip install -r requirements.txt
```
Note: Requires Python 3.8+ and TensorFlow 2.10.0 (GPU recommended).
### 3) Run the application
```sh
uvicorn app.main:app --reload
```
The app will be available at http://localhost:8000
Access the API docs at http://127.0.0.1:8000/docs
### 4) Try with sample images
Use the images in the `test_images/` folder to test the classifier.
---
## Docker Deployment
Build and run the app in a container:
```sh
docker build -t skin-cancer-api .
docker run -p 8000:8000 skin-cancer-api
```
---