Connect
Back to selected work
Case 13 · Seatwatch · table monitoring · Real-time CV
// Case 13 · 2025 · Computer Vision

Seatwatchthe floor, watched.

A real-time CV system that monitors restaurant table occupancy from a single overhead camera — no sensors, no hardware. It detects guests the moment they sit, tracks each table's state live, and flags the groups that have been waiting too long.

EngagementCV build
StackYOLO11 · ByteTrack
RuntimeOn the feed
StatusLive
seatwatch.internal/live
Seatwatch — live table occupancy feed
Chapter 01 · The Brief

Knowing the floor meant
walking the floor.

A manager's only way to read the room was to walk it — every ten minutes, counting heads, guessing which group had been waiting, missing the table that just cleared. Sensor-based systems existed, but they meant drilling hardware into furniture nobody wanted to touch.

The brief: read table occupancy from the camera already on the ceiling. Detect when guests sit, track each table's state, time how long they've been there — and surface it all on one live screen, processed directly on the feed.

Brief at a glance
Domain
Restaurant ops · single camera
Detect
Persons → table zones
Constraint
No sensors · no hardware
Engagement
CV build · on-feed
Runtime
Python · real-time
REC · DETECT · YOLO11ByteTrack · 7 tables
T1 · FREE
T2 · 12:30
T3 · FREE
T4 · 04:12
T5 · 23:50
T6 · FREE
// Live state
6
Persons
3
Occupied
4
Free
1
Alerts
// Tables · 7
T1
T212:30
T3
T404:12
T523:50
T6
T7
REC · ZONES · ROI MAPByteTrack · 7 tables
T1 · FREE
T2 · 12:30
T3 · FREE
T4 · 04:12
T5 · 23:50
T6 · FREE
// Live state
6
Persons
3
Occupied
4
Free
1
Alerts
// Tables · 7
T1
T212:30
T3
T404:12
T523:50
T6
T7
REC · LIVE · DASHBOARDByteTrack · 7 tables
T1 · FREE
T2 · 12:30
T3 · FREE
T4 · 04:12
T5 · 23:50
T6 · FREE
// Live state
6
Persons
3
Occupied
4
Free
1
Alerts
// Tables · 7
T1
T212:30
T3
T404:12
T523:50
T6
T7
Feature · 01

Detect & track,
frame by frame.

YOLO11 detects every person on the feed with per-detection confidence, and ByteTrack keeps a stable ID on each one across frames — so a guest leaning over isn't mistaken for a new arrival.

DetectionYOLO11 · confidence
TrackingByteTrack · stable IDs
InputOne overhead camera
Feature · 02

Map detections
to tables.

Each table is drawn once as a polygon ROI mapped to the camera's perspective. A detection inside a zone marks that table occupied; the system runs a per-table state machine — Free → Occupied → Alert.

ZonesPolygon ROI · per table
MappingDetection → zone
LogicFree → Occupied → Alert
Feature · 03

One screen,
the whole room.

A live sidebar shows all seven tables, their state, total persons detected, and dwell time per group — counting from the second they sat. Tables that pass the wait threshold raise an alert, rendered straight onto the feed with OpenCV.

DwellPer-table timer
Dashboard7 tables · live
RenderOpenCV · on-feed overlays
I used to walk the floor every ten minutes. Now one screen tells me which tables are free, which are occupied, and which group's been waiting too long — without me moving.
Floor Manager · Restaurant ops · Seatwatch
Chapter 04 · By the numbers
7
Coverage
Tables monitored,
one camera.

Every table mapped as a polygon zone on a single overhead feed — occupancy, dwell time, and alerts, all read from one frame.

0
Hardware
Sensors drilled
into furniture.

No table sensors, no IoT install, no wiring. The system runs on the camera the restaurant already had on the ceiling.

30FPS
Real-time
Processed live
on the feed.

Detection, tracking, zone logic, and dashboard rendering all run at frame rate — state changes show the instant they happen.

Chapter 05 · Inside the feed

One feed,
three layers.

Live dashboard, detection overlay, and zone map — the full CV pipeline visible in one monitoring screen.

// 01 · Live
Seatwatch — Live table occupancy dashboard

All seven tables, state and dwell time, with overstay alerts.

// 02 · Detect
Seatwatch — YOLO11 detection overlay

YOLO11 bounding boxes held stable across frames by ByteTrack.

// 03 · Zones
Seatwatch — Polygon zone ROI map

Table polygons mapped to the camera — green free, red occupied.

// 04 · Heatmap
Seatwatch — Historical occupancy heatmap

Occupancy patterns by hour — peak times surfaced automatically.

// Alerts
Seatwatch — Alert configuration

Configurable wait-time thresholds and notification channels.

click to expand · drag to explore
Closing

The
credits.

  • Engagement
    CV build · single-camera
  • Detection
    YOLO11 · per-detection confidence
  • Tracking
    ByteTrack · via Ultralytics
  • Zones
    Polygon ROI · per-table, perspective-mapped
  • Logic
    State machine · Free → Occupied → Alert · dwell timing
  • Render
    OpenCV · live overlays + dashboard
  • Runtime
    Python · Ultralytics · custom business logic
  • Hardware
    None · standard camera feed
  • Status
    Live · 7 tables, real-time
  • Next case study

    RepIQyour camera, your coach.

    An AI rep counter and form coach that runs on any webcam — no wearables