Aya-Ch's picture
commit
e74edb5
raw
history blame contribute delete
1.69 kB
import gradio as gr
from transformers import AutoModelForImageClassification, AutoImageProcessor
import torch
from PIL import Image
# Define model repository
model_name = "Aya-Ch/brain-tumor-classifier"
processor = AutoImageProcessor.from_pretrained(model_name)
model = AutoModelForImageClassification.from_pretrained(model_name)
# Define brain tumor classes
tumor_classes = ['meningioma', 'glioma', 'pituitary tumor']
def predict(image):
try:
# Process the image using the processor
processed_image = processor(images=image, return_tensors="pt")['pixel_values']
with torch.no_grad():
outputs = model(processed_image)
logits = outputs.logits # Get classification scores
probs = torch.nn.functional.softmax(logits, dim=-1)
# Convert tensor outputs to Python numbers
results = {tumor_classes[i]: float(probs[0, i]) for i in range(len(tumor_classes))}
return results
except Exception as e:
return {"Error": f"Failed to process image: {str(e)}"}
# Define example images
examples = [
["examples/meningioma.jpg"],
["examples/glioma.jpg"],
["examples/pituitary_tumor.jpg"]
]
# Gradio Interface with Examples
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type="pil"), # Accepts image input
outputs=gr.Label(label="Tumor Classification"),
title="Brain Tumor Classifier",
description="Upload an MRI scan to classify the type of brain tumor (meningioma, glioma or pituitary tumor)",
allow_flagging="never",
examples=examples # Add preloaded example images
)
# Launch the app
if __name__ == "__main__":
demo.launch()