Spaces:
Sleeping
Sleeping
| """Optional offline step: build data/brand_labels.json from yixiannn/luxury-products-data. | |
| This is NOT required for the Space to run. The Space will fall back to the default | |
| hardcoded brand list if data/brand_labels.json is missing. | |
| Usage: | |
| python scripts/build_brand_labels.py | |
| """ | |
| import json | |
| from pathlib import Path | |
| ROOT = Path(__file__).resolve().parents[1] | |
| OUT = ROOT / "data" / "brand_labels.json" | |
| # Small allowlist to avoid polluting CLIP with arbitrary retailer brands. | |
| # You can expand this later. | |
| ALLOW = { | |
| "Chanel", | |
| "Hermes", | |
| "Louis Vuitton", | |
| "Gucci", | |
| "Fendi", | |
| "Prada", | |
| "Rolex", | |
| "Patek Philippe", | |
| "Cartier", | |
| "Audemars Piguet", | |
| "Monet", | |
| "Van Gogh", | |
| "Vermeer", | |
| "Rembrandt", | |
| "Faberge", | |
| "Tiffany", | |
| "Van Cleef", | |
| } | |
| def main() -> int: | |
| try: | |
| from datasets import load_dataset | |
| except Exception as e: | |
| raise SystemExit( | |
| "datasets is not installed. Run: pip install -r requirements-dev.txt" | |
| ) from e | |
| ds = load_dataset("yixiannn/luxury-products-data", split="train") | |
| brands = set() | |
| if "Marque" in ds.column_names: | |
| for b in ds["Marque"]: | |
| if not b: | |
| continue | |
| brands.add(str(b).strip()) | |
| # Keep only allowlisted ones (plus exact matches). | |
| selected = sorted([b for b in brands if b in ALLOW]) | |
| # Build CLIP labels (keep same style as defaults). | |
| clip_labels = [] | |
| mapping = {} | |
| def add(label: str, brand: str, category: str): | |
| if label not in clip_labels: | |
| clip_labels.append(label) | |
| mapping[label] = [brand, category] | |
| for b in selected: | |
| # Heuristic category choices. | |
| if b in {"Rolex", "Patek Philippe", "Cartier", "Audemars Piguet"}: | |
| add(f"{b} luxury wristwatch", b, "Watch") | |
| elif b in {"Monet", "Van Gogh", "Vermeer", "Rembrandt"}: | |
| add(f"{b} oil painting", b, "Art") | |
| elif b in {"Faberge", "Tiffany", "Van Cleef"}: | |
| add(f"{b} fine jewellery", b, "Jewellery") | |
| else: | |
| add(f"{b} designer handbag", b, "Handbag") | |
| OUT.parent.mkdir(parents=True, exist_ok=True) | |
| OUT.write_text( | |
| json.dumps( | |
| { | |
| "source": "yixiannn/luxury-products-data", | |
| "clip_labels": clip_labels, | |
| "label_to_brand_category": mapping, | |
| }, | |
| ensure_ascii=False, | |
| indent=2, | |
| ), | |
| encoding="utf-8", | |
| ) | |
| print(f"Wrote {len(clip_labels)} labels to {OUT}") | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) |