WIUT Hackathon 2026 · Computer Vision track

Reading a road camera the way a traffic officer would.

TrafficTrak watches video from one fixed CCTV camera and reports every traffic event (crashes, near misses, red-light runners, wrong-way drivers, jaywalkers and more) as precise time segments. It also estimates, frame by frame, the chance that an accident is about to happen. It runs fully offline on one GPU, using only open models.

14event types, each with an explicit rule
2.0×4K video length to process, CPU only (limit 3×)
137 MBof open model weights (limit 5 GB)
70automated tests

How it works

One learned component does the seeing. Everything that decides what counts as an event is written as an explicit, auditable rule, so every alert can be explained.

Decode

Every 2nd frame on a GPU, read in a background thread. Timestamps are frame index ÷ fps.

Detect

YOLOX-M (open, Apache-2.0) finds cars, buses, trucks, bikes, people and animals.

Track

A ByteTrack-style tracker keeps each road user's identity through occlusions.

Understand the scene

Lanes, stop lines and crossings from a calibration file, plus the normal traffic flow learned from the video itself.

Apply rules

One state machine per event type turns trajectories into start and end times.

Clean up

Merge fragments, drop blips, never overlap two events of the same type.

Speeds measured in car lengths, not pixels

A car far away moves only a few pixels per second; a close one moves hundreds. We measure every speed in units of the object's own size, so one threshold means the same thing near and far from the camera, with no camera calibration needed.

The camera never moves, so the scene can be learned

Where traffic normally drives, and in which direction, is learned from the vehicles themselves. A driver going against that learned flow is flagged as wrong-way. Parked cars at the kerb, where traffic never drives, are not mistaken for stopped vehicles.

Fourteen event types, one rule each

The official metric punishes guessing: one false alert of a type that never occurs costs as much as missing a whole class. So each rule only fires when its evidence is present, and rules that need road markings stay silent until those markings are calibrated.

EventHow it is detectedStatus
accidentVisible contact between road users, plus sudden braking and a jolt, then both stopActive
near_missTime-to-collision under 1 s with hard braking or swerving, and no contactActive
wrong_waySustained heading opposite to the lane or learned traffic directionActive
stopped_vehicleStill for ≥ 10 s on the road while other traffic passes it (not a signal queue)Active
congestionA whole direction of traffic crawling or standing for ≥ 30 sActive
road_obstacleAnimals on the carriageway (background-change debris detector available, off by default at this busy scene)Active
red_lightVehicle front crosses the stop line while the traffic light has been redOff: signal phases unknown
stop_lineVehicle stops past the stop line on red, until the light turns greenOff: signal phases unknown
jaywalkingPedestrian on the carriageway outside a crossing; standing riders whose scooter was not detected are excludedActive · calibrated
failure_to_yieldMoving vehicle drives through a crossing with a walking pedestrian on the zebra right in front of itActive · calibrated
solid_line_crossingWheel positions change sides of a solid markingNeeds calibration
illegal_turnTrajectory from a prohibited "from" zone into its "to" zoneNeeds calibration
illegal_u_turnHeading reverses ≥ 150° where U-turns are prohibitedNeeds calibration
fire_smokeOptional image classifier; off unless its weights are suppliedOptional
Active works on any video Active · calibrated uses the crossings measured on the challenge camera Needs calibration switches on once the matching road markings are drawn in the calibration tool

Seeing an accident before it happens

For every frame, TrafficTrak estimates the probability that an accident starts within the next five seconds. It uses only the frames it has already seen, the way a live system would.

Conflict

Two road users on a collision course: predicted closest approach, time to collision and closing speed.

Evasive action

Hard braking or a sudden swerve by either of them.

Violation

Wrong-way driving, a pedestrian on the road, or a car approaching a red light at speed.

risk = sigmoid( −4 + 3·conflict + 2·evasive + 1.5·violation + 1.5·conflict·evasive )

The weights are chosen so that no single signal can raise an alarm on its own; only agreeing signals cross 0.5. An alarm must also hold for half a second, so one noisy frame cannot trigger it. Pairs of objects of very different sizes are ignored, because they are at different distances from the camera and only look close in the picture.

On the challenge camera

The organisers' sample is a 4K view of a signal-controlled intersection in Tashkent at dusk: a divided avenue, three zebra crossings, traffic lights and a lot of pedestrians. We measured that the camera never moves (0 px shift, 0° rotation across the clip), so everything calibrated on the sample holds for the test videos.

Empty-road view of the intersection with the three crossings outlined and the driven road area shaded green
Calibrated scene. The three zebra crossings (white) are measured on the paint, and the islands are marked as pedestrian refuges. The road area (green) is learned from where 191 tracked vehicles actually drove.
White car driving across a zebra crossing with three pedestrians walking right in front of it
Detected: failure to yield. A car turns through the crossing while pedestrians walk on the zebra right in front of it (38.9–40.5 s).

