DHEIVER's picture
Update app.py
ac69c6b
raw
history blame
2.06 kB
import gradio as gr
import numpy as np
from tensorflow.keras.preprocessing import image
from tensorflow.keras.models import load_model
import matplotlib.pyplot as plt
from PIL import Image as PILImage
import io
# Carregar o modelo treinado
model = load_model('model_1.0000.h5')
def predict_and_invert(input_image):
# Redimensionar a imagem para (224, 224) - o tamanho esperado pelo modelo
input_image = input_image.resize((224, 224))
# Converter a imagem para o formato correto
img = image.img_to_array(input_image)
img = img / 255.0 # Normalizar a imagem (como fizemos durante o treinamento)
# Ajustar a imagem para o tamanho correto (224, 224, 3)
img = np.expand_dims(img, axis=0)
img = img[:, :224, :224, :] # Ajustar para 224x224 pixels
prediction = model.predict(img)
# Interpretar o resultado
if prediction[0][0] > 0.5:
result = "Há uma alta probabilidade de anomalia cardíaca (Doente)"
else:
result = "Não há evidência significativa de anomalia cardíaca (Normal)"
# Inverter a imagem
img_inverted = 1 - img # Inverter a imagem
# Converter a imagem invertida de volta para o formato PIL
img_inverted_pil = PILImage.fromarray(np.uint8(img_inverted[0] * 255))
img_inverted_bytes = io.BytesIO()
img_inverted_pil.save(img_inverted_bytes, format='PNG')
return result, img_inverted_pil
# Criar duas interfaces Gradio idênticas
iface1 = gr.Interface(
fn=predict_and_invert,
inputs=gr.inputs.Image(type="pil", label="Carregar uma imagem"),
outputs=["text", "image"], # Agora temos duas saídas: texto e imagem
title="Modelo de Classificação de Anomalias Cardíacas - Interface 1"
)
iface2 = gr.Interface(
fn=predict_and_invert,
inputs=gr.inputs.Image(type="pil", label="Carregar uma imagem"),
outputs=["text", "image"], # Agora temos duas saídas: texto e imagem
title="Modelo de Classificação de Anomalias Cardíacas - Interface 2"
)
# Executar ambas as interfaces Gradio
iface1.launch()
iface2.launch()