Inspiration

What it does

After the user selects a location on the map, our platform performs three things:

  1. Identify and outline urban heat islands in the neighborhood
  2. Locate specific streets where a) temperature is high, b) trees are underutilized, c) the sidewalks are wide enough to plant trees
  3. Propose a solution with a) visualization of what each street would look like with tree canopy, b) recommendations of native tree species that can be planted, c) estimate the benefits of this course of action

How we built it

Part I. Overlaying heat, canopy, and air pollution data on the map

  • Heat data: we used Mateo Blue's surface temperature API
  • Canopy (trees): there's no direct canopy dataset, so we bootstrapped with Google Maps' Satellite API. We scanned a 5-mile radius from a point of interest. To calculate canopy density, we built a lightweight computer vision algorithm from scratch to detect trees in aerial images.
  • Air pollution: we used Google's pollution API.
  • Map: @Jenny @Balaji carried us
  • Part I isolates specific small regions in a large radius that have potential to be improved via tree planting. Next:

Part II. Identifying specific streets suitable for planting trees

  • Getting street view: Google StreetView API
  • Assessing whether street 1) already has a canopy presence, 2) if not, does it have space for trees to grow: we used OpenAI's CLIP API @Andy

Part III: Recommendation and details for planting trees on this street:

  • Generating visualization of what the street could be like if it had canopy: we integrated OpenAI's Dall-E API
  • Finding suitable trees to be planted in this region (soil, climate, maintenance, and we want to promote native species): we applied OpenAI's GPT-3 API
  • Benefit estimation: we drew conclusions from research papers (here's a meta study)

Front and Back End:

Balaji and Jenny took care of arguably the nastiest part of this project - the front-end, which consists of building a map using the Leaflet library, overlaying data on it (drawing them polygons and coloring them shades), working with kml and geojson files, marking user input coordinates

Andy and Ryan took care of the algorithm and the backend, creating computer vision algorithms, applying LLMs, and ensuring the Python code used for the LLM works in the Typescript environment of our overall project.

Challenges we ran into

Bottlenecks from big to small

  1. Adding trees to a street is surprisingly hard. Generative models aren't good at adding objects without altering the rest of the picture. We tried using Stable Diffusion, ControlNet, Dreambooth to finetune Stable Diffusion, Dall-E, creating pipelines of two foundation models, and countless variations of prompts and parameters. We gave it our best shot and eventually found a set of prompts that generated good results.
  2. Assessing canopy coverage (which streets lack trees) took us a long time. Because 1) we needed fine-grained, street-level data; 2) the closest match, Google's canopy dataset is inaccessible as it has a waitlist; 3) tree classification is difficult because we needed to iterate through hundreds of satellites images. So, we created our own dataset from raw satellite images and an in-house computer vision algorithm (>95% accuracy, processing 50 images in <5 seconds).
  3. Map. Perseverance. Patience.
  4. Google's StreetView image defaults to a northern direction. Their photographer-pov API has been deprecated. So we created our own computer vision model to ensure that our street view faces down the street.
  5. Finding the right datasets, reformating them, and parsing GBs of data to fit our application.

Accomplishments that we're proud of

We LEARNED so much! From how to fine-tune stable diffusion to working with Leaflet map library. Each one of us walked away doing something we had no idea how to do a day ago.

Memories we made

  • Getting kicked out from the MIT lounge coaches at 4 a.m. Sat
  • Going for a run around the track in the dark at 1 a.m. Sun
  • Jeopardizing each other's API keys
  • Ramen, red bull, sunrise, sunset

Built With

Share this project:

Updates