{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":114094,"databundleVersionId":13610510,"sourceType":"competition"},{"sourceId":12961355,"sourceType":"datasetVersion","datasetId":8203037},{"sourceId":12971059,"sourceType":"datasetVersion","datasetId":8209636},{"sourceId":12998793,"sourceType":"datasetVersion","datasetId":8228240},{"sourceId":12998791,"sourceType":"datasetVersion","datasetId":8228238},{"sourceId":12981046,"sourceType":"datasetVersion","datasetId":8216341},{"sourceId":12980573,"sourceType":"datasetVersion","datasetId":8216045},{"sourceId":13000547,"sourceType":"datasetVersion","datasetId":8229724},{"sourceId":13000552,"sourceType":"datasetVersion","datasetId":8229727}],"dockerImageVersionId":31089,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport glob\nimport shutil\nfrom pathlib import Path\nfrom tqdm import tqdm","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-09-08T21:07:27.703892Z","iopub.execute_input":"2025-09-08T21:07:27.704218Z","iopub.status.idle":"2025-09-08T21:07:27.724623Z","shell.execute_reply.started":"2025-09-08T21:07:27.704161Z","shell.execute_reply":"2025-09-08T21:07:27.723530Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_paths = [\n    \"/kaggle/input/grocery-items-multi-class-object-detection/train/train/images\",\n    \"/kaggle/input/ccs-v1/Output/2025-09-03-20-08-05/train/images\",\n    \"/kaggle/input/ccs-v2/Output/2025-09-04-15-28-49/train/images\", \n    \"/kaggle/input/ccs-v3/Output/2025-09-06-16-31-47/train/images\",\n    \"/kaggle/input/ccs-v4/Output/2025-09-06-18-03-18/train/images\",\n    \"/kaggle/input/ccs-v5/Output/2025-09-08-13-05-38/train/images\",\n    \"/kaggle/input/ccs-v6/Output/2025-09-08-14-44-05/train/images\",\n    \"/kaggle/input/css-v7/Output/2025-09-07-09-44-39/train/images\",\n    \"/kaggle/input/css-v8/Output/2025-09-07-10-18-51/train/images\"\n]\nval_paths = [\n    \"/kaggle/input/grocery-items-multi-class-object-detection/val/val/images\",\n    \"/kaggle/input/ccs-v1/Output/2025-09-03-20-08-05/val/images\",\n    \"/kaggle/input/ccs-v2/Output/2025-09-04-15-28-49/val/images\",\n    \"/kaggle/input/ccs-v3/Output/2025-09-06-16-31-47/val/images\",\n    \"/kaggle/input/ccs-v4/Output/2025-09-06-18-03-18/val/images\",\n    \"/kaggle/input/ccs-v5/Output/2025-09-08-13-05-38/val/images\",\n    \"/kaggle/input/ccs-v6/Output/2025-09-08-14-44-05/val/images\",\n    \"/kaggle/input/css-v7/Output/2025-09-07-09-44-39/val/images\",\n    \"/kaggle/input/css-v8/Output/2025-09-07-10-18-51/val/images\"\n]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-09-08T21:07:27.726351Z","iopub.execute_input":"2025-09-08T21:07:27.726749Z","iopub.status.idle":"2025-09-08T21:07:27.785620Z","shell.execute_reply.started":"2025-09-08T21:07:27.726716Z","shell.execute_reply":"2025-09-08T21:07:27.784650Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Output dir\noutput_dir = \"/kaggle/working/preprocess\"\nos.makedirs(output_dir, exist_ok=True)\n\n# train and val dirs\ntrain_output_dir = os.path.join(output_dir, \"train\")\nval_output_dir = os.path.join(output_dir, \"val\")\nos.makedirs(train_output_dir, exist_ok=True)\nos.makedirs(val_output_dir, exist_ok=True)\n\n# images and labels in train and val\ntrain_images_dir = os.path.join(train_output_dir, \"images\")\ntrain_labels_dir = os.path.join(train_output_dir, \"labels\")\nval_images_dir = os.path.join(val_output_dir, \"images\")\nval_labels_dir = os.path.join(val_output_dir, \"labels\")\n\nfor dir_path in [train_images_dir, train_labels_dir, val_images_dir, val_labels_dir]:\n    os.makedirs(dir_path, exist_ok=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-09-08T21:07:27.786664Z","iopub.execute_input":"2025-09-08T21:07:27.786995Z","iopub.status.idle":"2025-09-08T21:07:27.807765Z","shell.execute_reply.started":"2025-09-08T21:07:27.786965Z","shell.execute_reply":"2025-09-08T21:07:27.806878Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def copy_files(source_paths, output_images_dir, output_labels_dir):\n    counter = 1\n    for source_path in source_paths:\n        # label dir\n        labels_path = source_path.replace(\"images\", \"labels\")\n        \n        # Check dirs\n        if not os.path.exists(source_path):\n            print(f\"⚠️ Error {source_path}, not found\")\n            continue\n        if not os.path.exists(labels_path):\n            print(f\"⚠️ Error {labels_path}, not found\")\n            continue\n        \n        # Take all images\n        image_extensions = ['*.jpg', '*.jpeg', '*.png']\n        image_files = []\n        for ext in image_extensions:\n            image_files.extend(glob.glob(os.path.join(source_path, ext)))\n        \n        print(f\"Search {len(image_files)} images in {source_path}\")\n\n        for image_path in tqdm(image_files):\n            filename = Path(image_path).stem\n            image_extension = Path(image_path).suffix\n            \n            # Path to label\n            label_path = os.path.join(labels_path, filename + \".txt\")\n            \n            # New name\n            new_filename = f\"{counter:06d}\"\n            new_image_name = new_filename + image_extension\n            new_label_name = new_filename + \".txt\"\n            \n            # save path\n            new_image_path = os.path.join(output_images_dir, new_image_name)\n            new_label_path = os.path.join(output_labels_dir, new_label_name)\n            \n            # Copy image\n            shutil.copy2(image_path, new_image_path)\n            \n            # Copy label\n            if os.path.exists(label_path):\n                shutil.copy2(label_path, new_label_path)\n            else:\n                print(f\"label {label_path} not found\")\n            \n            counter += 1\n\nprint(\"train...\")\ncopy_files(train_paths, train_images_dir, train_labels_dir)\n\nprint(\"val...\")\ncopy_files(val_paths, val_images_dir, val_labels_dir)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-09-08T21:07:27.809572Z","iopub.execute_input":"2025-09-08T21:07:27.809882Z","iopub.status.idle":"2025-09-08T21:10:06.613686Z","shell.execute_reply.started":"2025-09-08T21:07:27.809854Z","shell.execute_reply":"2025-09-08T21:10:06.611933Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Result check","metadata":{}},{"cell_type":"code","source":"train_images_count = len(os.listdir(train_images_dir))\ntrain_labels_count = len(os.listdir(train_labels_dir))\nval_images_count = len(os.listdir(val_images_dir))\nval_labels_count = len(os.listdir(val_labels_dir))\n\nprint(f\"Train images: {train_images_count}\")\nprint(f\"Train labels: {train_labels_count}\")\nprint(f\"Val images: {val_images_count}\")\nprint(f\"Val labels: {val_labels_count}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}