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