File size: 4,003 Bytes
5af35cb
 
 
e2a2470
5af35cb
e2a2470
5af35cb
 
 
e422414
5af35cb
 
 
2485c8f
 
 
 
 
 
 
5af35cb
 
 
 
 
3b91fd3
 
5af35cb
 
e422414
 
 
 
 
5af35cb
 
 
e422414
5af35cb
771f8c4
5af35cb
e422414
 
 
 
5af35cb
 
771f8c4
5af35cb
98927ed
 
 
771f8c4
 
 
c409263
98927ed
 
771f8c4
 
e422414
98927ed
 
 
5af35cb
 
 
 
 
 
 
 
e422414
2485c8f
5af35cb
2485c8f
5af35cb
d629148
 
3579f77
 
d629148
5af35cb
2485c8f
 
 
 
ad8afc8
d4a928a
5af35cb
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import gradio as gr
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import load_model
import joblib

# Load the model
model = load_model("Engine_Fault-small.h5")
scaler = joblib.load("scaler.pkl")

# Fault Type Table
fault_table = pd.DataFrame({
    "Tipe Kerusakan": [0, 1, 2, 3],
    "Nama Kerusakan": ["No Fault", "Rich Mixture", "Lean Mixture", "Low Voltage"],
    "Kondisi": [
        "Tidak ada kerusakan",
        "Performa sensor salah, Tekanan bahan bakar tinggi, Injektor rusak, Regulator tekanan rusak, Filter udara tersumbat, Saluran pengembalian bahan bakar tersumbat",
        "Performa sensor salah, Tekanan bahan bakar rendah, Injektor rusak, Regulator tekanan rusak",
        "Busi yang sudah aus, Kabel pengapian rusak, Kumparan rusak, Kabel sensor rusak"
    ]
})

# Define input columns required by the model
required_columns = [
    "MAP", "TPS", "Force", "Power", "RPM", "Consumption L/H",
    "Consumption L/100KM", "Speed", "CO", "HC", "CO2", "O2", "Lambda", "AFR"
]

def predict_fault(uploaded_csv):
    if uploaded_csv is None:
        return "Please upload a CSV file for prediction.", None

    df = pd.read_csv(uploaded_csv)

    missing_cols = set(required_columns) - set(df.columns)
    if missing_cols:
        return f"Missing required columns: {', '.join(missing_cols)}", None

    # Scale input
    X = df[required_columns]
    X_scaled = scaler.transform(X)

    # Predict
    predictions = model.predict(X_scaled)
    predicted_faults = np.argmax(predictions, axis=1)

    # Merge fault descriptions
    df['Predicted Fault Type'] = predicted_faults
    df = df.merge(fault_table, left_on='Predicted Fault Type', right_on='Tipe Kerusakan', how='left')
    
    # Plot bar chart
    fig, ax = plt.subplots()
    fault_counts = df['Predicted Fault Type'].value_counts().sort_index()
    fault_counts.plot(kind='bar', ax=ax)
    ax.set_title("Jumlah Tipe Fault yang Diprediksi")
    ax.set_xlabel("Tipe Fault")
    ax.set_ylabel("Jumlah")
    ax.set_xticks(range(4))
    ax.set_xticklabels(["No Fault", "Rich", "Lean", "Low Volt"], rotation=0)
    plt.tight_layout()
    
    # Return output
    return df[['Predicted Fault Type', 'Nama Kerusakan', 'Kondisi']].head(10), fig

# Gradio Interface
demo = gr.Interface(
    fn=predict_fault,
    inputs=[
        gr.File(label="Upload CSV File", file_types=[".csv"])
    ],
    outputs=[
        gr.Dataframe(label="Predicted Faults (Top 10 Rows)"),
        gr.Plot(label="Bar Chart")
    ],
    title="Sistem Prediksi Kerusakan Mesin Otomotif",
    description=(
        "Upload file CSV yang berisikan data sensor mesin untuk memprediksi kerusakan.\n\n"
        "Model mengklasifikasi kerusakan berdasarkan kondisi berikut:\n\n"
        "**Catatan penting:** File CSV *wajib* memiliki kolom-kolom berikut (harus sesuai urutan):\n"
        "`MAP`, `TPS`, `Force`, `Power`, `RPM`, `Consumption L/H`, `Consumption L/100KM`, `Speed`, `CO`, `HC`, `CO2`, `O2`, `Lambda`, `AFR`\n\n"
        "| Tipe Kerusakan | Nama Kerusakan    | Kondisi                                                                 |\n"
        "|------------|----------------|----------------------------------------------------------------------------|\n"
        "| 0          | No fault       | Tidak ada kerusakan                                                                   |\n"
        "| 1          | Rich Mixture   | Performa sensor salah, Tekanan bahan bakar tinggi, Injektor rusak, Regulator tekanan rusak, Filter udara tersumbat, Saluran pengembalian bahan bakar tersumbat                    |\n"
        "| 2          | Lean Mixture   | Performa sensor salah, Tekanan bahan bakar rendah, Injektor rusak, Regulator tekanan rusak                    |\n"
        "| 3          | Low Voltage    | Busi yang sudah aus, Kabel pengapian rusak, Kumparan rusak, Kabel sensor rusak                          |\n"
    ),
    examples=[["sample.csv"]]
)

if __name__ == "__main__":
    demo.launch()