From 70 alerts to 4, by checking every one

Every alert was checked against the video. Grey bars are alerts that turned out to be false; the blue bar is the final output, where every detection was confirmed on the frames.

What the real footage taught us

  • Cars waiting at a red light are not "stopped vehicles": places where vehicles normally stop are learned and skipped.
  • A 60-second red-light queue is not congestion: it must last at least 90 s.
  • Turning looks like swerving: a near miss now needs hard braking and a real collision course.
  • Pedestrians waiting at the kerb are not "on" the crossing: they must be walking on the zebra, right in front of the car.
  • A delivery rider waiting in the queue looked like a jaywalker (the detector missed the scooter): squat, stationary "people" in the vehicle queue are now treated as riders.

Tested on real footage

We ran the complete system through the organisers' own harness and scorer on real, openly licensed CCTV clips. Every false alert these tests uncovered was traced to its cause and fixed.

Street camera frame with every car outlined and numbered by the tracker
Normal traffic. All 20 cars tracked, no events reported, which is correct. Cars parked at the kerb are not mistaken for stopped vehicles.
Frame with a red wrong-way banner and red boxes on cars driving against traffic
Wrong-way test. From 25 s the clip plays in reverse, so cars drive against traffic. Detected at 25.17 s, against a true start of 24.99 s.
Timeline chart: one wrong_way bar from 25 to 37 seconds; below it the risk curve stays under the 0.5 alarm line
Event timeline and accident-risk curve for the wrong-way test. The official scorer matched the event exactly (F1 = 1.0 at every tIoU threshold). The risk score crosses 0.5 once, at 33.7 s, when a wrong-way car closes in on oncoming traffic while braking, the moment when three warning signs agree.

Processing time against the budget

Official harness, CPU only (no GPU). The grey line marks the organisers' limit of 3× the video length.

What testing caught and fixed

  • A car stopping next to a parked car looked like a near miss; parked, off-road cars are now excluded.
  • The learned "road area" leaked onto the kerb once more footage was added; the threshold is now relative.
  • A near car and a far car seemed to converge in the image; objects at different depths are now ignored.
  • If the judges' GPU drivers fail, the system switches to a smaller model instead of running out of time.

Built to be trusted

Deterministic

Fixed seeds, deterministic GPU kernels and stable ordering: the same video always gives the same answer.

Never crashes the harness

Corrupt files, missing weights and unreadable frames return an empty result with a logged warning, never an exception.

Stays inside the time budget

Two emergency limiters, one each for detection and risk, cut work before the 3× limit. They never trigger on the target GPU.

Open and offline

YOLOX (Apache-2.0) weights are downloaded once and checksummed. No paid API or online service is used at any point.

Tested

70 tests cover at least one scenario for every event type, output validity, runtime safety and the causality of the risk score.

Tools for people

A click-to-draw calibration page, a review tool that turns checked detections into labels, and an upload demo.

Upload demo page showing metrics, annotated playback and the timeline panel
Upload demo. Drop in a video to get events, annotated playback, a clickable timeline and the risk curve. Here: the wrong-way test clip, analysed in 0.99× its length on a laptop-class CPU.
Calibration page with a road polygon and a traffic-light box drawn on a camera frame
Calibration tool. Click the road, lanes, stop line and traffic light on a frame; it exports the scene file.

Honest limitations

  • Red light and stop line stay off: which signal controls which stop line was not provided, and a wrong guess would cost two whole classes.
  • Solid-line, turn and U-turn rules need road markings that were not provided for this camera.
  • The detector is trained on everyday photos; it struggles with cameras that look straight down at the road.
  • Without a ground-plane calibration, speeds are estimated in the image, so they are noisier far from the camera.
  • Thresholds are principled defaults; tuning them needs labelled footage from this camera.

The team

Computer science students from Tashkent who like building things that make everyday life safer.

Amir Pulatov

Project lead · UI/UX

Amir is a Computer Science and Engineering student and UI/UX designer who likes turning ideas into intuitive, user-friendly products. On TrafficTrak he led the project: he steered the direction, managed the repository and integrated the organisers' starter kit, and ran and tested the system himself on real traffic video on macOS.

LinkedIn →

Roman Kim

Computer Science, INHA University in Tashkent

Roman is a first-year Computer Science student with a strong commitment to international youth initiatives and community leadership. He has represented countries as a Model UN delegate, volunteered with UN Volunteers, and provided technical support for the International Chemistry and Informatics Olympiads. He recently led a cross-border student initiative that brought about 150 students from four countries together for six interactive discussions.

LinkedIn →

Madina Karimova

Computer & Information Engineering, INHA University in Tashkent

Madina is interested in technology, research and human-centred innovation. She has worked on educational technology projects, software development and interdisciplinary research, including a study of algorithmic decision-making and its influence on human behaviour. Her interests include accessible science education, human–computer interaction, behavioural research, journalism and narrative writing.

LinkedIn →