""" STEP 1 ─ prepare_dataset.py =========================== Run this FIRST. It creates the required folder structure and a dataset.yaml that YOLOv8 expects. Usage: python prepare_dataset.py After running. your folder tree will look like this: dataset/ images/ train/ <- put your labeled images here. val/ <- validation split (auto-filled by augment.py) labels/ train/ <- put your .txt label files here. val/ <- auto-generated. dataset.yaml <- auto-generated. Label format (one .txt per image, same name): (all values 0.0-1.0, normalised) Recommended free labeling tools: • Roboflow https://roboflow.com (easiest, web-based) • LabelImg pip install labelImg (desktop, saves YOLO format directly) """ import os import yaml # ── Edit this list to match your product classes ──────── CLASS_NAMES = [ "1001", "Aroma", "Aroma Gold", "Bonal", "Facto", "Famico", "Famico Exclusive", "Fegalo", "Gosto", "Molino", "Oscar", "Primo", "Siglo" ] DATASET_ROOT = "dataset" DIRS = [ f"{DATASET_ROOT}/images/train", f"{DATASET_ROOT}/images/val", f"{DATASET_ROOT}/labels/train", f"{DATASET_ROOT}/labels/val", ] def Structure_Create(): for d in DIRS: os.makedirs(d, exist_ok=True) print("[1/3] Folder structure created:") for d in DIRS: print(f" {d}/") def YAML_Write(): cfg = { "path" : os.path.abspath(DATASET_ROOT), "train": "images/train", "val" : "images/val", "nc" : len(CLASS_NAMES), "names": CLASS_NAMES, } yaml_path = "dataset.yml" with open(yaml_path, "w") as f: yaml.dump(cfg, f, default_flow_style=False, sort_keys=False) print("[2/3] dataset.yaml written -> {yaml_path}") return yaml_path def Print_NextSetups(): print(""" [3/3] NEXT STEPS ───────────────────────────────────────────────────────────── 1. Put your RAW images (one per product view) into: dataset/images/train/ 2. Label them using Roboflow or LabelImg (YOLO format). Each image → a matching .txt in dataset/labels/train/ Example label file (famico_veloute_01.txt): 0 0.512 0.483 0.320 0.541 3. Run the augmentation script: python 2_augment.py 4. Train: python 3_train.py 5. Detect on new scenes: python 4_detect.py --source scene.jpg ───────────────────────────────────────────────────────────── """) if __name__ == "__main__": Structure_Create() YAML_Write() Print_NextSetups()