|
|
| import streamlit as st |
| import pandas as pd |
| import joblib |
| import os |
| import numpy as np |
| from huggingface_hub import hf_hub_download |
|
|
| |
| st.set_page_config(page_title="Engine Health Predictor", layout="centered") |
|
|
| |
| repo_id = "SantoshS23/PredMaintModel" |
| filename = "adaboost_predictive_maintenance_model.joblib" |
|
|
| |
| hf_token = os.getenv("HF_TOKEN") |
|
|
| @st.cache_resource |
| def load_model(repo_id, filename, token): |
| """Caches the model loading process.""" |
| if not token: |
| st.error("HF_TOKEN environment variable not set. Cannot load model.") |
| st.info("Please set the HF_TOKEN environment variable with your Hugging Face access token.") |
| st.stop() |
| try: |
| model_path = hf_hub_download(repo_id=repo_id, filename=filename, token=token) |
| model = joblib.load(model_path) |
| return model |
| except Exception as e: |
| st.error(f"Error loading model from Hugging Face Hub: {e}") |
| st.info("Please ensure you have set the HF_TOKEN environment variable with a valid token.") |
| st.stop() |
|
|
| model = load_model(repo_id, filename, hf_token) |
|
|
| if model: |
| st.success("Model loaded successfully from Hugging Face Hub!") |
| else: |
| st.error("Model could not be loaded. Please check your HF_TOKEN and repo details.") |
| st.stop() |
|
|
|
|
| |
| st.title("🛡️ Engine Predictive Maintenance") |
| st.markdown(""" |
| Enter the current sensor telemetry below to predict the likelihood of engine failure. |
| This tool utilizes an optimized machine learning model to detect failure signatures. |
| """) |
|
|
| st.divider() |
|
|
| |
| st.subheader("📡 Real-Time Sensor Telemetry") |
|
|
| col1, col2 = st.columns(2) |
|
|
| with col1: |
| rpm = st.number_input("Engine RPM", min_value=0.0, max_value=3000.0, value=750.0, step=10.0) |
| lub_oil_press = st.number_input("Lub Oil Pressure (bar)", min_value=0.0, max_value=15.0, value=3.5, step=0.1) |
| fuel_press = st.number_input("Fuel Pressure (bar)", min_value=0.0, max_value=25.0, value=6.0, step=0.1) |
|
|
| with col2: |
| coolant_press = st.number_input("Coolant Pressure (bar)", min_value=0.0, max_value=15.0, value=2.5, step=0.1) |
| lub_oil_temp = st.number_input("Lub Oil Temp (°C)", min_value=0.0, max_value=150.0, value=78.0, step=0.5) |
| coolant_temp = st.number_input("Coolant Temp (°C)", min_value=0.0, max_value=200.0, value=82.0, step=0.5) |
|
|
| st.divider() |
|
|
| |
| |
| features = np.array([[rpm, lub_oil_press, fuel_press, coolant_press, lub_oil_temp, coolant_temp]]) |
|
|
| if st.button("Analyze Engine Health"): |
| prediction = model.predict(features) |
| probability = model.predict_proba(features)[0][1] |
|
|
| st.subheader("🔍 Analysis Result") |
|
|
| if prediction[0] == 0: |
| st.success(f"**NORMAL OPERATION**: The engine is healthy. (Confidence: {1-probability:.2%})") |
| st.balloons() |
| else: |
| st.error(f"**FAULT DETECTED**: Maintenance required. High risk of failure! (Confidence: {probability:.2%})") |
|
|
| |
| st.info(f""" |
| **Expert Insight**: |
| - Predicted Probabilty of Failure: **{probability:.4f}** |
| - Alert Threshold: **0.50** |
| """) |
|
|
| |
| with st.expander("About this model"): |
| st.write(""" |
| This model was trained using an Adaptive Boosting (AdaBoost) algorithm |
| optimized for engine sensor telemetry. It identifies non-linear correlations |
| between pressure, temperature, and speed to predict potential mechanical failures |
| before they occur. |
| """) |
|
|
|
|