DL_TA / app.py
Krlos02's picture
Update app.py
618ecdd verified
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
)
# Clases
labels = ['glioma', 'meningioma', 'notumor', 'pituitary']
# Preprocesamiento (ajustado al modelo Deit-Tiny 224x224)
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] # (3, 224, 224)
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()