vrd254's picture
Update app.py
a282f4e verified
Raw
History Blame Contribute Delete
1.88 kB
import gradio as gr
import joblib
import pandas as pd
model = joblib.load("rf_model.pkl")
scaler = joblib.load("scaler.pkl")
feature_names = joblib.load("features.pkl")
LABELS = {0: "🚢 Walking", 1: "πŸƒ Running"}
def predict_activity(*sensor_values):
input_df = pd.DataFrame([list(sensor_values)], columns=feature_names)
scaled = scaler.transform(input_df)
pred = model.predict(scaled)[0]
proba = model.predict_proba(scaled)[0]
return (
LABELS[pred],
f"{proba[pred] * 100:.1f} %",
f"{proba[0] * 100:.1f} %",
f"{proba[1] * 100:.1f} %",
)
SLIDER_CONFIG = {
"acceleration_x": dict(minimum=-20.0, maximum=20.0, step=0.01, value=0.30),
"acceleration_y": dict(minimum=-20.0, maximum=20.0, step=0.01, value=9.80),
"acceleration_z": dict(minimum=-20.0, maximum=20.0, step=0.01, value=0.10),
"gyro_x": dict(minimum=-10.0, maximum=10.0, step=0.01, value=0.00),
"gyro_y": dict(minimum=-10.0, maximum=10.0, step=0.01, value=0.00),
"gyro_z": dict(minimum=-10.0, maximum=10.0, step=0.01, value=0.00),
"wrist": dict(minimum=0, maximum=1, step=1, value=0),
}
inputs = [
gr.Slider(
label=feat,
**SLIDER_CONFIG.get(feat, dict(minimum=-20.0, maximum=20.0, step=0.01, value=0.0))
)
for feat in feature_names
]
outputs = [
gr.Textbox(label="Predicted Activity"),
gr.Textbox(label="Confidence"),
gr.Textbox(label="P(Walking)"),
gr.Textbox(label="P(Running)"),
]
demo = gr.Interface(
fn=predict_activity,
inputs=inputs,
outputs=outputs,
title="πŸƒ Walk vs Run Classifier",
description="Enter wearable sensor readings to classify activity.\n\n**Model:** Random Forest | **Accuracy:** ~99.2%",
)
if __name__ == "__main__":
demo.launch(theme=gr.themes.Soft(), ssr_mode=False)