import gradio as gr import hopsworks import joblib import pandas as pd api = 'UtYWT9JBE4jbsOVW.dzfTExU7QMCzzR51EADTOZCXBzl0VmgB2y012yd8nFTG6v1VHgWazdx2a2SuJAY1' project = hopsworks.login(api_key_value = api) mr = project.get_model_registry() model = mr.get_model("sf_traffic_model_1", version=1) model_dir = model.download() model = joblib.load(model_dir + "/sf_traffic_model_1.pkl") print("Model downloaded") # Mapping functions for each categorical feature def map_time_cat(time_cat): time_cat_mapping = { '2:01 pm to 6:00 pm': 0, '10:01 am to 2:00 pm': 1, '6:01 pm to 10:00 pm': 2, '6:01 am to 10:00 am': 3, '10:01 pm to 2:00 am': 4, '2:01 am to 6:00 am': 5 } return time_cat_mapping.get(time_cat, -1) # Default to -1 for unknown categories def map_party2_move_pre_acc(move): party2_move_mapping = { 'Proceeding Straight': 0, 'Stopped In Road': 1, 'Not Stated': 2, 'Making Left Turn': 3, 'Parked': 4, 'Other': 5, 'Stopped': 6, 'Making Right Turn': 7, 'Slowing/Stopping': 8, 'Entering Traffic': 9, 'Backing': 10, 'Changing Lanes': 11, 'Parking Maneuver': 12, 'Passing Other Vehicle': 13, 'Making U Turn': 14, 'Merging': 15, 'Ran Off Road': 16, 'Traveling Wrong Way': 17, 'Crossed Into Opposing Lane': 18, 'Other Unsafe Turning': 19, 'Crossed Into Opposing Lane - Unplanned': 20 } return party2_move_mapping.get(move, -1) def map_party1_move_pre_acc(move): party1_move_mapping = { 'Proceeding Straight': 0, 'Making Left Turn': 1, 'Making Right Turn': 2, 'Changing Lanes': 3, 'Other': 4, 'Entering Traffic': 5, 'Not Stated': 6, 'Backing': 7, 'Stopped In Road': 8, 'Making U Turn': 9, 'Parked': 10, 'Slowing/Stopping': 11, 'Passing Other Vehicle': 12, 'Traveling Wrong Way': 13, 'Stopped': 14, 'Ran Off Road': 15, 'Other Unsafe Turning': 16, 'Parking Maneuver': 17, 'Crossed Into Opposing Lane': 18, 'Merging': 19, 'Crossed Into Opposing Lane - Unplanned': 20 } return party1_move_mapping.get(move, -1) def map_ped_action(action): ped_action_mapping = { 'No Pedestrian Involved': 0, 'Crossing in Crosswalk at Intersection': 1, 'Crossing Not in Crosswalk': 2, 'In Road, Including Shoulder': 3, 'Not in Road': 4, 'Not Stated': 5, 'Crossing in Crosswalk Not at Intersection': 6, 'Approaching/Leaving School Bus': 7 } return ped_action_mapping.get(action, -1) def map_party1_type(party_type): party1_type_mapping = { 'Driver': 0, 'Bicyclist': 1, 'Pedestrian': 2, 'Other': 3, 'Parked Vehicle': 4, 'Not Stated': 5 } return party1_type_mapping.get(party_type, -1) def map_party2_type(party_type): party2_type_mapping = { 'Driver': 0, 'Pedestrian': 1, 'Bicyclist': 2, 'Parked Vehicle': 3, 'Other': 4, 'Not Stated': 5 } return party2_type_mapping.get(party_type, -1) def map_mviw(mviw): mviw_mapping = { 'Other Motor Vehicle': 0, 'Pedestrian': 1, 'Bicycle': 2, 'Fixed Object': 3, 'Parked Motor Vehicle': 4, 'Non-Collision': 5, 'Not Stated': 6, 'Other Object': 7, 'Motor Vehicle on Other Roadway': 8, 'Train': 9, 'Animal': 10 } return mviw_mapping.get(mviw, -1) def map_intersection(intersection): mapping = { 'Intersection <= 20ft': 0, 'Midblock > 20ft': 1, 'Intersection Rear End <= 150ft': 2 } return mapping.get(intersection, -1) def map_road_cond_1(road_cond): mapping = { 'No Unusual Condition': 0, 'Not Stated': 1, 'Other': 2, 'Construction or Repair Zone': 3, 'Holes, Deep Ruts': 4, 'Obstruction on Roadway': 5, 'Loose Material on Roadway': 6, 'Holes, Deep Rut': 7, 'Reduced Roadway Width': 8, 'Flooded': 9 } return mapping.get(road_cond, -1) def map_control_device(device): mapping = { 'Functioning': 0, 'None': 1, 'Not Stated': 2, 'Not Functioning': 3, 'Obscured': 4 } return mapping.get(device, -1) def map_lighting(lighting): mapping = { 'Daylight': 0, 'Dark - Street Lights': 1, 'Dusk - Dawn': 2, 'Not Stated': 3, 'Dark - No Street Lights': 4, 'Dark - Street Lights Not Functioning': 5 } return mapping.get(lighting, -1) def map_road_surface(surface): mapping = { 'Dry': 0, 'Wet': 1, 'Not Stated': 2, 'Slippery': 3, 'Snowy or Icy': 4 } return mapping.get(surface, -1) def map_type_of_collision(collision): mapping = { 'Broadside': 0, 'Vehicle/Pedestrian': 1, 'Rear End': 2, 'Sideswipe': 3, 'Head-On': 4, 'Other': 5, 'Hit Object': 6, 'Not Stated': 7, 'Overturned': 8 } return mapping.get(collision, -1) def map_weather_condition(conditions): # If 'conditions' is a list with one element, take the first element if isinstance(conditions, list) and len(conditions) == 1: condition = conditions[0] else: condition = conditions # Otherwise, assume it's a single value weather_mapping = { 'Clear': 0, 'Cloudy': 1, 'Raining': 2, 'Fog': 3, 'Other': 4, 'Not Stated': 5, 'Unknown': 6 } return weather_mapping.get(condition, -1) # Default to -1 for unknown categories # Add other mapping functions as necessary def traffic_predict(weather, intersection, road_cond, control_device, lighting, road_surface, collision_type, time_cat, party2_move, party1_move, ped_action, party1_type, party2_type, mviw): # Apply mappings to each input weather_mapped = map_weather_condition(weather) intersection_mapped = map_intersection(intersection) road_cond_mapped = map_road_cond_1(road_cond) control_device_mapped = map_control_device(control_device) lighting_mapped = map_lighting(lighting) road_surface_mapped = map_road_surface(road_surface) collision_type_mapped = map_type_of_collision(collision_type) time_cat_mapped = map_time_cat(time_cat) party2_move_mapped = map_party2_move_pre_acc(party2_move) party1_move_mapped = map_party1_move_pre_acc(party1_move) ped_action_mapped = map_ped_action(ped_action) party1_type_mapped = map_party1_type(party1_type) party2_type_mapped = map_party2_type(party2_type) mviw_mapped = map_mviw(mviw) # Prepare DataFrame for prediction df = pd.DataFrame([[weather_mapped, intersection_mapped, road_cond_mapped, control_device_mapped, lighting_mapped, road_surface_mapped, collision_type_mapped, time_cat_mapped, party2_move_mapped, party1_move_mapped, ped_action_mapped, party1_type_mapped, party2_type_mapped, mviw_mapped]], columns=['weather_1_mapped', 'intersection_mapped', 'road_cond_1_mapped', 'control_device_mapped', 'lighting_mapped', 'road_surface_mapped', 'type_of_collision_mapped', 'time_cat_mapped', 'party2_move_pre_acc_mapped', 'party1_move_pre_acc_mapped', 'ped_action_mapped', 'party1_type_mapped', 'party2_type_mapped', 'mviw_mapped']) # Predict with model prediction = model.predict(df) return prediction[0] # Now, 'mapped_incident_df' contains only the mapped versions of your original categorical variables demo = gr.Interface( fn=traffic_predict, inputs=[ gr.inputs.Dropdown(['Clear', 'Cloudy', 'Raining', 'Fog', 'Other', 'Not Stated', 'Unknown'], label="Weather Condition"), gr.inputs.Dropdown(['Intersection <= 20ft', 'Midblock > 20ft', 'Intersection Rear End <= 150ft'], label="Intersection"), gr.inputs.Dropdown(['No Unusual Condition', 'Not Stated', 'Other', 'Construction or Repair Zone', 'Holes, Deep Ruts', 'Obstruction on Roadway', 'Loose Material on Roadway', 'Holes, Deep Rut', 'Reduced Roadway Width', 'Flooded'], label="Road Condition 1"), gr.inputs.Dropdown(['Functioning', 'None', 'Not Stated', 'Not Functioning', 'Obscured'], label="Control Device"), gr.inputs.Dropdown(['Daylight', 'Dark - Street Lights', 'Dusk - Dawn', 'Not Stated', 'Dark - No Street Lights', 'Dark - Street Lights Not Functioning'], label="Lighting"), gr.inputs.Dropdown(['Dry', 'Wet', 'Not Stated', 'Slippery', 'Snowy or Icy'], label="Road Surface"), gr.inputs.Dropdown(['Broadside', 'Vehicle/Pedestrian', 'Rear End', 'Sideswipe', 'Head-On', 'Other', 'Hit Object', 'Not Stated', 'Overturned'], label="Type of Collision"), gr.inputs.Dropdown(['2:01 pm to 6:00 pm', '10:01 am to 2:00 pm', '6:01 pm to 10:00 pm', '6:01 am to 10:00 am', '10:01 pm to 2:00 am', '2:01 am to 6:00 am'], label="Time Category"), gr.inputs.Dropdown(['Proceeding Straight', 'Stopped In Road', 'Not Stated', 'Making Left Turn', 'Parked', 'Other', 'Stopped', 'Making Right Turn', 'Slowing/Stopping', 'Entering Traffic', 'Backing', 'Changing Lanes', 'Parking Maneuver', 'Passing Other Vehicle', 'Making U Turn', 'Merging', 'Ran Off Road', 'Traveling Wrong Way', 'Crossed Into Opposing Lane', 'Other Unsafe Turning', 'Crossed Into Opposing Lane - Unplanned'], label="Party 2 Movement Pre-Accident"), gr.inputs.Dropdown(['Proceeding Straight', 'Making Left Turn', 'Making Right Turn', 'Changing Lanes', 'Other', 'Entering Traffic', 'Not Stated', 'Backing', 'Stopped In Road', 'Making U Turn', 'Parked', 'Slowing/Stopping', 'Passing Other Vehicle', 'Traveling Wrong Way', 'Stopped', 'Ran Off Road', 'Other Unsafe Turning', 'Parking Maneuver', 'Crossed Into Opposing Lane', 'Merging', 'Crossed Into Opposing Lane - Unplanned'], label="Party 1 Movement Pre-Accident"), gr.inputs.Dropdown(['No Pedestrian Involved', 'Crossing in Crosswalk at Intersection', 'Crossing Not in Crosswalk', 'In Road, Including Shoulder', 'Not in Road', 'Not Stated', 'Crossing in Crosswalk Not at Intersection', 'Approaching/Leaving School Bus'], label="Pedestrian Action"), gr.inputs.Dropdown(['Driver', 'Bicyclist', 'Pedestrian', 'Other', 'Parked Vehicle', 'Not Stated'], label="Party 1 Type"), gr.inputs.Dropdown(['Driver', 'Pedestrian', 'Bicyclist', 'Parked Vehicle', 'Other', 'Not Stated'], label="Party 2 Type"), gr.inputs.Dropdown(['Other Motor Vehicle', 'Pedestrian', 'Bicycle', 'Fixed Object', 'Parked Motor Vehicle', 'Non-Collision', 'Not Stated', 'Other Object', 'Motor Vehicle on Other Roadway', 'Train', 'Animal'], label="MVIW") ], outputs=gr.outputs.Textbox(label="Predicted Severity") ) demo.launch()