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("""

🚀 AB ELEVATORS

Smart Lift Price Prediction System

Get instant quotations based on your requirements

""") 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("""

✨ Designed for AB Elevators | AI Powered Pricing

""") # --- Launch --- demo.launch()