File size: 2,061 Bytes
2ee9517
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# -*- 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()