| | 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() |