DHEIVER's picture
Update app.py
3cba85b
raw
history blame
2.65 kB
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)