AULA10_PROD / app.py
jpbernardo's picture
Upload 4 files
0a76d69 verified
# -*- coding: utf-8 -*-
"""app.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1F6FhGqNtRd7g_rwOjRXAqLN8x8hflsRb
"""
import tensorflow as tf
import numpy as np
from tensorflow.keras.models import load_model
from PIL import Image
import gradio as gr
import os
MODEL_PATH = "modelo_cats_vs_dogs_cnn.h5"
IMG_SIZE = (128, 128)
# Carrega o modelo
model = load_model(MODEL_PATH)
def predict_image(img: Image.Image):
# Garante 3 canais
img = img.convert("RGB")
# Redimensiona
img = img.resize(IMG_SIZE)
# Para array, normaliza
img_array = np.array(img).astype("float32") / 255.0
# Adiciona batch
img_array = np.expand_dims(img_array, axis=0)
# Predição
pred = model.predict(img_array)[0][0] # valor entre 0 e 1 (sigmoid)
prob_cachorro = float(pred)
prob_gato = float(1 - pred)
if pred >= 0.5:
classe = "Cachorro 🐶"
else:
classe = "Gato 😺"
texto = f"Classe prevista: {classe}\nProb. Gato: {prob_gato:.3f}\nProb. Cachorro: {prob_cachorro:.3f}"
# Label do Gradio aceita um dict com probs
probs_dict = {
"Gato": prob_gato,
"Cachorro": prob_cachorro
}
return texto, probs_dict
titulo = "Classificador de Cães e Gatos (CNN - TensorFlow)"
descricao = "Envie uma imagem de gato ou cachorro e o modelo vai prever a classe 🐶😺."
demo = gr.Interface(
fn=predict_image,
inputs=gr.Image(type="pil", label="Envie uma imagem de gato ou cachorro"),
outputs=[
gr.Textbox(label="Resultado"),
gr.Label(label="Probabilidades")
],
title=titulo,
description=descricao
)
if __name__ == "__main__":
# Importante para funcionar dentro do container
port = int(os.getenv("PORT", 7860))
demo.launch(server_name="0.0.0.0", server_port=port)