Spaces:
Sleeping
Sleeping
| # -*- 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) |