|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import joblib |
|
|
from huggingface_hub import hf_hub_download |
|
|
|
|
|
st.set_page_config(page_title="Engine Condition Prediction") |
|
|
|
|
|
@st.cache_resource |
|
|
def load_model(): |
|
|
model_path = hf_hub_download( |
|
|
repo_id="ShanRaja/engine-fault-xgboost", |
|
|
filename="best_model.joblib" |
|
|
) |
|
|
return joblib.load(model_path) |
|
|
|
|
|
model = load_model() |
|
|
|
|
|
st.title("Engine Condition Prediction") |
|
|
|
|
|
|
|
|
|
|
|
engine_rpm = st.number_input( |
|
|
"Engine RPM", |
|
|
min_value=50, |
|
|
max_value=2250, |
|
|
value=791, |
|
|
step=50 |
|
|
) |
|
|
|
|
|
lub_oil_pressure = st.number_input( |
|
|
"Lub Oil Pressure (bar)", |
|
|
min_value=0.0, |
|
|
max_value=8.0, |
|
|
value=3.3, |
|
|
step=0.1, |
|
|
format="%.3f" |
|
|
) |
|
|
|
|
|
fuel_pressure = st.number_input( |
|
|
"Fuel Pressure (bar)", |
|
|
min_value=0.0, |
|
|
max_value=22.0, |
|
|
value=6.66, |
|
|
step=0.1, |
|
|
format="%.3f" |
|
|
) |
|
|
|
|
|
coolant_pressure = st.number_input( |
|
|
"Coolant Pressure (bar)", |
|
|
min_value=0.0, |
|
|
max_value=8.0, |
|
|
value=2.33, |
|
|
step=0.1, |
|
|
format="%.3f" |
|
|
) |
|
|
|
|
|
lub_oil_temp = st.number_input( |
|
|
"Lub Oil Temp (°C)", |
|
|
min_value=70.0, |
|
|
max_value=90.0, |
|
|
value=77.6, |
|
|
step=0.5, |
|
|
format="%.2f" |
|
|
) |
|
|
|
|
|
coolant_temp = st.number_input( |
|
|
"Coolant Temp (°C)", |
|
|
min_value=60.0, |
|
|
max_value=200.0, |
|
|
value=78.4, |
|
|
step=0.5, |
|
|
format="%.2f" |
|
|
) |
|
|
|
|
|
|
|
|
if st.button("Predict"): |
|
|
input_df = pd.DataFrame( |
|
|
[[ |
|
|
int(engine_rpm), |
|
|
lub_oil_pressure, |
|
|
fuel_pressure, |
|
|
coolant_pressure, |
|
|
lub_oil_temp, |
|
|
coolant_temp |
|
|
]], |
|
|
columns=[ |
|
|
"Engine rpm", |
|
|
"Lub oil pressure", |
|
|
"Fuel pressure", |
|
|
"Coolant pressure", |
|
|
"lub oil temp", |
|
|
"Coolant temp" |
|
|
] |
|
|
) |
|
|
|
|
|
prediction = model.predict(input_df)[0] |
|
|
|
|
|
label = "FAULTY" if prediction == 1 else "NORMAL" |
|
|
|
|
|
st.success(f"Engine Condition: {label}") |
|
|
|
|
|
|
|
|
|
|
|
st.header("Batch Prediction from CSV") |
|
|
uploaded_file = st.file_uploader("Upload CSV file for batch prediction", type="csv") |
|
|
|
|
|
if uploaded_file is not None: |
|
|
input_data = pd.read_csv(uploaded_file) |
|
|
required_cols = ["Engine rpm","Lub oil pressure","Fuel pressure","Coolant pressure","lub oil temp","Coolant temp"] |
|
|
|
|
|
if not all(col in input_data.columns for col in required_cols): |
|
|
st.error(f"CSV must contain columns: {', '.join(required_cols)}") |
|
|
else: |
|
|
predictions = model.predict(input_data) |
|
|
input_data["Engine Condition"] = ["FAULTY" if p == 1 else "NORMAL" for p in predictions] |
|
|
st.success("Predictions completed!") |
|
|
st.dataframe(input_data) |
|
|
|
|
|
csv = input_data.to_csv(index=False).encode("utf-8") |
|
|
st.download_button( |
|
|
label="Download Predictions as CSV", |
|
|
data=csv, |
|
|
file_name="engine_predictions.csv", |
|
|
mime="text/csv", |
|
|
) |
|
|
|