Spaces:
Sleeping
Sleeping
from tensorflow.keras.preprocessing.image import ImageDataGenerator | |
from tensorflow.keras.applications import MobileNetV2 | |
from tensorflow.keras import layers, models | |
import tensorflow as tf | |
labels = ['Actinic Keratosis', 'Atopic Dermatitis', 'Benign Keratosis', | |
'Dermatofibroma', 'Melanocytic nevus', 'Melanoma', | |
'Squamous cell carcinoma', 'Tinea Ringworm candidiasis', | |
'Vascular lesion'] | |
# Image data generator with augmentation | |
train_datagen = ImageDataGenerator( | |
rescale=1.0/255, | |
rotation_range=20, | |
width_shift_range=0.2, | |
height_shift_range=0.2, | |
shear_range=0.2, | |
zoom_range=0.2, | |
horizontal_flip=True, | |
fill_mode='nearest' | |
) | |
test_datagen = ImageDataGenerator(rescale=1.0/255) | |
train_generator = train_datagen.flow_from_directory( | |
'train', | |
target_size=(150, 150), | |
batch_size=32, | |
class_mode='categorical' | |
) | |
validation_generator = test_datagen.flow_from_directory( | |
'val', | |
target_size=(150, 150), | |
batch_size=32, | |
class_mode='categorical' | |
) | |
# Model architecture | |
base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(150, 150, 3)) | |
base_model.trainable = False # Freeze the base model | |
model = tf.keras.models.Sequential([ | |
base_model, | |
layers.GlobalAveragePooling2D(), | |
layers.Dense(1024, activation='relu'), | |
layers.Dense(len(labels), activation='softmax') | |
]) | |
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) | |
# Training | |
history = model.fit( | |
train_generator, | |
steps_per_epoch=train_generator.samples // 32, | |
validation_data=validation_generator, | |
validation_steps=validation_generator.samples // 32, | |
epochs=20 | |
) | |
# Save the model | |
model.save('skin_disease_model.h5') | |
import gradio as gr | |
import numpy as np | |
import tensorflow as tf | |
# Load your trained model | |
model = tf.keras.models.load_model('skin_disease_model.h5') # Update with your model path | |
# Class labels | |
labels = ['Actinic Keratosis', 'Atopic Dermatitis', 'Benign Keratosis', | |
'Dermatofibroma', 'Melanocytic nevus', 'Melanoma', | |
'Squamous cell carcinoma', 'Tinea Ringworm candidiasis', | |
'Vascular lesion'] | |
# Gradio function for prediction | |
def predict_skin_disease(img): | |
try: | |
# Preprocess the image | |
img = np.array(img) / 255.0 # Normalize | |
img = tf.image.resize(img, (150, 150)) # Resize to match model input | |
img = np.expand_dims(img, axis=0) # Add batch dimension | |
# Make prediction using the model | |
prediction = model.predict(img) | |
# Convert prediction to a dictionary of class labels and probabilities | |
return {labels[i]: float(prediction[0][i]) for i in range(len(labels))} | |
except Exception as e: | |
return f"Error: {str(e)}" | |
# Gradio Interface | |
gr_interface = gr.Interface( | |
fn=predict_skin_disease, | |
inputs=gr.Image(type="numpy", label="Upload an Image of Skin Lesion"), | |
outputs=gr.Label(num_top_classes=3), # Display top 3 predictions | |
title="Skin Disease Classification", | |
description="Upload an image of a skin lesion to classify it into various skin diseases." | |
) | |
# Launch the Gradio interface | |
gr_interface.launch() |