Spaces:
Sleeping
Sleeping
File size: 5,485 Bytes
48fed9c 2a203cc 48fed9c ac41ad0 48fed9c ac41ad0 48fed9c ac41ad0 48fed9c ac41ad0 48fed9c ac41ad0 48fed9c ac41ad0 2a203cc 70f2e4c 2a203cc ac41ad0 176207a ac41ad0 2a203cc ac41ad0 2a203cc ac41ad0 2a203cc ac41ad0 16e7e4a 176207a ac41ad0 48fed9c ac41ad0 | 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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | import pandas as pd
import pickle
import gradio as gr
from sklearn.preprocessing import LabelEncoder
import os
# --- Load dataset ---
df_original = pd.read_csv('AB_ELEVATORS_DATASET_final.csv')
categorical_cols_original = [
'BRAND NAME', 'LIFT_TYPE', 'DOOR_FRAME', 'DOOR_TYPE', 'CABIN_MATERIAL', 'MOTOR_TYPE'
]
# --- Create encoders ---
encoders = {}
for col in categorical_cols_original:
le = LabelEncoder()
le.fit(df_original[col])
encoders[col] = le
categorical_options = {
col: list(df_original[col].unique()) for col in categorical_cols_original
}
# --- Load model ---
with open("elevator_model.pkl", "rb") as f:
model = pickle.load(f)
# --- Prediction function ---
def predict_price(
brand_name_str,
lift_type_str,
door_frame_str,
door_type_str,
cabin_material_str,
motor_type_str,
passengers_capacity,
speed_mps,
floors
):
try:
# Encode inputs
input_data = pd.DataFrame([[
encoders['BRAND NAME'].transform([brand_name_str])[0],
encoders['LIFT_TYPE'].transform([lift_type_str])[0],
encoders['DOOR_FRAME'].transform([door_frame_str])[0],
encoders['DOOR_TYPE'].transform([door_type_str])[0],
encoders['CABIN_MATERIAL'].transform([cabin_material_str])[0],
encoders['MOTOR_TYPE'].transform([motor_type_str])[0],
int(passengers_capacity),
float(speed_mps),
int(floors)
]], columns=[
'brand_name', 'lift_type', 'door_frame', 'door_type',
'cabin_material', 'motor_type',
'passengers_capacity', 'speed_mps', 'floors'
])
prediction = model.predict(input_data)[0]
price = float(prediction)
return (
f"### π° Estimated Price: βΉ {price:,.2f}",
"β
Quote generated successfully"
)
except Exception as e:
return f"β Error: {str(e)}", "β οΈ Please check inputs"
#Function to get image path from dropdown
def get_image_path(category, selection):
if selection is None:
return None
# Convert dropdown value β UPPERCASE filename
filename = selection.upper().replace(" ", "_") + ".jpg"
path = os.path.join("Images", category, filename)
return path if os.path.exists(path) else None
# --- Custom UI using Blocks ---
with gr.Blocks(theme=gr.themes.Soft(), title="AB Elevators") as demo:
gr.Markdown("""
<div style="text-align:center; padding:20px;">
<h1 style="color:gold; text-shadow:2px 2px 5px black;">
π AB ELEVATORS
</h1>
<h3>Smart Lift Price Prediction System</h3>
<p>Get instant quotations based on your requirements</p>
</div>
""")
with gr.Row():
with gr.Column():
brand = gr.Dropdown(categorical_options['BRAND NAME'], label="π’ Brand")
lift = gr.Dropdown(categorical_options['LIFT_TYPE'], label="π Lift Type")
lift_img = gr.Image(label="Lift Type Preview", height=150) #Lift_Type Image Display
door_frame = gr.Dropdown(categorical_options['DOOR_FRAME'], label="πͺ Door Frame")
with gr.Column():
door_type = gr.Dropdown(categorical_options['DOOR_TYPE'], label="πͺ Door Type")
door_img = gr.Image(label="Door Type Preview", height=150)
cabin = gr.Dropdown(categorical_options['CABIN_MATERIAL'], label="π§± Cabin Material")
motor = gr.Dropdown(categorical_options['MOTOR_TYPE'], label="βοΈ Motor Type")
motor_img = gr.Image(label="Motor Type Preview", height=150)
gr.Markdown("### π’ Configuration")
with gr.Row():
passengers = gr.Slider(
minimum=int(df_original['PASSENGERS CAPACITY'].min()),
maximum=int(df_original['PASSENGERS CAPACITY'].max()),
step=1,
label="π₯ Passengers Capacity",
value=int(df_original['PASSENGERS CAPACITY'].mean())
)
speed = gr.Slider(
minimum=float(df_original['SPEED_MPS'].min()),
maximum=float(df_original['SPEED_MPS'].max()),
step=0.1,
label="β‘ Speed (MPS)",
value=float(df_original['SPEED_MPS'].mean())
)
floors = gr.Slider(
minimum=int(df_original['FLOORS'].min()),
maximum=int(df_original['FLOORS'].max()),
step=1,
label="π’ Floors",
value=int(df_original['FLOORS'].mean())
)
predict_btn = gr.Button("π‘ Generate Quote", variant="primary")
output_price = gr.Markdown()
output_status = gr.Markdown()
# --- Image Updates ---
lift.change(
fn=lambda x: get_image_path("Lift_Type", x),
inputs=lift,
outputs=lift_img
)
door_type.change(
fn=lambda x: get_image_path("Door_Type", x),
inputs=door_type,
outputs=door_img
)
motor.change(
fn=lambda x: get_image_path("Motor_Type", x),
inputs=motor,
outputs=motor_img
)
predict_btn.click(
fn=predict_price,
inputs=[brand, lift, door_frame, door_type, cabin, motor,
passengers, speed, floors],
outputs=[output_price, output_status]
)
gr.Markdown("""
<hr>
<div style="text-align:center;">
<p>β¨ Designed for AB Elevators | AI Powered Pricing</p>
</div>
""")
# --- Launch ---
demo.launch() |