Spaces:
Sleeping
Sleeping
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()
|