import gradio as gr import tensorflow as tf import numpy as np from PIL import Image, ImageDraw, ImageFont # Defina a camada personalizada FixedDropout class FixedDropout(tf.keras.layers.Dropout): def _get_noise_shape(self, inputs): if self.noise_shape is None: return self.noise_shape symbolic_shape = tf.shape(inputs) noise_shape = [symbolic_shape[axis] if shape is None else shape for axis, shape in enumerate(self.noise_shape)] return tuple(noise_shape) # Registre a camada personalizada FixedDropout tf.keras.utils.get_custom_objects()['FixedDropout'] = FixedDropout # Carregue seu modelo TensorFlow treinado model = tf.keras.models.load_model('modelo_treinado.h5') # Defina uma função para fazer previsões def classify_image(input_image): # Redimensione a imagem para as dimensões corretas (192x256) input_image = tf.image.resize(input_image, (192, 256)) # Redimensione para as dimensões esperadas input_image = (input_image / 255.0) # Normalize para [0, 1] input_image = np.expand_dims(input_image, axis=0) # Adicione a dimensão de lote # Faça a previsão usando o modelo prediction = model.predict(input_image) # Assumindo que o modelo retorna probabilidades para duas classes, você pode retornar a classe com a maior probabilidade class_index = np.argmax(prediction) class_labels = ["Normal", "Cataract"] # Substitua pelas suas etiquetas de classe reais predicted_class = class_labels[class_index] # Retorne a classe prevista e as probabilidades das classes class_probabilities = {class_labels[i]: round(float(prediction[0][i]), 4) for i in range(len(class_labels))} # Crie uma imagem composta com o rótulo de previsão output_image = Image.fromarray((input_image[0] * 255).astype('uint8')) draw = ImageDraw.Draw(output_image) font = ImageFont.load_default() label_text = f"Predicted Class: {predicted_class}" draw.text((10, 10), label_text, (255, 0, 0), font=font) return input_image[0], output_image, class_probabilities # Crie uma interface Gradio input_interface = gr.Interface( fn=classify_image, inputs="image", # Especifique o tipo de entrada como "image" outputs=["image", "image", "text"], # Especifique três tipos de saída: imagem de entrada, imagem de saída e texto output_labels=["Input Image", "Output Image", "Class Probabilities"] # Rotule as saídas ) # Inicie o aplicativo Gradio input_interface.launch()