Vaishnavi-R/Multi-Class-Skin-Cancer-Classification
1
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 