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