File size: 2,156 Bytes
53fb9f9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import tensorflow as tf
import numpy as np

# Dicionário para mapear os nomes amigáveis para os arquivos reais
MODELOS = {
    "EfficientNetB4 (Alta Precisão)": "EfficientNetB4_adam.keras",
    "MobileNet (Alta Velocidade)": "MobileNet_adam.keras"
}

# Cache para não precisar recarregar o arquivo toda vez que clicar no botão
cache_modelos = {}

def carregar_modelo(nome_selecionado):
    arquivo = MODELOS[nome_selecionado]
    if arquivo not in cache_modelos:
        print(f"Carregando {arquivo} para o cache...")
        cache_modelos[arquivo] = tf.keras.models.load_model(arquivo)
    return cache_modelos[arquivo]

def realizar_predicao(imagem, nome_modelo):
    # 1. Carregar o modelo selecionado no dropdown
    model = carregar_modelo(nome_modelo)
    
    # 2. Definir o tamanho baseado no modelo
    # EfficientNetB4 usa 380x380, MobileNet usa 224x224
    tamanho = (380, 380) if "EfficientNetB4" in nome_modelo else (224, 224)
    
    # 3. Pré-processar a imagem
    img_redimensionada = tf.image.resize(imagem, tamanho)
    img_array = np.expand_dims(img_redimensionada, axis=0)
    
    # 4. Fazer a predição
    predicoes = model.predict(img_array)
    classe_id = np.argmax(predicoes, axis=1)[0]
    confianca = float(np.max(predicoes))
    
    return f"Modelo: {nome_modelo}\nClasse Detectada: {classe_id}\nConfiança: {confianca:.2%}"

# Criar a Interface Visual
with gr.Blocks() as demo:
    gr.Markdown("Teste de modelo Tensorflow")
    gr.Markdown("Selecione qual modelo a IA deve usar para analisar a foto.")
    
    with gr.Row():
        with gr.Column():
            seletor = gr.Dropdown(
                choices=list(MODELOS.keys()), 
                value=list(MODELOS.keys())[0], 
                label="Escolha o Modelo"
            )
            input_img = gr.Image(label="Upload da Imagem")
            btn = gr.Button("Analisar")
        
        with gr.Column():
            output_text = gr.Textbox(label="Resultado da Predição")

    # Ação do botão
    btn.click(fn=realizar_predicao, inputs=[input_img, seletor], outputs=output_text)

if __name__ == "__main__":
    demo.launch()