"""Build the leave-facing-out catalogs: cat_pack (packshots only) and cat_full (packshots + the widest facing of each in-catalog SKU as a shelf view), and image6_v2_lfo.json with those reference facings excluded from scoring. Same-photo references make this an optimistic proxy, not a held-out result.""" import json, cv2, os, shutil, collections E = os.path.dirname(os.path.abspath(__file__)) L = json.load(open(f'{E}/../../../../eval/labels/image6.json')); im = cv2.imread('add/image6.jpg') by = collections.defaultdict(list) for f in L['facings']: if f['label'] not in ('unknown', 'exclude'): by[f['label']].append(f) refs = {k: max(fs, key=lambda f: f['box'][2] - f['box'][0])['index'] for k, fs in by.items() if len(fs) >= 2} for cat in ('cat_pack', 'cat_full'): d = f'{E}/{cat}'; shutil.rmtree(d, ignore_errors=True); os.makedirs(d) for p in os.listdir('stock-lopia-clean'): if p.endswith('.jpg'): shutil.copy(f'stock-lopia-clean/{p}', d) if cat == 'cat_full': for k, i in refs.items(): x1, y1, x2, y2 = L['facings'][i]['box']; cv2.imwrite(f'{d}/{k}_shelf.jpg', im[y1:y2, x1:x2]) for f in L['facings']: if f['index'] in refs.values(): f['label'] = 'exclude' json.dump(L, open(f'{E}/image6_v2_lfo.json', 'w'), ensure_ascii=False) print('shelf references', refs)