One shop · One shelf · One camera

Never miss an empty shelf again.

ShelfScan watches a single shop shelf and tells the shopkeeper, in plain words, whether that shelf is Full, Low, has a Gap, or needs a Check — so an empty facing is found by staff, not by a customer.

Built for the OpenCV AI Competition 2026. OpenCV 5, Python, FastAPI, AWS.

Demo-only page — please read this first. This link is JSON only. It has no webcam, no OpenCV, and no live counting on this page. The live demo below is a fixed, staged illustration. For the real app — webcam, OpenCV 5, baseline and restock — use the live full app on EC2.

Live demo state (this demo-only link)

Loading…

—

Fetching ./api/demo…

Staged illustration only: a synthetic sparse shelf against a synthetic full baseline. No detector ran here, so there is no measured latency and no annotated image. If this fails to load, the staged values are: Gap, changed 0.625, 3 items vs a full baseline of 8.

View the raw JSON · Health check

Full app demo (EC2, OpenCV 5.0.0)

LOW

Low · changed 0.216

Re-verified 27 Oct 2026, 00:22 GMT, on the live full app. This figure is from EC2, not from this demo-only page.

Open the full app demo

The full app runs the real drift code, webcam dashboard, baseline capture, alerts and CSV export.

What each state means

Full

The shelf looks like its full baseline. No action needed.

Low

Some items are missing. Check soon.

Gap

A clear empty area. Restock now.

Check shelf

Lighting changed or the camera moved. Do not trust the state — fix the camera or lighting, then re-capture the baseline.

One journey, start to finish

  1. Point a fixed camera at one shelf and capture a “full” baseline.
  2. ShelfScan compares each new frame with that baseline.
  3. A Gap or Low held for 5 frames raises an in-dashboard alert. No SMS, email or push alert in this version.
  4. Restock fully, capture a new baseline, and the state returns to Full. That re-baseline is the restock confirmation.

Counting, honestly

ShelfScan also gives a rough product count estimate — one class, “product”, no brand or barcode. On 5 held-out real shelf photos it scored MAE 7.0 (predicted 146 vs hand-counted 175): cookie tins 19/20, lemonade 91/88, wooden bottles 14/16, soda cans 17/27, bleach 5/24 (white-on-white, worst case).

Estimate, not a stock count. Do not use it for stock or ordering. Counting does not run on this demo-only page.

What this page cannot do

Go to the live full app →