Ask any transit control room what "on time" means and the answer comes back in one word: headway. The gap between trains, measured to the minute, is the number that scrolls across every dispatcher's screen, feeds every public countdown clock, and gets reported to the board every quarter. It is also, by itself, close to useless for the question that actually puts riders at risk: how crowded is the platform right now. A line can hold headway to the second and still crush-load a platform in the four minutes before the next train arrives. Nothing on the headway board will show a dispatcher that it happened.
That gap, between what gets measured and what actually endangers a platform, is where Janus's transit work starts. Crowd-flow modeling on a train platform is harder than reading a retail floor or a dining room. People move fast and dwell for only seconds at a time, packing into blind spots a store aisle never has to deal with: the far side of a support pillar, a stairwell mouth, the crush zone just past a fare gate. Solve congestion here, and the payoff is concrete: a live number a dispatcher can act on before the next train pulls in.
What headway hides
Headway measures train spacing, and nothing about how crowded the platform actually is, which is exactly where the two diverge. A train arriving every four minutes, on the second, every time, produces a headway chart that looks flawless for an entire rush hour. It says nothing about what happens on the platform between arrivals, when four minutes' worth of riders bank up at one stairwell mouth while three others sit half-empty.
Crowd scientist John J. Fruin's density research, still the reference point cataloged in Prof. G. Keith Still's crowd-dynamics archive, puts the mechanism in plain terms: pedestrian flow rises with density up to a critical point, roughly two to three people per square meter, past which more people on the same patch of platform means less movement, not more. New York's own transit data bears this out: 6sqft's breakdown of the city's ridership data, drawn from New York Times reporting, ties overcrowding to more than a third of the roughly 75,000 subway delays the system logs each month. None of that shows up as a headway problem until the crush has already happened.
Where the camera loses the platform
A retail floor has blind spots too, but they're static and few: a corner rack, an aisle end. A transit platform builds moving occlusion into its own geometry: a support pillar hides a slice of platform behind every column, and a stairwell mouth is only visible from certain angles as riders climb in and out of frame. Worse, a train pulling in blocks the exact stretch of platform where the crowd is thickest, for the seconds that matter most. Vision systems that treat every camera as equally reliable get the density number wrong in both directions at once.
Janus runs two modules built for that geometry. Camera Blind-Spot Tuning scores each camera's actual coverage of a zone, so a partially obstructed stairwell mouth carries a lower-confidence read than an open stretch of platform, and the density estimate for that zone gets weighted to match. Track Recovery handles the harder job: when a rider disappears behind a pillar or a departing train for two or three seconds and reappears six feet away, it reconnects that as one person crossing a blind spot. Get that wrong at scale and a platform's real headcount either doubles or evaporates, depending on which side of the error a bad model lands on.
The same separation problem shows up with people, too. Train crews, station agents, cleaning staff, and platform announcers move through the same camera frame as riders all day, and a system that can't tell a uniform from a commuter reports every one of them as congestion. Janus already draws that line elsewhere in its deployments; on a platform it just runs against a faster clock, a crush building in seconds instead of minutes.
Camera feed, real geometry
Pillars, stairwell mouths, and fare-gate crush zones sit inside the frame, not around it.
Camera Blind-Spot Tuning
Each zone gets a coverage-confidence score based on what the camera can actually see, so a half-hidden stairwell reads differently than an open platform stretch.
Track Recovery
A rider who disappears behind a pillar or a departing train for two or three seconds is reconnected to their own track and counted once.
Confidence-scored density
A zone-level congestion read, updated every 42ms, with a 94% confidence score attached to the number itself.
A train can hold its headway to the second and still let a platform crush-load in the four minutes before the next one arrives. The schedule was never built to see that. The camera has to.
What the heat-timeline shows
Put both signals side by side, headway and platform density, across a single rush-hour window, and the shape of the problem shows up in a way no headway report ever will. On a mid-size interchange platform Janus instrumented for a transit pilot, trains held a steady four-minute headway through the entire half-hour window below. Every arrival lands exactly where the schedule says it should. The density read tells a different story: between arrivals, at one stairwell mouth in particular, the platform repeatedly climbed past the point Fruin's research marks as constrained flow, cleared just before the next train, and did it again.
That same congestion data used to surface in a weekly report. Once it started reaching the dispatcher live, the response on the platform changed: a second stairwell opened during the worst ten minutes of the peak, and announcements began steering riders toward the underused end before it crowded. Door-hold timers, once fixed, started factoring in real density. Headway never moved. Time the platform spent above the constrained-flow threshold across that same window fell 19%.
What 42ms buys a dispatcher
None of those three interventions work off a dashboard checked between trains. A platform crossing into crush load gives a control room a window measured in seconds, and a report that refreshes every few minutes describes a crowd that has already dispersed or already been hurt. Janus's zone-level density model runs at 42ms latency with a 94% confidence score attached to every reading, the same engineering constraint the product holds on a restaurant floor or a convenience-store aisle, applied here to a problem with a much shorter fuse.
A 2020 study in Transportmetrica A: Transport Science found that user-induced delay, riders physically unable to board because of platform crowding, adds roughly 3.7 seconds to a single subway stop. That sounds small until it compounds across a rush hour running trains every four minutes. It's also the cost of finding out about congestion after it has already slowed a train down. A live density read, fast enough to act on before the doors close, is the difference between a dispatcher reacting to a crush and one who saw it building three trains earlier.
The headway board will keep saying the trains are on time, because that's the only thing it was built to measure. Everyone else finds out about the crush from a rider's phone.
See congestion before the platform crushes.
Janus scores platform density zone by zone at 42ms latency with a 94% confidence score on every reading, so a dispatcher can act on congestion before the next train, while it's still fixable.