{"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":"gpu","dataSources":[{"sourceId":8078,"databundleVersionId":862231,"sourceType":"competition"}],"dockerImageVersionId":31154,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from PIL import Image\nimport os\n\n# === Compression parameters for each app ===\ncompression_profiles = {\n    \"whatsapp\": {\"max_dim\": 1280, \"quality\": 72},\n    \"telegram\": {\"max_dim\": 1280, \"quality\": 80},\n    \"instagram\": {\"max_dim\": 1080, \"quality\": 85},\n    \"facebook\": {\"max_dim\": 2048, \"quality\": 70}\n}\n\ndef compress_image(input_path, output_path, max_dim, quality):\n    img = Image.open(input_path)\n    if img.mode in (\"RGBA\", \"P\"):\n        img = img.convert(\"RGB\")\n\n    # Resize while maintaining aspect ratio\n    img.thumbnail((max_dim, max_dim), Image.Resampling.LANCZOS)\n\n    # Save compressed version\n    img.save(\n        output_path,\n        \"JPEG\",\n        quality=quality,\n        optimize=True,\n        progressive=True,\n        subsampling=2\n    )\n\ndef process_dataset(input_root, output_root):\n    for app, params in compression_profiles.items():\n        print(f\"\\n🔹 Processing for {app}...\")\n        for cam_folder in os.listdir(input_root):\n            cam_path = os.path.join(input_root, cam_folder)\n            if not os.path.isdir(cam_path):\n                continue\n\n            save_dir = os.path.join(output_root, app, cam_folder)\n            os.makedirs(save_dir, exist_ok=True)\n\n            for img_file in os.listdir(cam_path):\n                in_path = os.path.join(cam_path, img_file)\n                out_path = os.path.join(save_dir, img_file)\n\n                try:\n                    compress_image(\n                        in_path, out_path,\n                        max_dim=params[\"max_dim\"],\n                        quality=params[\"quality\"]\n                    )\n                except Exception as e:\n                    print(f\" Error with {img_file}: {e}\")\n\n# === Update these paths for Kaggle ===\ninput_root = \"../input/sp-society-camera-model-identification/train/train\"\noutput_root = \"/kaggle/working/compressed\"\n\nprocess_dataset(input_root, output_root)\n\nprint(\"\\n✅ All compressions done! Check /kaggle/working/compressed/\")\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-10-14T12:45:44.251023Z","iopub.execute_input":"2025-10-14T12:45:44.251319Z","iopub.status.idle":"2025-10-14T13:42:34.616262Z","shell.execute_reply.started":"2025-10-14T12:45:44.251289Z","shell.execute_reply":"2025-10-14T13:42:34.615455Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from PIL import Image\nimport os\n\n# Compression parameters for each app\ncompression_profiles = {\n    \"whatsapp\": {\"max_dim\": 1280, \"quality\": 72},\n    \"telegram\": {\"max_dim\": 1280, \"quality\": 80},\n    \"instagram\": {\"max_dim\": 1080, \"quality\": 85},\n    \"facebook\": {\"max_dim\": 2048, \"quality\": 70}\n}\n\ndef compress_image(input_path, output_path, max_dim, quality):\n    img = Image.open(input_path)\n    if img.mode in (\"RGBA\", \"P\"):\n        img = img.convert(\"RGB\")\n    img.thumbnail((max_dim, max_dim), Image.Resampling.LANCZOS)\n    img.save(output_path, \"JPEG\", quality=quality, optimize=True, progressive=True, subsampling=2)\n\ndef process_test_dataset(input_root, output_root):\n    # Loop through each app compression\n    for app, params in compression_profiles.items():\n        print(f\"\\n🔹 Processing test images for {app}...\")\n        save_dir = os.path.join(output_root, app)\n        os.makedirs(save_dir, exist_ok=True)\n\n        for img_file in os.listdir(input_root):\n            in_path = os.path.join(input_root, img_file)\n            out_path = os.path.join(save_dir, img_file)\n            try:\n                compress_image(\n                    in_path, out_path,\n                    max_dim=params[\"max_dim\"],\n                    quality=params[\"quality\"]\n                )\n            except Exception as e:\n                print(f\" Error with {img_file}: {e}\")\n\n# === Update these paths ===\ntest_input_root = \"../input/sp-society-camera-model-identification/test/test\"\ntest_output_root = \"/kaggle/working/compressed_test\"\n\nprocess_test_dataset(test_input_root, test_output_root)\n\nprint(\"\\n✅ Test image compressions done! Check /kaggle/working/compressed_test/\")\n","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}