modelosoulcode / app.py
JeffersonCorreiax's picture
Upload 2 files
2ee9517 verified
# -*- coding: utf-8 -*-
"""app
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1MO92S0QUrWXYS5jlMtHE9n5YdgsfUXaT
"""
import gradio as gr
from PIL import Image
import numpy as np
import tensorflow as tf
import pandas as pd
import plotly.express as px
import gdown
import os
# Carrega o modelo TFLite uma única vez
def carrega_modelo():
output = 'modelo_quantizado16bits.tflite'
if not os.path.exists(output):
raise FileNotFoundError("O modelo TFLite não foi encontrado no diretório do app.")
interpreter = tf.lite.Interpreter(model_path=output)
interpreter.allocate_tensors()
return interpreter
interpreter = carrega_modelo()
# Função principal que recebe a imagem e retorna o gráfico
def classificar_imagem(imagem_pil):
# Pré-processamento da imagem
image = np.array(imagem_pil, dtype=np.float32)
image = image / 255.0
image = np.expand_dims(image, axis=0)
# Realiza inferência
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
interpreter.set_tensor(input_details[0]['index'], image)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
# Processa saída e cria gráfico
classes = ['BlackMeasles', 'BlackRot', 'HealthyGrapes', 'LeafBlight']
df = pd.DataFrame({'classes': classes, 'probabilidades (%)': 100 * output_data[0]})
fig = px.bar(df, y='classes', x='probabilidades (%)', orientation='h', text='probabilidades (%)',
title='Probabilidade de Classes de Doenças em Uvas')
return fig
# Interface Gradio
interface = gr.Interface(
fn=classificar_imagem,
inputs=gr.Image(type="pil", label="Envie uma imagem de folha de videira"),
outputs=gr.Plot(label="Gráfico de Previsões"),
title="Classificador de Folhas de Videira 🍇",
description="Faça upload de uma imagem de folha de videira para detectar possíveis doenças."
)
if __name__ == "__main__":
interface.launch()