Spaces:
Running
Running
import tensorflow as tf | |
from keras.utils import custom_object_scope | |
import gradio as gr | |
from PIL import Image, ImageDraw | |
import numpy as np | |
# Defina a camada personalizada FixedDropout | |
class FixedDropout(tf.keras.layers.Dropout): | |
def __init__(self, rate, **kwargs): | |
super().__init__(rate, **kwargs) | |
self._rate = rate | |
def call(self, inputs): | |
return tf.nn.dropout(inputs, self._rate) | |
# Registre a camada personalizada FixedDropout com o TensorFlow | |
with custom_object_scope({'FixedDropout': FixedDropout}): | |
# Carregue o modelo | |
loaded_model = tf.keras.models.load_model('modelo_treinado.h5') | |
# Crie uma lista de classes | |
class_names = ["Normal", "Cataract"] | |
# Defina a função de classificação | |
def classify_image(inp): | |
# Redimensione a imagem para o formato esperado pelo modelo (192x256) | |
img = Image.fromarray(inp).resize((256, 192)) | |
# Converta a imagem para um array numpy e normalize-a (escala de 0 a 1) | |
img = np.array(img) / 255.0 | |
# Faça uma previsão usando o modelo treinado | |
prediction = loaded_model.predict(np.expand_dims(img, axis=0)).flatten() | |
# Obtém a classe prevista | |
predicted_class = class_names[np.argmax(prediction)] | |
# Redimensione a imagem de entrada para um tamanho menor (64x64) e aumente a resolução | |
inp = Image.fromarray(inp).resize((64, 64), Image.BICUBIC) | |
return np.array(inp), predicted_class | |
# Crie uma interface Gradio | |
iface = gr.Interface( | |
fn=classify_image, | |
inputs=gr.inputs.Image(shape=(192, 256)), | |
outputs=[gr.outputs.Image(type="numpy"), "label"], | |
) | |
# Inicie a interface Gradio | |
iface.launch(debug=True) | |