Computer Vision Parking Occupancy Detection

Live occupancy for a whole deck, read from the cameras already mounted on the ceiling.

AIA downtown parking operator202519 weeks to the first live deck

The roof deck of a downtown parking garage at golden hour, with cars ranked along one side, a single empty space in the foreground, and the bay and the skyline beyond

What It Came To

  • Zero

    Sensors Installed in the Slab

    The system runs on the cameras the building already carried. No coring, no per-stall batteries, and no radio survey.

  • Per row

    Granularity Delivered to the Operator

    Not a single total. Which level, which row, and how each row behaves across the trading day.

  • No plates, no faces

    Scope of the Label Schema

    Vehicles and stall boundaries. Number plates and people were never part of the label schema, which kept the privacy assessment short.

The operator knew how many vehicles had passed the gate and nothing about where they had stopped. Levels filled unevenly, drivers circled a structure that was two-thirds empty, and the only reliable count required a member of staff walking the deck with a clipboard.

Live occupancy is read from the cameras already installed in the structure. Operators hold counts by level and row and enough history to staff against, and drivers are directed to space that is genuinely available.

The Measurement Problem

The central figure for a parking operator is how many spaces are free. Most operators do not hold it. They hold a gate count, which begins drifting the first time a vehicle tailgates through the arm or a monthly permit holder leaves a car and walks out. They hold a member of staff who checks the levels when time allows. And they hold complaints, which arrive at precisely the moments the figure would have been most useful.

The failure mode is worse than an inaccurate total, because a deck does not fill evenly. The ground floor and the level nearest the lift fill first. The top deck fills last, and in summer it does not fill at all. A structure at seventy per cent occupancy therefore behaves like a full one: drivers enter, climb two levels, see nothing, and leave. The gate count reports that space exists. Nothing reports where.

The Governing Constraint

The requirement was to establish occupancy without installing a sensor in every stall.

Per-stall sensing is the obvious approach and it is the reason most projects of this kind are costed once and never started. Every bay requires a puck cored into the slab or a head mounted above it. Each of those carries a battery with a finite life, a radio that has to reach a gateway through several thousand tonnes of reinforced concrete, and a permanent maintenance obligation. The installation alone closes levels for days. For a facility of a few hundred bays, the hardware is the small number.

The cameras were already present. Every deck carried them, directed down the rows, recording to an NVR that no one watched unless an incident had occurred. They were mediocre cameras in mediocre positions, which proved to be the interesting engineering problem rather than a reason to replace them.

A camera survey therefore preceded any commitment on coverage. Two positions on this site had been mounted for an entirely different purpose and could not resolve the far end of a row at any resolution. A model cannot recover information the optics never captured, and the accurate answer for those two positions was to move the camera.

What Was Built

A vision model was trained on real footage from the site, including glare, weather, and delivery vehicles parked across two bays, and deployed behind an inference service that reports continuously.

The use of real footage carries most of the design. Public parking datasets are clean: overhead, evenly lit, vehicles parked between the lines. An operating deck in late afternoon presents low sun directly into the lens along the west rows, blooming headlights, standing water producing a second copy of every vehicle, and a box van across two bays with its rear door raised. A model trained on the clean data performs excellently until any of that occurs, which is the point at which the operator requires it.

The dataset was therefore drawn from the operator’s own NVR, sampled deliberately across hours, weather, and seasons rather than uniformly. The detector is a YOLO-family model, exported to ONNX and run on a Jetson at the edge of each structure. Stall geometry is drawn once during commissioning rather than learned, as polygons on a still frame from each camera, in a small purpose-built tool, because the alternative places that task with the engineering team permanently and requires a return visit every time a camera is disturbed.

Engineering Decisions

Detect vehicles, determine stalls separately. The model answers one question: where the vehicles are in this frame. Everything concerning occupancy is deterministic code above it, evaluating whether a detection footprint falls inside a stall polygon, by a sufficient margin, for a sufficient duration. Keeping the two apart means a camera can be nudged, a row can be restriped, or a level can be turned over to valet operation without retraining anything. It also makes the occupancy rules testable in the ordinary way, against recorded frames with known answers.

