GitHub Actions
Deployment from GitHub Actions
78ac47c
Raw
History Blame Contribute Delete
4.62 kB
import joblib
import pandas as pd
from huggingface_hub import hf_hub_download
import sys
import streamlit as st
import datetime # Added import for datetime
# Initialize model to None
model = None
# Define repository ID and model path in repo
repo_id = "Srinivas1969/dl-capstone-dataset"
path_in_repo = "model/tuned_random_forest.joblib"
# Download the model file
try:
model_path_local = hf_hub_download(repo_id=repo_id, repo_type='dataset', filename=path_in_repo)
# st.write(f"Model downloaded to: {model_path_local}") # For debugging in Streamlit, can be removed
except Exception as e:
st.error(f"Error downloading model from Hugging Face Hub: {e}")
st.error("Please ensure 'HF_TOKEN' is correctly set as an environment variable if the repo is private.")
sys.exit(1) # Exit with an error code
# Load the downloaded model
try:
model = joblib.load(model_path_local)
# st.write("Model loaded successfully.") # For debugging in Streamlit, can be removed
except Exception as e:
st.error(f"Error loading the model: {e}")
sys.exit(1) # Exit with an error code
def predict_engine_condition(engine_rpm, lub_oil_pressure, fuel_pressure, coolant_pressure, lub_oil_temp, coolant_temp):
"""
Predicts the engine condition (0 = Normal, 1 = Faulty) based on input sensor readings.
Args:
engine_rpm (int): The number of revolutions per minute (RPM) of the engine.
lub_oil_pressure (float): The pressure of the lubricating oil in the engine (bar/kPa).
fuel_pressure (float): The pressure at which fuel is supplied to the engine (bar/kPa).
coolant_pressure (float): The pressure of the engine coolant (bar/kPa).
lub_oil_temp (float): The temperature of the lubricating oil (°C).
coolant_temp (float): The temperature of the engine coolant (°C).
Returns:
int: Predicted engine condition (0 for Normal, 1 for Faulty).
"""
# Defensive check: Ensure the model is loaded before making predictions.
if model is None:
raise RuntimeError("Model is not loaded. Cannot make predictions.")
# Create a DataFrame from the input parameters
input_data = pd.DataFrame([[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'])
# Make prediction
prediction = model.predict(input_data)
return int(prediction[0])
# Streamlit Interface
st.set_page_config(layout="wide")
st.title('Engine Condition Predictor')
st.write(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # Display current date and time
st.write('Enter sensor readings to predict engine condition (0=Normal, 1=Faulty).')
# Input widgets for sensor readings (using ranges from df.describe() and common sense)
with st.sidebar:
st.header("Sensor Readings")
engine_rpm = st.number_input('Engine RPM', min_value=60, max_value=2300, value=791, step=10, help="Revolutions per minute")
lub_oil_pressure = st.number_input('Lub Oil Pressure (bar/kPa)', min_value=0.0, max_value=8.0, value=3.3, step=0.1, format="%.2f")
fuel_pressure = st.number_input('Fuel Pressure (bar/kPa)', min_value=0.0, max_value=22.0, value=6.65, step=0.1, format="%.2f")
coolant_pressure = st.number_input('Coolant Pressure (bar/kPa)', min_value=0.0, max_value=8.0, value=2.33, step=0.1, format="%.2f")
lub_oil_temp = st.number_input('Lub Oil Temperature (°C)', min_value=70.0, max_value=90.0, value=77.64, step=0.1, format="%.2f")
coolant_temp = st.number_input('Coolant Temperature (°C)', min_value=60.0, max_value=200.0, value=78.42, step=0.1, format="%.2f")
if st.button('Predict Engine Condition'):
try:
prediction = predict_engine_condition(
engine_rpm,
lub_oil_pressure,
fuel_pressure,
coolant_pressure,
lub_oil_temp,
coolant_temp
)
if prediction == 0:
st.success('Predicted Engine Condition: Normal (0)')
else:
st.error('Predicted Engine Condition: Faulty (1)')
st.write("### Input Data:")
st.write(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]
}))
except Exception as e:
st.error(f"An error occurred during prediction: {e}")