CoolFace
Apppublic

Vaishnavi-R/Multi-Class-Skin-Cancer-Classification

sourceHugging Faceupdated 9mo agoView on Hugging Face
1likes
app.py108 linesDownload Raw Back to root
1import os2os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"3os.environ["HF_HUB_DISABLE_TELEMETRY"] = "1"4 5import gradio as gr6import numpy as np7import tensorflow as tf8from PIL import Image9from tensorflow.keras.models import Sequential10from tensorflow.keras.layers import (11    Conv2D, MaxPooling2D, Dense,12    Flatten, Dropout, BatchNormalization13)14 15# -------- MODEL ARCHITECTURE (EXACT MATCH) --------16def model_function():17    model = Sequential([18        tf.keras.layers.Input(shape=(28, 28, 3)),19 20        Conv2D(32, (3, 3), activation='relu', padding='same'),21        MaxPooling2D((2, 2)),22        BatchNormalization(),23 24        Conv2D(64, (3, 3), activation='relu', padding='same'),25        Conv2D(64, (3, 3), activation='relu', padding='same'),26        MaxPooling2D((2, 2)),27        BatchNormalization(),28 29        Conv2D(128, (3, 3), activation='relu', padding='same'),30        Conv2D(128, (3, 3), activation='relu', padding='same'),31        MaxPooling2D((2, 2)),32        BatchNormalization(),33 34        Conv2D(256, (3, 3), activation='relu', padding='same'),35        Conv2D(256, (3, 3), activation='relu', padding='same'),36        MaxPooling2D((2, 2)),37 38        Flatten(),39        Dropout(0.2),40 41        Dense(128, activation='relu'),42        BatchNormalization(),43 44        Dense(64, activation='relu'),45        BatchNormalization(),46 47        Dense(32, activation='relu'),48        BatchNormalization(),49 50        Dense(7, activation='softmax')51    ])52    return model53 54 55# -------- LOAD WEIGHTS (IMPORTANT) --------56model = model_function()57model.load_weights("skin_cancer_deploy.keras")58 59# -------- CLASS NAMES --------60class_names = [61    "Actinic Keratosis",62    "Basal Cell Carcinoma",63    "Benign Keratosis",64    "Dermatofibroma",65    "Melanoma",66    "Melanocytic Nevus",67    "Vascular Lesion"68]69 70# -------- IMAGE PREPROCESS --------71def preprocess_image(image):72    image = image.convert("RGB")73    image = image.resize((28, 28))74    image = np.array(image) / 255.075    return np.expand_dims(image, axis=0)76 77# -------- PREDICTION FUNCTION --------78def classify(image):79    img = preprocess_image(image)80    preds = model.predict(img)[0]81    idx = np.argmax(preds)82 83    return (84        {class_names[i]: float(preds[i]) for i in range(len(class_names))},85        f"Prediction: {class_names[idx]} (Confidence: {preds[idx]*100:.2f}%)"86    )87 88# -------- GRADIO APP ---------89demo = gr.Interface(90    fn=classify,91    inputs=gr.Image(type="pil", label="Upload Dermoscopic Image"),92    outputs=[93        gr.Label(num_top_classes=7, label="Prediction Probabilities"),94        gr.Textbox(label="Final Result")95    ],96    title="Multi-Class Skin Cancer Prediction",97    description="Upload a skin lesion image and get prediction & confidence from CNN model.",98    examples=[['examples/0.jpg'],99              ['examples/1.jpg']]100)101demo.launch(102    ssr_mode=False,103    server_name="0.0.0.0",104    server_port=7860105)106 107 108