{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceType":"datasetVersion","sourceId":6397427,"datasetId":3687331,"databundleVersionId":6478553},{"sourceType":"datasetVersion","sourceId":8980941,"datasetId":5408053,"databundleVersionId":9145823},{"sourceType":"datasetVersion","sourceId":3260103,"datasetId":1975222,"databundleVersionId":3310476}],"dockerImageVersionId":31328,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport random\nimport shutil\nfrom tqdm import tqdm\n\n# ==================================================\n# 1. PATHS\n# ==================================================\nbase_path = \"/kaggle/input/datasets\"\n\ndataset1_path = os.path.join(base_path, \"pes1ug22am047/damaged-and-undamaged-artworks\")\ndataset2_path = os.path.join(base_path, \"ansonnnnn/historic-art\")\ndataset3_path = os.path.join(base_path, \"sankarmechengg/art-images-clear-and-distorted\")\n\ndataset1_clean = os.path.join(dataset1_path, \"AI_for_Art_Restoration_2\", \"paired_dataset_art\")\ndataset2_clean = os.path.join(dataset2_path, \"complete\", \"artwork\")\ndataset3_clean = os.path.join(dataset3_path, \"Art_Dataset_Clear\")\n\n# ==================================================\n# 2. FUNCTION TO LOAD IMAGES\n# ==================================================\ndef get_all_images(folder_path):\n    image_extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.webp')\n    image_paths = []\n\n    for root, dirs, files in os.walk(folder_path):\n        for file in files:\n            if file.lower().endswith(image_extensions):\n                image_paths.append(os.path.join(root, file))\n\n    return image_paths\n\n# ==================================================\n# 3. LOAD DATASETS\n# ==================================================\nimages_ds1 = get_all_images(dataset1_clean)\nimages_ds3 = get_all_images(dataset3_clean)\n\nimages_ds2_all = get_all_images(dataset2_clean)\nimages_ds2 = random.sample(images_ds2_all, min(5000, len(images_ds2_all)))\n\nprint(\"Dataset 1:\", len(images_ds1))\nprint(\"Dataset 2:\", len(images_ds2))\nprint(\"Dataset 3:\", len(images_ds3))\n\n# ==================================================\n# 4. TOTAL\n# ==================================================\ntotal_images = len(images_ds1) + len(images_ds2) + len(images_ds3)\nprint(\"✅ TOTAL CLEAN IMAGES:\", total_images)\n\n# ==================================================\n# 5. OUTPUT FOLDER\n# ==================================================\noutput_dir = \"/kaggle/working/final_clean_dataset\"\nos.makedirs(output_dir, exist_ok=True)\n\n# ==================================================\n# 6. COPY FUNCTION\n# ==================================================\ndef copy_images(image_list, prefix):\n    for i, img_path in enumerate(tqdm(image_list)):\n        ext = img_path.split('.')[-1]\n        new_name = f\"{prefix}_{i}.{ext}\"\n        dst_path = os.path.join(output_dir, new_name)\n\n        try:\n            shutil.copy(img_path, dst_path)\n        except:\n            pass\n\n# ==================================================\n# 7. MERGE ALL\n# ==================================================\ncopy_images(images_ds1, \"ds1\")\ncopy_images(images_ds2, \"ds2\")\ncopy_images(images_ds3, \"ds3\")\n\n# ==================================================\n# 8. FINAL CHECK\n# ==================================================\nprint(\"🎉 Final merged dataset size:\", len(os.listdir(output_dir)))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-04-16T02:30:41.598017Z","iopub.execute_input":"2026-04-16T02:30:41.598577Z","iopub.status.idle":"2026-04-16T02:37:42.536166Z","shell.execute_reply.started":"2026-04-16T02:30:41.598544Z","shell.execute_reply":"2026-04-16T02:37:42.535299Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import shutil\nshutil.make_archive('/kaggle/working/final_clean_dataset', 'zip', '/kaggle/working/final_clean_dataset')\nprint(\"ZIP created!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-04-16T02:45:43.373230Z","iopub.execute_input":"2026-04-16T02:45:43.373971Z","iopub.status.idle":"2026-04-16T02:51:01.378143Z","shell.execute_reply.started":"2026-04-16T02:45:43.373941Z","shell.execute_reply":"2026-04-16T02:51:01.377398Z"}},"outputs":[],"execution_count":null}]}