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.
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.
On what a Jetson can and cannot actually do once DeepStream and TensorRT are involved: What a $250 Box Can Actually Do.