Spaces:
Sleeping
Sleeping
File size: 3,912 Bytes
2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b dc7794d 2e0de6b |
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
import streamlit as st
import joblib
import pandas as pd
import numpy as np
from huggingface_hub import hf_hub_download
import os
# Configuration
HF_MODEL_REPO = os.getenv("HF_MODEL_REPO", "dhani10/engine-condition-model")
MODEL_FILE = os.getenv("MODEL_FILE", "best_engine_model.joblib")
# Expected features (match your training data exactly)
EXPECTED_COLS = [
'Engine rpm', 'Lub oil pressure', 'Fuel pressure',
'Coolant pressure', 'lub oil temp', 'Coolant temp'
]
@st.cache_resource
def load_model():
"""Load the model from Hugging Face Hub"""
try:
model_path = hf_hub_download(
repo_id=HF_MODEL_REPO,
filename=MODEL_FILE,
repo_type="model",
token=os.getenv("HF_TOKEN")
)
model = joblib.load(model_path)
st.success("Model loaded successfully!")
return model
except Exception as e:
st.error(f"Failed to load model: {e}")
return None
def main():
st.set_page_config(
page_title="Engine Condition Predictor",
layout="centered",
page_icon="🏭"
)
st.title("Predictive Maintenance — Engine Condition")
st.markdown("Monitor engine health using real-time sensor data")
st.caption(f"Model: {HF_MODEL_REPO}")
# Load model
with st.spinner("Loading AI model..."):
model = load_model()
if model is None:
st.stop()
# Input form
st.header("🔧 Engine Sensor Readings")
with st.form("prediction_form"):
col1, col2 = st.columns(2)
with col1:
engine_rpm = st.slider("Engine RPM", 100, 2500, 1200)
lub_oil_pressure = st.slider("Lub Oil Pressure (bar)", 0.5, 7.0, 3.0, 0.1)
fuel_pressure = st.slider("Fuel Pressure (bar)", 0.5, 20.0, 6.0, 0.1)
with col2:
coolant_pressure = st.slider("Coolant Pressure (bar)", 0.5, 7.0, 2.0, 0.1)
lub_oil_temp = st.slider("Lub Oil Temp (°C)", 70.0, 110.0, 80.0, 0.1)
coolant_temp = st.slider("Coolant Temp (°C)", 60.0, 100.0, 75.0, 0.1)
submitted = st.form_submit_button("Analyze Engine Condition", type="primary")
if submitted:
# Create input data with EXACT column names from training
input_data = pd.DataFrame([{
'Engine rpm': engine_rpm,
'Lub oil pressure': lub_oil_pressure,
'Fuel pressure': fuel_pressure,
'Coolant pressure': coolant_pressure,
'lub oil temp': lub_oil_temp,
'Coolant temp': coolant_temp
}])
try:
# Make prediction
prediction = model.predict(input_data)[0]
probability = model.predict_proba(input_data)[0]
# Display results
st.header("Analysis Results")
if prediction == 1:
st.error("**FAULTY ENGINE DETECTED**")
st.progress(probability[1])
st.warning(f"**Risk Probability:** {probability[1]*100:.1f}%")
st.markdown("""
**Recommended Actions:**
- Schedule immediate maintenance
- Inspect lubrication system
- Check cooling system
""")
else:
st.success("**ENGINE OPERATING NORMALLY**")
st.progress(probability[0])
st.info(f"**Health Score:** {probability[0]*100:.1f}%")
st.markdown("""
**Status:** Continue routine monitoring
**Next maintenance:** As scheduled
""")
# Show input data
with st.expander("View Input Data"):
st.dataframe(input_data)
except Exception as e:
st.error(f"Prediction error: {str(e)}")
st.info("Please check that the model expects the correct feature names")
if __name__ == "__main__":
main()
|