import tensorflow as tf from keras.utils import custom_object_scope import gradio as gr from PIL import Image import numpy as np import datetime # 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)] # Obtém a data e hora atual data_hora = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Formate a saída em HTML result_html = f"""
Categoria Predita: {predicted_class}
Data e Hora: {data_hora}
""" return result_html # Crie uma interface Gradio iface = gr.Interface( fn=classify_image, inputs=gr.inputs.Image(shape=(192, 256)), outputs=gr.outputs.HTML(), # Saída formatada com HTML live=True, title="Classificador de Catarata", description="Este é um classificador de imagens médicas para detectar catarata. Faça o upload de uma imagem e clique em 'Classificar' para obter a categoria predita e a data/hora da classificação.", allow_screenshot=False, allow_flagging=False, layout="vertical", capture_session=True, theme="default", ) # Inicie a interface Gradio iface.launch()