Real crowds in real buildings — what worked, what didn't, and the reframe
Campaign: c-public-spaces · Session: 01KY0RR3SS30H1P6NP9QXM434Y · Substrate: S3DIS (real scanned Stanford building, areas 1/5/6) · 6 coupled runs on Metal
Executive summary
We took a real scanned building — real rooms, real furniture, no invented geometry — made it crowd-walkable, and ran real crowds whose phones emit WiFi traffic into a ray-traced channel, across three floors. The flow & dwell showcase works (an interactive atlas of 244 agents and 22,482 device emissions). The crowd-counting results are honestly weak: within a floor, WiFi counts the crowd well on one floor (R²=0.64) and barely on the others (0.05, 0.01), and a counter trained on one floor does not transfer to another. The reason is physical and, in hindsight, the whole point: walls block the radio, so a ceiling access point mostly senses its own room. Counting a walled building from a few scattered sensors is the wrong question — and that realisation is the campaign's real output.
What we built (the durable value)
The hard part was infrastructure: real dataset floors are not crowd-simulable out of the box (per-room walls, no doors, no navigation graph). The osm_clean toolkit now makes any imported floor sim-ready (synthesize doorways, build NRG, close scan gaps, place APs). That — plus the reusable importer, the counting/transfer reducer, and the atlas — is what persists.
Results
Goal 2 — flow & dwell (works). Three real floors, office agendas, tuned crowd; 244 agents, 22,482 WiFi device-traffic emissions, coupled CSI, all gate-passed. The atlas shows real paths threading real corridors and dwell hotspots where seated workers' devices emitted. Resolved: yes.
Goal 1 — counting fidelity (weak, floor-dependent). Device-free (fixed Tx→24 APs, body-perturbation) within-space R²: area1 0.64, area5 0.05, area6 0.01. Counting succeeds only where a ceiling AP happens to share line-of-sight with an occupied room. Device-based sensing is worse — only 3 of 7,128 seated-phone→AP links penetrate the walls. Resolved: yes, negative.
Goal 3 — cross-space transfer (fails). Train-on-A / test-on-B R² is uniformly negative (−3 to −67). A counter is geometry-specific and does not port between real floors — consistent with the thesis's "fingerprints don't transfer". Resolved: yes, negative.
The reframe (why this matters despite the null)
The occlusion is not a failure mode — it is the defining feature of indoor CSI sensing: an access point sees ~its own room. Three consequences reset the research question:
- CSI counting is per-room, not building-wide. Building occupancy = Σ per-room counts. The right question is a coverage/placement one: how many sensors, where, to count every room — the mall placement-oracle elevated to real multi-room buildings, where the walls define the decomposition.
- Passive device counting must be association-based, not ray-traced cross-room CSI: count the devices each AP serves (its room), not the CSI it can trace through walls.
- This is a direct argument for BLE-calibrated CSI (the thesis): a coarse room-assignment signal (BLE / device association) says which room a person is in; CSI counts within that room. Neither alone counts a walled building — which is exactly what this campaign showed. The failure of CSI-alone is the setup for the fusion win.
What it means / next
The genuinely valuable follow-on is a per-room counting + sensor-placement coverage study with BLE room-assignment fusion on these same real floors — turning the occlusion from the thing that defeated us into the structure the method exploits. Everything here is ray-traced simulation on real geometry: a hypothesis generator, and a strong motivation for the fusion architecture, until a real AX210/Pi5 walled floor (IP-106/IP-112) confirms the physics.
Figures: fig_device_counting.png (counting + transfer), the S3DIS floor + heatmap; interactive atlas as a published Artifact.