image-api / README.md
Tantawi65
Deploy to Hugging Face Spaces - clean commit
22a70b4
metadata
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
  • 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 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

git clone https://github.com/yourusername/skin-cancer-api.git
cd skin-cancer-api

2) Install dependencies

pip install -r requirements.txt

Note: Requires Python 3.8+ and TensorFlow 2.10.0 (GPU recommended).

3) Run the application

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:

docker build -t skin-cancer-api .
docker run -p 8000:8000 skin-cancer-api