Devalekka/Turbofan_remaining_lifecycle_predictor
0
1import gradio as gr2import numpy as np3import pandas as pd4import joblib5stacked_model = joblib.load("rul_model.pkl")6 7# ๐ Slope function8def compute_slope(values):9 x = np.arange(len(values))10 A = np.vstack([x, np.ones(len(x))]).T11 m, _ = np.linalg.lstsq(A, values, rcond=None)[0]12 return m13 14# ๐ฎ Prediction function15def predict_rul_from_arrays(*sensor_arrays):16 features = {}17 for i, values in enumerate(sensor_arrays):18 values = np.array(values).flatten()19 features[f'sensor_measurement_{i+1}_mean'] = values.mean()20 features[f'sensor_measurement_{i+1}_slope'] = compute_slope(values)21 features[f'sensor_measurement_{i+1}_last'] = values[-1]22 df = pd.DataFrame([features])23 prediction = stacked_model.predict(df)[0]24 return round(prediction, 2)25 26# ๐ File-based prediction27def predict_rul_from_file(file):28 try:29 df = pd.read_csv(file.name, header=None)30 sensors = df.values.T # transpose to [21, 30]31 return predict_rul_from_arrays(*sensors)32 except Exception as e:33 return f"โ Error: {str(e)}"34 35# ๐ฒ Random dummy data generator36def generate_dummy_data():37 return [np.round(np.random.normal(loc=50, scale=10, size=(1, 30)), 2) for _ in range(21)]38 39# ๐ง Setup UI blocks40with gr.Blocks(title="TurboFan RUL Estimator", theme=gr.themes.Soft()) as app:41 gr.Markdown("""42 # ๐ Turbofan Engine RUL Predictor43 Upload your engine sensor readings OR autofill dummy values to get Remaining Useful Life (RUL).44 """)45 46 with gr.Tab("๐ Upload File"):47 file_input = gr.File(label="Upload CSV (30 rows ร 21 columns)", file_types=[".csv"])48 file_predict_btn = gr.Button("๐ Predict from File")49 file_output = gr.Number(label="Predicted RUL (cycles)", interactive=False)50 file_predict_btn.click(fn=predict_rul_from_file, inputs=file_input, outputs=file_output)51 52 with gr.Tab("๐งช Manual Input"):53 sensor_inputs = [54 gr.Dataframe(55 label=f"Sensor {i+1} (last 30 readings)",56 row_count=1,57 col_count=30,58 type="numpy",59 wrap=True,60 ) for i in range(21)61 ]62 63 with gr.Row():64 run_btn = gr.Button("๐ Predict RUL")65 dummy_btn = gr.Button("๐ฒ Autofill Random Values")66 67 manual_output = gr.Number(label="Predicted RUL (cycles)", interactive=False)68 69 run_btn.click(fn=predict_rul_from_arrays, inputs=sensor_inputs, outputs=manual_output)70 dummy_btn.click(fn=generate_dummy_data, inputs=[], outputs=sensor_inputs)71 72app.launch(inline=False)73 