Spaces:
Sleeping
Sleeping
import gradio as gr | |
import numpy as np | |
import joblib | |
from sklearn.preprocessing import StandardScaler | |
model = joblib.load("final_rf_model.pkl") | |
scaler = StandardScaler() | |
class_labels = { | |
0: 'Insufficient Weight', | |
1: 'Normal Weight', | |
2: 'Overweight Level I', | |
3: 'Overweight Level II', | |
4: 'Obesity Type I', | |
5: 'Obesity Type II', | |
6: 'Obesity Type III' | |
} | |
# Function to make predictions | |
def predict_obesity(weight, height, age, fcvc, gender, ncp, ch2o, faf, tue, fhwow, | |
caec_sometimes, calc_no, calc_sometimes, caec_frequently, | |
alcohol_choice, mtrans_choice, favc): | |
# Prepare input data for prediction | |
input_data = np.array([[weight, height, age, fcvc, 1 if gender == "Male" else 0, ncp, ch2o, faf, tue, fhwow, | |
1 if caec_sometimes else 0, 1 if calc_no else 0, 1 if calc_sometimes else 0, | |
1 if caec_frequently else 0, 1 if alcohol_choice == "Yes" else 0, | |
1 if favc else 0, 1 if mtrans_choice == "Automobile" else 0]]) | |
# Scale the appropriate input values | |
input_data[:, 0:4] = scaler.fit_transform(input_data[:, 0:4]) | |
input_data[:, 5:10] = scaler.fit_transform(input_data[:, 5:10]) | |
# Make prediction | |
prediction = model.predict(input_data) | |
# Map the numeric prediction to the corresponding label | |
predicted_label = class_labels.get(prediction[0], "Unknown Class") | |
return predicted_label | |
# Custom CSS for better styling | |
custom_css = """ | |
<style> | |
.gradio-container { | |
background-color: #0a0a2c; | |
background-image: | |
linear-gradient(45deg, #0a0a2c 25%, #12124a 25%, #12124a 50%, #0a0a2c 50%, #0a0a2c 75%, #12124a 75%, #12124a 100%); | |
background-size: 56.57px 56.57px; | |
border-radius: 15px; | |
padding: 30px; | |
box-shadow: 0 0 20px rgba(66, 220, 219, 0.3), | |
0 0 40px rgba(233, 30, 99, 0.2); | |
border: 1px solid rgba(66, 220, 219, 0.3); | |
} | |
.title { | |
font-family: 'Orbitron', sans-serif; | |
font-size: 36px; | |
font-weight: bold; | |
color: #00fff2; | |
text-align: center; | |
margin-bottom: 30px; | |
text-transform: uppercase; | |
letter-spacing: 3px; | |
text-shadow: 0 0 10px rgba(0, 255, 242, 0.5), | |
0 0 20px rgba(0, 255, 242, 0.3), | |
0 0 30px rgba(0, 255, 242, 0.1); | |
} | |
.description { | |
font-family: 'Rajdhani', sans-serif; | |
font-size: 18px; | |
color: #b4f8fc; | |
text-align: center; | |
margin-bottom: 30px; | |
line-height: 1.6; | |
text-shadow: 0 0 5px rgba(180, 248, 252, 0.3); | |
} | |
/* Input fields styling */ | |
input[type="number"] { | |
background-color: rgba(16, 16, 44, 0.9); | |
border: 2px solid #00fff2; | |
border-radius: 8px; | |
padding: 12px; | |
color: #fff; | |
font-family: 'Rajdhani', sans-serif; | |
transition: all 0.3s ease; | |
box-shadow: 0 0 10px rgba(0, 255, 242, 0.2); | |
} | |
input[type="number"]:focus { | |
border-color: #ff2e63; | |
box-shadow: 0 0 15px rgba(255, 46, 99, 0.4); | |
outline: none; | |
} | |
/* Radio and Checkbox styling */ | |
input[type="radio"], | |
input[type="checkbox"] { | |
accent-color: #ff2e63; | |
} | |
.input-container label { | |
color: #b4f8fc; | |
font-family: 'Rajdhani', sans-serif; | |
font-size: 16px; | |
margin-bottom: 8px; | |
display: block; | |
} | |
/* Button styling */ | |
button { | |
background: linear-gradient(45deg, #ff2e63, #00fff2); | |
color: #fff; | |
border: none; | |
padding: 15px 30px; | |
border-radius: 8px; | |
cursor: pointer; | |
font-family: 'Orbitron', sans-serif; | |
font-size: 18px; | |
text-transform: uppercase; | |
letter-spacing: 2px; | |
transition: all 0.3s ease; | |
box-shadow: 0 0 15px rgba(255, 46, 99, 0.3), | |
0 0 30px rgba(0, 255, 242, 0.2); | |
} | |
button:hover { | |
transform: translateY(-2px); | |
box-shadow: 0 0 20px rgba(255, 46, 99, 0.5), | |
0 0 40px rgba(0, 255, 242, 0.3); | |
} | |
/* Output label styling */ | |
.output-label { | |
background: rgba(16, 16, 44, 0.9); | |
border: 2px solid #ff2e63; | |
border-radius: 8px; | |
padding: 20px; | |
color: #00fff2; | |
font-family: 'Orbitron', sans-serif; | |
font-size: 24px; | |
text-align: center; | |
margin-top: 20px; | |
box-shadow: 0 0 15px rgba(255, 46, 99, 0.3); | |
} | |
/* Add cyberpunk grid lines to the background */ | |
.gradio-container::before { | |
content: ''; | |
position: absolute; | |
top: 0; | |
left: 0; | |
right: 0; | |
bottom: 0; | |
background: | |
linear-gradient(90deg, rgba(66, 220, 219, 0.1) 1px, transparent 1px), | |
linear-gradient(0deg, rgba(66, 220, 219, 0.1) 1px, transparent 1px); | |
background-size: 20px 20px; | |
pointer-events: none; | |
} | |
/* Add some hover effects to input containers */ | |
.input-container:hover { | |
transform: translateX(5px); | |
transition: transform 0.3s ease; | |
} | |
/* Scrollbar styling */ | |
::-webkit-scrollbar { | |
width: 10px; | |
background: #0a0a2c; | |
} | |
::-webkit-scrollbar-thumb { | |
background: linear-gradient(45deg, #ff2e63, #00fff2); | |
border-radius: 5px; | |
} | |
</style> | |
""" | |
# Gradio interface | |
iface = gr.Interface( | |
fn=predict_obesity, | |
inputs=[ | |
gr.Number(label="Weight (40-160 kg)"), | |
gr.Number(label="Height (1-2 m)"), | |
gr.Number(label="Age (10-60 years)"), | |
gr.Number(label="FCVC (Frequency of Vegetable Consumption 1-4)"), | |
gr.Radio(choices=["Male", "Female"], label="Gender"), | |
gr.Number(label="NCP (Number of meals per day 1-3)"), | |
gr.Number(label="CH2O (Water Consumption 1-3)"), | |
gr.Number(label="FAF (Physical Activity Frequency 1-4)"), | |
gr.Number(label="TUE (Time Spent on Exercise 1-4)"), | |
gr.Number(label="FHWOW (Family History with OverWeight)"), | |
gr.Radio(choices=["No", "Sometimes", "Frequently"], label="Alcohol Consumption"), | |
gr.Radio(choices=["Public Transportation", "Automobile"], label="Transportation Method"), | |
gr.Checkbox(label="FAVC (Frequent Consumption of High-Calorie Foods)"), | |
], | |
outputs=gr.Label(label="Predicted Obesity Level"), | |
title="Obesity Level Estimator", | |
description="Enter the features related to eating habits and physical condition to estimate obesity levels.", | |
css=custom_css | |
) | |
# Launch the interface | |
iface.launch(share=True) | |