Inference at the edge. Sending nine streams of video off-site for scoring in the cloud is simpler technically and a poor operational trade. The uplink at a building of this type is a business DSL line shared with the payment terminals, and video is the one payload guaranteed to saturate it. Running the model on the deck means what leaves the building is a few hundred bytes of state over MQTT, and the system continues to operate through an outage rather than going dark with it.

Hysteresis before accuracy. The first working version flickered. A vehicle half-occluded by a pillar, a pedestrian crossing a bay, and a delivery van reversing each produced a stall that changed state twice within seconds. Raw frame accuracy was good and the display was unusable. The correction was a state-hold requirement rather than a better model: a stall holds its new state across a window of frames before the change propagates, with a longer window for becoming free than for becoming occupied. A space announced as free that is not free costs the operator a complaint. A space announced as free a few seconds late costs nothing.

Budget for glare and weather explicitly. A vision project on an operating site spends most of its schedule on the small proportion of conditions a demonstration never includes, and that proportion is where the operator forms a judgment about whether the system works. Low winter sun down the length of a row was scheduled work rather than a defect discovered late.

No plates, no faces. The label schema contains vehicles and nothing else. There is no plate recognition, no dwell time attached to an individual vehicle, and frames are not retained beyond the retraining sample, which is drawn under a written policy. That decision was made before the first conversation with the client’s counsel rather than after it, and it kept the conversation short.

Operation

Live counts by level and row feed the operator’s dashboard, the entrance signage, and an API the operator’s application reads. The history is the output that was not requested and is now used most: a deck that reliably fills early on one weekday and never fills on another is a staffing decision and a pricing decision, and prior to this the operator held an impression rather than a series.

What You Get Every Time

The same three commitments hold whether we're handing over a board, a platform, a model, or a campaign. They're terms of engagement rather than features, which is why they sit outside the write-up.

  1. Editable Source FilesSchematics, mechanical CAD, firmware, and application code in your repository under your organization, with the commit history intact. Not a zip file handed over at the end.
  2. Written Design RationaleWhy each significant decision went the way it did: the part we picked, the schema we chose, and what we considered and rejected. Decisions outlive the deliverable, and they're the expensive thing to reconstruct later.
  3. Supervised HandoverYour engineer does the deploy, builds a unit, or edits the page, with us on hand and not touching anything. You doing it without us is what finishes the engagement.

How we work

More Like This One

Everything we've published
An electronics workbench in early morning light, holding a bare circuit board on a cutting mat beneath a magnifier lamp, a soldering iron, an oscilloscope, component reels, and a mug, with a city skyline visible through the windowOur Own Product

AI2026

AI Agents for PCB Specification and Review

Conductor selects components, reads the datasheets, validates the electrical contracts, and returns a bill of materials and a schematic that can be built.

A glass office tower at dusk viewed from a nearby rooftop, dark except for one upper floor lit warm gold, with the last of the sunset along the horizon behind itOur Own Product

Software2026

Automated Time Capture for Legal Practice

BillUp observes the applications and Microsoft 365 activity of a fee earner and drafts the day's time entries for review and approval.

A perfume shop front in bright morning sun, with ranked glass bottles on the display shelves casting colored light across the counter, a striped awning above, and a planter of flowers beside the door

MarketingAn independent fragrance retailer2024

Organic Search Growth for a Fragrance Retailer

Technical SEO, storefront performance engineering, and content built against measured search demand. Owned traffic in place of rented clicks.

Discuss an Applied AI Requirement

Describe the required output, available data, operating conditions, acceptable error rates, and review process. We will assess whether an AI-based approach is appropriate.

hello@sunlabdigital.comSend Us the Details

St. Petersburg, Florida · we work with teams anywhere