CoolFace
Apppublic

Devalekka/Turbofan_remaining_lifecycle_predictor

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes
app.py73 linesDownload Raw Back to root
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