Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import joblib | |
| import numpy as np | |
| import os | |
| from PIL import Image | |
| # --- 1. Load the Pre-Trained Model --- | |
| # This script assumes 'model.joblib' exists because you've run train.py | |
| MODEL_PATH = "model.joblib" | |
| IMAGE_PATH = "engine.jpg" | |
| model = None | |
| try: | |
| model = joblib.load(MODEL_PATH) | |
| print("Model 'model.joblib' loaded successfully.") | |
| except FileNotFoundError: | |
| print(f"ERROR: Model file not found at '{MODEL_PATH}'.") | |
| print("Please run 'python train.py' in your terminal first to create the model file.") | |
| # --- 2. Define Feature Names --- | |
| # This list must be in the exact same order as the data your model was trained on. | |
| feature_names = [ | |
| 'time_in_cycles', 'setting_1', 'setting_2', 's_1', 's_2', 's_3', 's_4', 's_5', | |
| 's_6', 's_7', 's_8', 's_9', 's_10', 's_11', 's_12', 's_13', 's_14', 's_15', | |
| 's_16', 's_17', 's_18', 's_19', 's_20', 's_21' | |
| ] | |
| # --- 3. Create the Prediction Function --- | |
| def predict_rul(*args): | |
| """ | |
| Takes all 24 slider/number inputs as arguments, arranges them into the | |
| correct format, and returns the model's RUL prediction. | |
| """ | |
| # First, check if the model was loaded successfully. | |
| if model is None: | |
| return "Model not loaded. Please run 'python train.py' and restart the app." | |
| # Convert the input arguments into a NumPy array for the model | |
| input_data = np.array(args).reshape(1, -1) | |
| # Make the prediction | |
| prediction = model.predict(input_data) | |
| # The model returns an array, so we get the first (and only) element | |
| final_prediction = prediction[0] | |
| return f"{round(final_prediction, 2)} cycles remaining" | |
| # --- 4. Build the Gradio Interface --- | |
| # We use a Gradio "Blocks" layout for more control over the UI. | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# Turbofan Engine Predictive Maintenance") | |
| gr.Markdown("Enter the engine's current sensor readings to predict its Remaining Useful Life (RUL). This demo uses a trained Linear Regression model.") | |
| with gr.Row(): | |
| # Column for Inputs | |
| with gr.Column(scale=1): | |
| gr.Markdown("### Engine Parameters & Sensor Readings") | |
| # Create a list to hold all our input components | |
| inputs = [] | |
| for name in feature_names: | |
| # Use a slider for each input for easy interaction | |
| inputs.append(gr.Slider(minimum=0, maximum=1000, label=name, value=50)) | |
| # Column for Image and Output | |
| with gr.Column(scale=1): | |
| # Using a reliable placeholder image link. | |
| gr.Image( | |
| "engine.jpg", | |
| label="Turbofan Engine" | |
| ) | |
| gr.Markdown("### Prediction Result") | |
| # Create the output textbox | |
| outputs = gr.Textbox(label="Predicted Remaining Useful Life (RUL)") | |
| # Create the button to trigger the prediction | |
| predict_btn = gr.Button("Predict RUL", variant="primary") | |
| # Connect the button's "click" event to our prediction function | |
| predict_btn.click( | |
| fn=predict_rul, | |
| inputs=inputs, | |
| outputs=outputs | |
| ) | |
| # --- 5. Launch the App --- | |
| if __name__ == "__main__": | |
| demo.launch() | |