Case study · Edge computer vision

Cameras that check the SOPs,
video that stays in the store.

Absar turns a coffee chain's existing CCTV into live checks on its standard operating procedures. A small NVIDIA Jetson box inside the store watches the cameras and flags lapses as they happen: a missing hairnet, an uncovered drink, milk left out, a drive-thru order handed over without a receipt. I own the vision layer, which means every check that runs on that box.

Client
Coffee chain · Riyadh, Saudi Arabia
My role
AI Team Lead · owner of the vision layer
Stack
NVIDIA Jetson Orin · DeepStream · TensorRT
Status
Live in the first store since Sep 2026

01The constraint that shaped everything

Saudi PDPL treats video of identifiable people as personal data, and blurring faces does not count as true anonymization: a blur is a transformation, not a guarantee. So there is no live video feed out of the store. Not to a cloud GPU, not to a regional endpoint.

That single fact inverts the usual build. Instead of moving the video to the compute, the compute moves into the store. What leaves is the conclusion: an event record, plus one image per alert so the manager can see what happened.

"Blurring a face is not anonymization. Once that is true, the video stream cannot leave the building, and every other decision follows from there."

02What it watches

Eleven checks, each written against a procedure in the client's own SOP register: staff hygiene gear (hairnet, mask, gloves), drinks left uncovered or without a lid, milk out of the fridge, the ice tank or back door left open, a barista steaming milk while looking away, and drive-thru orders paid for with no receipt handed over. The box also counts door traffic and drive-thru cars.

Alerts reach managers on a web dashboard, a mobile app and Telegram. The first production box runs 8 cameras at 16 frames per second each, behind 36 configurable rules.

03What I built

I wrote all eleven check services and the shared GPU worker that hosts them, chose and retrained the models, and signed off the detection zones for every camera. We were a team of four: others built the dashboard, the mobile app and the release tooling that ships to the box.

Two calls I would point to. First, a benchmark that set the architecture: running the check models on the Jetson's GPU instead of its CPU was 17× faster, but every GPU process costs memory. So the checks share one GPU worker instead of each getting its own. Second, the model licensing: I moved detection onto permissively licensed models, because several of the obvious choices carry copyleft terms that follow you into a commercial product.

Deliberately light on architecture here. It is a live commercial product, so the design stays with the company.

04Results

Every number below comes from held-out store footage or a replay of real alerts, never from the training data. Live uptime and camera-to-phone latency are being instrumented now, so they are not here yet.

17×
Faster inference on the Jetson GPU than on its CPU: 3.9 s down to 225 ms per frame, averaged over 12 runs
0.875 → 0.992
Cup-detector precision after I rebuilt its dataset from 140 store clips, split by day. Recall went from 0.66 to 0.845
12% → 83%
Milk-detector precision on a held-out hour of real footage, after I found the old train and test splits leaked
21 → 0
False steaming alerts in a replay of 36 alerts the owner had reviewed, with 14 of the 15 real ones kept
3.7% → 0.2%
Hairnet false flags across 849 replayed head samples, once a second, taller crop of the head had to agree before an alert fires
53–57 FPS
The hygiene-gear pipeline with both of its models resident on an 8 GB Jetson Orin Nano, using 1.9 GB of RAM

On what a Jetson can and cannot actually do once DeepStream and TensorRT are involved: What a $250 Box Can Actually Do.

Building vision that has to run where the cameras are? Let's talk ↗