|
|
import gradio as gr |
|
|
import tensorflow as tf |
|
|
from PIL import Image |
|
|
import keras |
|
|
import numpy as np |
|
|
|
|
|
from transformers import TFAutoModel, AutoImageProcessor |
|
|
|
|
|
backbone = TFAutoModel.from_pretrained("facebook/deit-tiny-patch16-224") |
|
|
|
|
|
def transpose_channels(x): |
|
|
return tf.transpose(x, [0, 3, 1, 2]) |
|
|
|
|
|
def deit_forward(x): |
|
|
return backbone(pixel_values=x).last_hidden_state[:, 0, :] |
|
|
|
|
|
model = keras.models.load_model( |
|
|
"model.keras", |
|
|
custom_objects={ |
|
|
"transpose_channels": transpose_channels, |
|
|
"deit_forward": deit_forward |
|
|
}, |
|
|
safe_mode=False |
|
|
) |
|
|
|
|
|
|
|
|
labels = ['glioma', 'meningioma', 'notumor', 'pituitary'] |
|
|
|
|
|
|
|
|
processor = AutoImageProcessor.from_pretrained("facebook/deit-tiny-patch16-224") |
|
|
|
|
|
def predict(image): |
|
|
|
|
|
inputs = processor(images=image, return_tensors="np") |
|
|
pixel_values = inputs["pixel_values"][0] |
|
|
|
|
|
pixel_values = np.transpose(pixel_values, (1, 2, 0)) |
|
|
pixel_values = np.expand_dims(pixel_values, axis=0).astype(np.float32) |
|
|
|
|
|
preds = model.predict(pixel_values)[0] |
|
|
return {labels[i]: float(preds[i]) for i in range(len(labels))} |
|
|
|
|
|
interface = gr.Interface( |
|
|
fn=predict, |
|
|
inputs=gr.Image(type="pil", label="Sube una imagen"), |
|
|
outputs=gr.Label(num_top_classes=4, label="Predicción"), |
|
|
title="Clasificador de Tumores Cerebrales", |
|
|
description="Clasificador entrenado en 4 categorías: pituitary, meningioma, notumor, glioma" |
|
|
) |
|
|
|
|
|
interface.launch() |