Scene Annotation Pipeline

Complete pipeline for annotating places and transit in the scene

Published: 6/19/2025 Last updated: 6/19/2025
By Virtual Community Team

Run

  1. Prepare the Google Maps Platform API key with Places API enabled and create google_map_api.txt under the root directory. Then, paste the key into google_map_api.txt
  2. Open scripts/annotate_scene_all.sh and modify the scene(s) you want to annotate, for example, if you want to annotate LONDON: SCENES=(LONDON)
  3. Run bash scripts/annotate_scene_all.sh to start annotation process

Reminders

The script supports annotating multiple scenes at once, for example, SCENES=(LONDON TORONTO), but we recommend annotating one scene at a time.

Procedure Overview

There are 3 steps in the annotation pipeline. We provide an overview of main sub-steps of each step. Please refer to the source code for full sub-steps.

Step 1: Prepare necessary files

Move center.txt, building_to_osm_tags.json, and road data from Genesis/genesis/assets/ViCo/scene/v1/SCENE to ViCo/assets/scenes/SCENE.

Step 2: Annotate scene places

  1. Take the top-down bird’s-eye view (i.e., global image global.png) of the scene, and save the global camera parameters in global_cam_parameters.json
  2. Search places using the Google Maps Platform API. If too few places are found, lower search_resolution
  3. Filter places. filter_distance_square presets to 300, which means filtered places are in the range of 300m x 300m
  4. Generate oriented bounding boxes of all loaded buildings in the format of (cx,cy,cz,dx,dy,dz,theta)
  5. Generate the obstacle grid and its parameters in obstacle_grid.pkl
  6. Generate scene-level metadata through accessibility filtering, extra places pruning, probabilistic place filtering, and place/building metadata alignment. This step generates place_metadata.json and building_metadata.json
  7. (Optional) Annotate the global image global_annotated.png for places

Step 3: Annotate transit and annotate the global image for places and transit

  1. Generate place clusters for bus, controlled by num_bus_clusters
  2. Generate bus routes and stops nearest to place clusters for bus
  3. Compute bus schedules
  4. Generate place clusters for bicycle, controlled by num_bicycle_clusters
  5. Generate bicycle stations nearest to place clusters for bicycle
  6. Generate the annotation image transit.png for transit
  7. Annotate the global image global_annotated.png for places and transit