aula_teste_ML3 / app.py
jpbernardo's picture
Upload 3 files
dd37b39 verified
# -*- coding: utf-8 -*-
"""
Created on Sun Nov 2 22:59:41 2025
@author: mathe
"""
import gradio as gr
import numpy as np
from PIL import Image
import tensorflow as tf
# === CONFIGURAÇÕES ===
IMG_SIZE = 224
CLASS_NAMES = ["gato", "cachorro"] # mesma ordem do treino (0=cat, 1=dog)
# === CARREGAR MODELO ===
model = tf.keras.models.load_model("model.keras")
# === FUNÇÃO DE PREVISÃO ===
def preprocess_pil(img: Image.Image):
img = img.convert("RGB").resize((IMG_SIZE, IMG_SIZE))
arr = np.array(img, dtype=np.float32)
# MobileNetV2 preprocess (como no treino)
arr = tf.keras.applications.mobilenet_v2.preprocess_input(arr)
arr = np.expand_dims(arr, axis=0)
return arr
def predict(img: Image.Image):
x = preprocess_pil(img)
probs = model.predict(x)[0] # [p_cat, p_dog]
return {
CLASS_NAMES[0]: float(probs[0]),
CLASS_NAMES[1]: float(probs[1])
}
# === INTERFACE GRADIO ===
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type="pil", label="Envie uma imagem"),
outputs=gr.Label(num_top_classes=2),
title="Classificador de Gatos vs. Cães 🐱🐶",
description="Modelo treinado com MobileNetV2 (Transfer Learning, TensorFlow)."
)
# === EXECUÇÃO LOCAL OU NO SPACE ===
if __name__ == "__main__":
demo.launch()