# A importação do sklearn/LogisticRegression é necessária caso o modelo não carregue# PEQUENA ALTERAÇÃO PARA FORÇAR O BUILD import gradio as gr import pandas as pd import joblib import numpy as np from sklearn.linear_model import LogisticRegression # A importação do sklearn/LogisticRegression é necessária caso o modelo não carregue # --- 1. CARREGAR O MODELO --- # O NOME DO ARQUIVO DEVE SER EXATAMENTE o que você subiu (modelo_chuva_lr.joblib) MODEL_FILE = "modelo_chuva_lr.joblib" try: model = joblib.load(MODEL_FILE) print(f"Modelo de previsão carregado: {MODEL_FILE}") except Exception as e: print(f"ERRO ao carregar o modelo {MODEL_FILE}. Usando um placeholder. Erro: {e}") # Criação de um modelo placeholder caso o arquivo não seja encontrado model = LogisticRegression() X_fake = pd.DataFrame(np.random.rand(10, 5), columns=['TempMax', 'Umidade', 'Pressao', 'VelVento', 'Mes']) y_fake = np.random.randint(0, 2, 10) model.fit(X_fake, y_fake) # --- 2. FUNÇÃO DE PREVISÃO --- def prever_clima(temp_max, umidade_dia, pressao_dia, vel_vento, mes): """ Recebe as entradas do Gradio e retorna a previsão de chuva e probabilidade. """ # IMPORTANTE: A ordem das colunas e os nomes devem ser iguais aos do treinamento. input_data = pd.DataFrame({ 'TempMax': [temp_max], 'Umidade': [umidade_dia], 'Pressao': [pressao_dia], 'VelVento': [vel_vento], 'Mes': [mes] }) try: # Previsão de probabilidade da classe 1 (Chuva) prob_chuva = model.predict_proba(input_data)[:, 1][0] * 100 # Classificação final if prob_chuva > 50: resultado = "Sim, há **alta probabilidade** de chuva!" elif prob_chuva > 20: resultado = "Probabilidade moderada de chuva." else: resultado = "Não, a probabilidade de chuva é **baixa**." return resultado, f"{prob_chuva:.2f}%" except Exception as e: return f"Erro na previsão (Verifique os logs): {e}", "0.0%" # --- 3. DEFINIÇÃO DA INTERFACE GRADIO --- with gr.Blocks() as demo: gr.Markdown("# 🌧️ Previsão de Chuvas (Modelo Simples)") gr.Markdown("Este é um modelo de demonstração treinado em dados simulados de temperatura, umidade, pressão, vento e mês do ano.") with gr.Row(): temp_max_input = gr.Slider(label="Temperatura Máxima Esperada (°C)", minimum=10, maximum=50, value=25, step=1) umidade_input = gr.Slider(label="Umidade Relativa do Ar (%)", minimum=0, maximum=100, value=65, step=1) with gr.Row(): pressao_input = gr.Slider(label="Pressão Atmosférica (hPa)", minimum=950, maximum=1050, value=1010, step=0.1) vel_vento_input = gr.Slider(label="Velocidade Média do Vento (km/h)", minimum=0, maximum=100, value=15, step=1) mes_input = gr.Slider(label="Mês do Ano (1=Jan, 12=Dez)", minimum=1, maximum=12, value=11, step=1) predict_btn = gr.Button("🔮 Prever Chuva", variant="primary") with gr.Row(): resultado_output = gr.Textbox(label="Veridicto", value="Aguardando dados...", interactive=False) prob_output = gr.Textbox(label="Probabilidade de Chuva", value="0.0%", interactive=False) predict_btn.click( fn=prever_clima, inputs=[temp_max_input, umidade_input, pressao_input, vel_vento_input, mes_input], outputs=[resultado_output, prob_output] ) demo.queue().launch()