Inspiration

There are a lot of dark spots on campus “for the peace of mind” - LUX slogan

What it does

  • lx is a measured night-light map of Texas A&M's main campus
  • iPhone app (Walker UI) — walkers survey assigned routes; logs light, GPS and a photo every second
  • Survey Control website — dispatches walkers live, shows coverage, suggests the next routes to walk
  • Light Map — every footpath colored by measured lux, street lamps, possibly-out lamps, low-light warnings
  • Light View — walk any route in 3D through a point cloud built from our own photos

The dataset (collected by us)

  • When: night of Nov 7, 2026 · 6:40–9:00 pm · 3 walkers · ~7hrs of data
  • Light: front camera pointed up through a paper diffuser → converted to lux (~15 Hz)
  • Photos: back camera, 1 per second, with GPS and exposure
  • 284,086 raw light readings → 17,715 clean 1-per-second readings
  • 3,622 footpath stretches with measured lux
  • 721 street lamps located ·
  • 1,648 trees · 507 low-light warnings (121 high)
  • Light model check: median error 1.38 lux on held-out readings

How we built it

Vultr Cloud GPU (NVIDIA A16)

  • Privacy blur + object detection (YOLOv8x + YOLOv8-Face): 17,607 photos in 18 min
  • Lights, trees, emergency phones (YOLO-World): 26,430 objects found
  • Depth + scene (Depth Anything V2 + SegFormer): 17,607 photos in 59 min
  • Lamp mapping (triangulation + OpenStreetMap): 284k readings in 2 min
  • 3D point cloud (depth fusion): 44M points → 2.5M from 5,874 frames
  • Job runner pulled scripts from GitHub, ran them in order, pushed results back

MongoDB Atlas — database + live API

  • 72,758 documents · 18.72 MB in database lux_survey
  • Collections: readings, segments, routes + bins, walks, photos, detections, walkers
  • 31 indexes, incl. 2dsphere geo indexes for $near / $geoNear location queries
  • Powers: map stats, route scoring, coverage of each route, route suggestions, live walker tracking

App + web

  • iPhone app: SwiftUI (iOS 17)
  • Website: three.js + ES modules (static), hosted on Netlify
  • API: Netlify Functions (Node) + MongoDB driver

Challenges we ran into

  • Car headlights and passing lights spiking readings — filtered 18,175 + 8,146 moments
  • Privacy — every face and number plate blurred before anything was used

Accomplishments that we're proud of

Optimized workflow

Part 1: Collecting the Data

  1. Build the app — built the app and the live dashboard
  2. Walk and record
  3. Watch live

Part 2: Processing the Data

  1. Queue jobs — GitHub
  2. Blur · clean · map
  3. Store the dataset
  4. Website — results back every 30 s to the Control Center

Walker UI

  • Navigation: turn-by-turn directions with voice prompts
  • Route progress for the current part and the whole route
  • "Guide me back" leads walkers to missed pieces
  • Resume picks up at the first gap
  • Live capture: live light reading (lux) in the corner, back-camera view
  • Stats: photo count, GPS accuracy, battery and time left
  • Mark button to flag a blocked path
  • Route indicators: red = still to record · orange with red stripes = captured · faded = missed
  • Route calculation: each loop cut into 4 parts, with checkpoints
  • Route divided into 10 m pieces; each needs 3 light readings and 1 photo
  • Records only within 20 m of the route with a GPS fix

Command UI

  • Live map: every walker's position and direction
  • Progress drawn over the planned routes
  • Walker cards: % captured, current part, gaps, lux
  • Battery, GPS, storage and uploads
  • Problems feed: phones report in every 2 seconds
  • Flags "no signal" after 20 seconds

What we learned

  • Real-world sensor data is messy — cleaning is most of the work
  • Geo indexes in MongoDB make location queries simple and fast
  • A single cloud GPU can process a whole night of photos in about an hour

What's next for lx

  • Survey more nights and the rest of campus
  • Share possibly-out lamps with campus facilities
  • Turn-by-turn best-lit walking directions for students

Links

Team

  • Shourjo Majumder · Jonathan Kolagani · Rhett Rangel · Raman Jamal

Built With

Share this project:

Updates

Submission history