store-intelligence-dashboard / data /store_layout.json
SERG4NT's picture
Upload folder using huggingface_hub
c1dcc23 verified
Raw History Blame Contribute Delete
4.99 kB
{
"store_id": "STORE_BLR_002",
"pos_store_id": "ST1008",
"store_name": "Brigade Road, Bangalore",
"city": "Bangalore",
"timezone": "Asia/Kolkata",
"open_hours": { "open": "10:00", "close": "22:00" },
"_coordinate_note": "All polygon / line coordinates are NORMALISED to [0,1] (x = fraction of frame width, y = fraction of frame height) so they are resolution-independent. Hand-calibrated from CAM sample frames (see scripts/calibrate_zones.py).",
"_clip_note": "Clips are ~2.5-min excerpts. The on-screen DVR clock reads ~20:11 but is treated as illustrative; we anchor the event window to clip_start_local=20:20 IST so billing-zone presence aligns with the 20:25:04 POS transaction. This is a documented demo-alignment assumption (see DESIGN.md).",
"cameras": [
{
"camera_id": "CAM_ENTRY_01",
"source_file": "CAM 3.mp4",
"role": "entry",
"fps_sample": 6,
"clip_start_local": "2026-04-10T20:20:00+05:30",
"description": "Entry/exit threshold (overhead corner). Foot-trajectory analysis shows traffic moves VERTICALLY down the entrance lane on the right (dY~+0.5), so the counting line must cut ACROSS that motion (a tripwire is perpendicular to travel). A purely vertical line parallel to the lane counts nobody (verified: 0). This line is a DIAGONAL across the lane (upper-left to lower-right), separating the entrance side from the store side, and is crossed as a visitor walks down into the store. Inbound = moving DOWN/into the store (toward inside_point).",
"entry_line": [[0.48, 0.55], [1.0, 0.70]],
"inside_point": [0.85, 0.99],
"zones": ["ENTRY"]
},
{
"camera_id": "CAM_FLOOR_01",
"source_file": "CAM 1.mp4",
"role": "floor",
"fps_sample": 5,
"clip_start_local": "2026-04-10T20:20:00+05:30",
"description": "Main floor - skincare wall (The Face Shop, Good Vibes, DermDoc, Minimalist, Aqualogica) plus a makeup studio table.",
"zones": ["SKINCARE", "MAKEUP_STUDIO"]
},
{
"camera_id": "CAM_FLOOR_02",
"source_file": "CAM 2.mp4",
"role": "floor",
"fps_sample": 5,
"clip_start_local": "2026-04-10T20:20:00+05:30",
"description": "Main floor - makeup brand wall (Maybelline, Faces Canada, Lakme, Swiss Beauty) plus the nail/fragrance unit.",
"zones": ["MAKEUP", "NAIL_FRAGRANCE"]
},
{
"camera_id": "CAM_BILLING_01",
"source_file": "CAM 5.mp4",
"role": "billing",
"fps_sample": 5,
"clip_start_local": "2026-04-10T20:20:00+05:30",
"description": "Cash counter / billing. Counter and POS operator on the left (staff side); customers queue on the customer side in front of the counter.",
"staff_region": [[0.0, 0.0], [0.44, 0.0], [0.44, 1.0], [0.0, 1.0]],
"queue_region": [[0.45, 0.30], [0.82, 0.30], [0.82, 0.99], [0.45, 0.99]],
"zones": ["BILLING"]
},
{
"camera_id": "CAM_BACK_01",
"source_file": "CAM 4.mp4",
"role": "backroom",
"fps_sample": 4,
"clip_start_local": "2026-04-10T20:20:00+05:30",
"description": "Back-of-house stock room (cartons, water dispenser). Non-customer area; any person here is treated as staff.",
"zones": ["BACKROOM"]
}
],
"zones": [
{
"zone_id": "ENTRY",
"name": "Entry / Exit threshold",
"camera_id": "CAM_ENTRY_01",
"department": "entry",
"staff_only": false,
"polygon": [[0.05, 0.10], [0.70, 0.10], [0.70, 0.95], [0.05, 0.95]]
},
{
"zone_id": "SKINCARE",
"name": "Skincare wall",
"camera_id": "CAM_FLOOR_01",
"department": "skin",
"staff_only": false,
"polygon": [[0.03, 0.30], [0.80, 0.30], [0.88, 0.66], [0.03, 0.66]]
},
{
"zone_id": "MAKEUP_STUDIO",
"name": "Makeup studio table",
"camera_id": "CAM_FLOOR_01",
"department": "makeup",
"staff_only": false,
"polygon": [[0.58, 0.55], [1.0, 0.55], [1.0, 0.98], [0.58, 0.98]]
},
{
"zone_id": "MAKEUP",
"name": "Makeup brand wall",
"camera_id": "CAM_FLOOR_02",
"department": "makeup",
"staff_only": false,
"polygon": [[0.30, 0.28], [0.96, 0.28], [0.96, 0.82], [0.30, 0.82]]
},
{
"zone_id": "NAIL_FRAGRANCE",
"name": "Nail & fragrance unit",
"camera_id": "CAM_FLOOR_02",
"department": "personal-care",
"staff_only": false,
"polygon": [[0.08, 0.30], [0.40, 0.30], [0.40, 0.78], [0.08, 0.78]]
},
{
"zone_id": "BILLING",
"name": "Billing / cash counter queue",
"camera_id": "CAM_BILLING_01",
"department": "billing",
"staff_only": false,
"polygon": [[0.45, 0.30], [0.82, 0.30], [0.82, 0.99], [0.45, 0.99]]
},
{
"zone_id": "BACKROOM",
"name": "Back-of-house stock room",
"camera_id": "CAM_BACK_01",
"department": "backroom",
"staff_only": true,
"polygon": [[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0]]
}
]
}