sastelvio's picture
Upload multimodal cervical cancer classifier
3832e65 verified
Raw
History Blame Contribute Delete
2.36 kB
import gradio as gr
import torch
import numpy as np
from PIL import Image
from sklearn.preprocessing import StandardScaler
from transformers import AutoImageProcessor
import json
# Load configuration
with open('config.json') as f:
config = json.load(f)
# Expected features
feature_names = config['feature_columns']
class_names = list(config['class_labels'].values())
# Interface Gradio
with gr.Blocks(title="Cervical Cancer Multimodal Classifier") as demo:
gr.Markdown("""
# 🔬 Cervical Cancer Multimodal Classifier
This model classifies cervical cell samples using both **histopathological images**
and **morphological features**.
Provide both inputs for best results!
""")
with gr.Row():
with gr.Column():
gr.Markdown("### Input Image")
image_input = gr.Image(label="Histopathological Image", type="pil")
with gr.Column():
gr.Markdown("### Morphological Features")
feature_inputs = []
for fname in feature_names[:10]:
feature_inputs.append(
gr.Number(label=fname, value=0.0)
)
gr.Markdown("### More Features")
feature_inputs2 = []
for fname in feature_names[10:]:
feature_inputs2.append(
gr.Number(label=fname, value=0.0)
)
submit_btn = gr.Button("🔍 Classify", variant="primary", size="lg")
with gr.Row():
output_label = gr.Label(label="Prediction", num_top_classes=7)
output_plot = gr.Plot(label="Confidence Distribution")
# Callback funtion (simplified)
def classify(image, *features):
# Load model from Hub
# Make prediction
# Return results
return "normal_superficiel", None
submit_btn.click(
classify,
inputs=[image_input] + feature_inputs + feature_inputs2,
outputs=[output_label, output_plot]
)
gr.Examples(
examples=[
["sample1.BMP", 803.5, 27804.125, 0.028, 85.86, 192.52] + [0]*15,
["sample2.BMP", 610.1, 18067.8, 0.032, 81.53, 153.43] + [0]*15,
],
inputs=[image_input] + feature_inputs + feature_inputs2,
label="Example Inputs"
)
if __name__ == "__main__":
demo.launch()