Spaces:
Running
Running
import tensorflow as tf | |
from keras.utils import custom_object_scope | |
import gradio as gr | |
import numpy as np | |
from PIL import Image, ImageDraw | |
# 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 pré-processamento | |
def preprocess_image(inp): | |
# Redimensione a imagem para o formato esperado pelo modelo (192x256) | |
img = Image.fromarray(inp) | |
img = img.resize((256, 192)) | |
# Converta a imagem para um array numpy | |
img = np.array(img) | |
# Normalize a imagem (escala de 0 a 1) | |
img = img / 255.0 | |
return img | |
# Defina a função de classificação | |
def classify_image(inp): | |
# Pré-processar a imagem | |
img = preprocess_image(inp) | |
# 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)] | |
# Crie uma imagem de saída com a classe prevista | |
output_image = Image.new("RGB", (256, 192)) | |
output_image.paste((255, 255, 255), (0, 0, 256, 192)) | |
output_image_draw = ImageDraw.Draw(output_image) | |
output_image_draw.text((10, 10), f"Classe Prevista: {predicted_class}", fill=(0, 0, 0)) | |
# Converte a imagem de saída de volta para numpy array | |
output_image = np.array(output_image) | |
# Retorna uma lista com a imagem de entrada e o rótulo | |
return [inp, output_image], predicted_class | |
# Crie uma interface Gradio | |
iface = gr.Interface( | |
fn=classify_image, | |
inputs=gr.inputs.Image(shape=(192, 256)), | |
outputs=[gr.outputs.Multi([gr.outputs.Image(type="numpy"), gr.outputs.Image(type="numpy")]), gr.outputs.Label()], | |
capture_session=True, | |
title="Detecção de Catarata", | |
description="Esta interface permite a detecção de catarata em imagens de olhos.", | |
instructions="Carregue uma imagem de um olho e clique em 'Classificar' para obter a previsão.", | |
theme="default", # Você pode escolher um tema predefinido ou personalizar as cores manualmente. | |
button_text="Classificar Imagem", # Personalize o texto do botão. | |
) | |
# Inicie a interface Gradio | |
iface.launch(debug=True) | |