Exploratory analysis

What is in the footage

Four clips from one camera on 18 September 2026, from late morning to dusk. Before writing any rule we looked at who uses the junction, when, and where they actually walk and drive.

The clips

ClipLocal timeBrightnessLightResolutionfpsLengthBitrateOur labels
C38962026-09-18 11:18:2494midday sun, hard shadows3840x216029.975:40.3140 Mbit/s25
C38972026-09-18 11:24:4794midday sun, hard shadows3840x216029.975:17.8140 Mbit/s30
C39022026-09-18 16:58:1865low sun, long shadows3840x216029.975:17.8140 Mbit/s27
C39052026-09-18 17:22:2143dusk, underexposed, headlights on3840x216029.972:07.6140 Mbit/s16

Brightness is the mean grey level (0 to 255) of frames sampled every 10 s. All clips are h264 High 4:2:2, yuv422p10le.

Road users over time

Distinct tracked road users per 5 s, by class, from our tracks. Click a class in the legend to hide it; hover or tap the chart for values.

Traffic by time of day

How many vehicles are in view at once, split into moving and standing (40 px/s), and how many people the detector sees, as the mean per frame over each clip. Below, the same per 5 s. The standing count rises and falls with the red phase.

07.51522.53011.917.518.311:18:24C3896midday sun10.914.323.011:24:47C3897midday sun13.316.427.616:58:18C3902low sun13.317.322.217:22:21C3905dusk
moving vehicles standing vehicles people
C3896 from 11:18:24, midday sun
C3897 from 11:24:47, midday sun
C3902 from 16:58:18, low sun
C3905 from 17:22:21, dusk

Signal plans

From our reader of the three-lamp head on the median nose, measured from one phase change to the next over complete phases. Green includes its flashing end. The afternoon plan lights yellow together with red for the last 3 s of red; that counts as red here.

75 s cycle C3896, C3897

80 s cycle C3902, C3905

ClipFull cyclesGreenYellowRedCycleUnreadable
C3896 11:18:24436.0 s3.0 s36.1 s75.0 s0.0 s
C3897 11:24:47336.0 s3.0 s36.0 s75.1 s0.0 s
C3902 16:58:18338.0 s3.0 s39.0 s80.1 s10.6 s
C3905 17:22:21137.9 s3.0 s39.0 s79.9 s0.0 s

Where pedestrians are

Every tracked pedestrian position in the four clips (10 per second per person), by where the feet are. Riders and people seen through car windows are left out, as in the rules. "On the carriageway" means the area vehicles actually drive on, a margin away from the kerbs.

Events in our dev labels

98 events over 18.4 minutes. How the labels were made is on the report page.

ClassEventsClipsMedian lengthTotal
Failure to yield4241.7 s1:30.2
Jaywalking28410.6 s6:48.0
Illegal U-turn9436.4 s4:48.1
Stopped vehicle74127.5 s17:05.6
Stop line5436.0 s2:28.4
Congestion3123.0 s1:05.5
Illegal turn229.7 s0:19.3
Red light2219.3 s0:38.6

Where things move

All four clips, mapped into the reference view.

Where vehicles drive
Where vehicles drive. Foot points of vehicles moving faster than 40 px/s in the reference view, all four clips, blurred and on a log scale.
Where people walk
Where people walk. The same for pedestrians, moving or standing, with riders and people seen through car windows left out. Paths that leave the two zebras are the desire lines the jaywalking rule has to catch.
Trajectories
Trajectories. Every vehicle and person track with at least 15 samples, mapped into the reference view, drawn where it moves at 15 px/s or more and coloured by heading.
Lane direction field
Lane direction field. Mean heading of vehicles moving faster than 60 px/s per 40 px cell. Short arrows mark cells where headings disagree. The wrong_way rule compares each vehicle with the legal direction of its carriageway.

What this changed in our solution

  1. The clips are not framed the same. The afternoon ones are shifted by up to about 60 px and zoomed by 1 to 2% against the morning ones, so every zone is drawn once in a reference view and each clip is registered onto it with a homography.
  2. The signal plan changes during the day: a cycle of 75 s (36 s green, 3 s yellow, 36 s red) in C3896 and C3897, and 80 s (38 s green, 3 s yellow, 39 s red) in C3902 and C3905. The rules read the phase from the lamps in every sampled frame instead of assuming a timetable.
  3. The southbound queue stands through every red, 36 to 39 s. So stopped_vehicle ignores the southbound approach, and congestion only counts a queue that still stands 8 s into the green.
  4. 5.7% of pedestrian positions are on the carriageway outside a zebra, against 21.2% on a zebra. The rest, 73.1%, are on pavements, kerbs, islands and the median, which is where the jaywalking rule must not fire.
  5. Failure to yield is the most frequent event in our labels and a short one: median 1.7 s from the car entering the zebra to leaving it. At 5 fps that is about 9 frames, and on our labels 5 fps drops failure_to_yield F1 from 0.504 to 0.413 (the FTY column of the ablations on the Results page), which is why Part A samples 10 frames per second.
  6. The dusk clip is much darker than the midday ones (mean brightness 43 against 94 out of 255), so registration matches every clip against a dusk reference as well as a midday one.