A real-time CV system that reads parking-lot occupancy from the cameras already on the poles — no ground sensors, no per-bay hardware. It detects each vehicle the moment it parks, tracks every bay's state live, and flags the cars that have overstayed.

Drivers circled for a spot while attendants guessed at occupancy from a clipboard, and no one could say which car had overstayed the two-hour zone. Sensor-based systems existed, but they meant burying a loop detector or magnetometer under every bay — a dig-up nobody wanted to fund.
The brief: read occupancy from the cameras already on the light poles. Detect when a vehicle parks, track each bay's state, time how long it's held — and surface free spots, counts, and overstays on one live screen, processed straight on the feed.
YOLO11 detects every vehicle on the feed with per-detection confidence, and ByteTrack holds a stable ID on each one across frames — so a car edging into a bay isn't double-counted as it settles.
Each bay is drawn once as a polygon ROI mapped to the camera's perspective. A detection settled inside a zone marks that bay occupied; a per-bay state machine runs Free → Occupied → Overstay against the lot's time limit.
A live panel shows all sixteen bays, their state, free-spot count, and dwell time per vehicle — counting from the second it parked. Bays past the time limit raise an overstay alert, rendered straight onto the feed with OpenCV.
We used to send someone out to walk the lot. Now one screen tells me exactly how many bays are free, where they are, and which car's overstayed its limit — live.
Every bay mapped as a polygon zone on a single pole-mounted feed — occupancy, dwell time, and overstays, all read from one frame.
No loop detectors, no per-bay magnetometers, no trenching. The system runs on the cameras the lot already had on its poles.
Detection, tracking, zone logic, and dashboard rendering all run at frame rate — a spot freeing up shows almost the instant it happens.
Live bay status, detection overlay, and zone map — everything the lot operator needs in one screen.