diff --git a/.ipynb_checkpoints/Pre-processing-checkpoint.ipynb b/.ipynb_checkpoints/Pre-processing-checkpoint.ipynb index 363fcab..e1ffd31 100644 --- a/.ipynb_checkpoints/Pre-processing-checkpoint.ipynb +++ b/.ipynb_checkpoints/Pre-processing-checkpoint.ipynb @@ -1,6 +1,195 @@ { - "cells": [], - "metadata": {}, + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6fa881c9", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "warnings.filterwarnings('ignore', category=UserWarning) \n", + "warnings.filterwarnings('ignore', category=FutureWarning)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "70fc02fc", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from PIL import Image" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6430c1ea", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e4dbc938", + "metadata": {}, + "outputs": [], + "source": [ + "input_dir = \"Dataset\" \n", + "output_dir = \"preprocessed_data\" \n", + "categories = ['training_fake', 'training_real']\n", + "new_categories = ['fake', 'real']" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "217f7117", + "metadata": {}, + "outputs": [], + "source": [ + "os.makedirs(output_dir, exist_ok=True)\n", + "for category in new_categories:\n", + " os.makedirs(os.path.join(output_dir, category), exist_ok=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c0ee36a3", + "metadata": {}, + "outputs": [], + "source": [ + "def preprocess_image(image_path, target_size=(15, 15)):\n", + " try:\n", + " img = Image.open(image_path)\n", + " img = img.resize(target_size, Image.ANTIALIAS)\n", + " img = img.convert('RGB')\n", + " return img\n", + " except Exception as e:\n", + " print(f\"Error processing image {image_path}: {e}\")\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4c60cba5", + "metadata": {}, + "outputs": [], + "source": [ + "def process_and_move_images():\n", + " for category, new_category in zip(categories, new_categories):\n", + " category_path = os.path.join(input_dir, category)\n", + " new_category_path = os.path.join(output_dir, new_category)\n", + " \n", + " for filename in os.listdir(category_path):\n", + " file_path = os.path.join(category_path, filename)\n", + " preprocessed_img = preprocess_image(file_path)\n", + " \n", + " if preprocessed_img:\n", + " new_file_path = os.path.join(new_category_path, filename)\n", + " preprocessed_img.save(new_file_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9878b2b2", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\shiva\\AppData\\Local\\Temp\\ipykernel_16588\\2784625116.py:4: DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use LANCZOS or Resampling.LANCZOS instead.\n", + " img = img.resize(target_size, Image.ANTIALIAS)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Preprocessing and organization completed.\n" + ] + } + ], + "source": [ + "process_and_move_images()\n", + "print(\"Preprocessing and organization completed.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "66289984", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAIhCAYAAADtrKvVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJDElEQVR4nO3dd3gU5f7+8XsDyaYAiwmQTaR3MIAUBYMQVIIKAcUjotgBRRElFBUsFEWqxgbIwSOiqASPgsdyBFHKkd6lSJEaWoxSNtQkZJ/fH/zYL0sCZEkmhbxf1zXXxT7z7OxnJpnczMwzszZjjBEAAMhTfgVdAAAAVyMCFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAvYqNnXqVNlsNgUGBmrPnj1Z5rdp00ZRUVEFUJm0YMEC2Ww2ffXVVwXy+b7avXu3OnTooNDQUNlsNsXHx1+0b9WqVRUXF5d/xRVSbdq0UZs2bfJseed+Zy42TZ06Nc8+63zDhg2TzWbT33//navlfPfdd+rYsaPCw8MVEBCg0NBQ3Xbbbfr888+VkZHh8/ImTpxo2Tojb5Qs6AJgvbS0NL3yyiuaNm1aQZdSZPXr10/Lly/XlClT5HQ6FRERUdAlFXoTJ060ZLkjR47ULbfckqW9Ro0alnxebhlj1L17d02dOlXt27dXQkKCKlWqJJfLpfnz56t37976+++/1bdvX5+WO3HiRJUrV06PPfaYNYUj1wjYYuCOO+7QF198oYEDB6pRo0YFXU6+OnXqlAIDA2Wz2XK1nI0bN+rGG2/U3XffnTeFFQP169e3ZLm1atVSixYtLFm2FcaNG6epU6dq+PDhGjJkiNe8jh076oUXXtD27dsLqDrr5dU+WBRxirgYeOGFFxQWFqYXX3zxkv1279590VNtNptNw4YN87w+d9ps/fr16tKlixwOh0JDQ9W/f3+dOXNGW7du1R133KHSpUuratWqGjt2bLafefr0afXv319Op1NBQUGKiYnR2rVrs/RbtWqVOnXqpNDQUAUGBqpx48b68ssvvfqcOyX+008/qXv37ipfvryCg4OVlpZ20XVOSkrSQw89pAoVKshut6tevXp666235Ha7Jf3facnt27frxx9/9JyO3L179yW35fnObddx48ZpzJgxqlq1qoKCgtSmTRtt27ZNGRkZGjRokCIjI+VwONS5c2elpKR4LWPGjBlq166dIiIiFBQUpHr16mnQoEE6ceJEls/78MMPVbt2bdntdtWvX19ffPGFHnvsMVWtWtWrX3p6ukaMGKG6devKbrerfPnyevzxx/XXX3959Zs3b57atGmjsLAwBQUFqXLlyvrHP/6hkydPXnK9LzxFfG47vPnmm0pISFC1atVUqlQp3XTTTVq2bFmOt2dO+LK9li9fro4dOyosLEyBgYGqUaNGtpcA/vzzTz3wwANyOBwKDw9X9+7d5XK5LllHRkaGxowZo7p16+rVV1/Nto/T6dTNN9/seT18+HA1b95coaGhKlOmjJo0aaKPPvpI538vS9WqVbVp0yYtXLjQ8zt5/s83NTVVAwcOVLVq1RQQEKBrr71W8fHxWdb/6NGj6tGjh0JDQ1WqVCl16NBBO3fuzLK/S9KiRYt02223qXTp0goODlZ0dLR++OEHrz4X2wcXLVokm82m6dOnZ1n/Tz/9VDabTStXrrzktiyKOIItBkqXLq1XXnlFffv21bx583Trrbfm2bLvu+8+PfTQQ+rVq5fmzp2rsWPHKiMjQz///LN69+6tgQMH6osvvtCLL76omjVr6p577vF6/0svvaQmTZroX//6l1wul4YNG6Y2bdpo7dq1ql69uiRp/vz5uuOOO9S8eXNNmjRJDodDiYmJ6tq1q06ePJnlFFn37t3VoUMHTZs2TSdOnJC/v3+2tf/111+Kjo5Wenq6Xn/9dVWtWlXff/+9Bg4cqB07dmjixIlq0qSJli5dqs6dO6tGjRp68803JemKThFPmDBBDRs21IQJE3T06FENGDBAHTt2VPPmzeXv768pU6Zoz549GjhwoHr27Klvv/3W894//vhD7du3V3x8vEJCQrRlyxaNGTNGK1as0Lx58zz9Jk+erF69eukf//iH3n77bblcLg0fPjzLfzLcbrfuuusu/frrr3rhhRcUHR2tPXv2aOjQoWrTpo1WrVqloKAgz7XnVq1aacqUKSpbtqz279+v2bNnKz09XcHBwVe0HerWrat33nlHkvTqq6+qffv22rVrlxwOx2Xf73a7debMmSztJUv+35+znG6vOXPmqGPHjqpXr54SEhJUuXJl7d69Wz/99FOW5f/jH/9Q165d1aNHD23YsEGDBw+WJE2ZMuWita5atUqHDx/WE088keMjuN27d6tXr16qXLmyJGnZsmV69tlntX//fs8R8KxZs3TvvffK4XB4TsXb7XZJ0smTJxUTE6N9+/bppZdeUsOGDbVp0yYNGTJEGzZs0M8//yybzSa3262OHTtq1apVGjZsmOd3/Y477shS08KFCxUbG6uGDRvqo48+kt1u18SJE9WxY0dNnz5dXbt29ep/4T4YHR2txo0ba8KECXrggQe8+o4fP1433HCDbrjhhhxtnyLF4Kr18ccfG0lm5cqVJi0tzVSvXt00a9bMuN1uY4wxMTEx5rrrrvP037Vrl5FkPv744yzLkmSGDh3qeT106FAjybz11lte/a6//nojycycOdPTlpGRYcqXL2/uueceT9v8+fONJNOkSRNPPcYYs3v3buPv72969uzpaatbt65p3LixycjI8PqsuLg4ExERYTIzM73W95FHHsnR9hk0aJCRZJYvX+7V/vTTTxubzWa2bt3qaatSpYrp0KFDjpZ7Yd9z27VRo0aeWo0x5p133jGSTKdOnbzeHx8fbyQZl8uV7fLdbrfJyMgwCxcuNJLMb7/9ZowxJjMz0zidTtO8eXOv/nv27DH+/v6mSpUqnrbp06cbSebrr7/26rty5UojyUycONEYY8xXX31lJJl169blaN3PFxMTY2JiYrJshwYNGpgzZ8542lesWGEkmenTp19yeed+Zy427d27N9v3XWx7GWNMjRo1TI0aNcypU6cu+rnnftfHjh3r1d67d28TGBjo9ft7ocTERCPJTJo06ZLrdjGZmZkmIyPDvPbaayYsLMzrs6677jqv7XvOqFGjjJ+fn1m5cqVX+7mf5X//+19jjDE//PCDkWQ++OCDLO+/cH9v0aKFqVChgjl27Jin7cyZMyYqKspUrFjRU9el9sFz89auXetpO/ez/+STT3K8TYoSThEXEwEBARoxYoRWrVqV5dRqblw4WrZevXqy2Wy68847PW0lS5ZUzZo1sx3J3K1bN6//2VepUkXR0dGaP3++JGn79u3asmWLHnzwQUnSmTNnPFP79u118OBBbd261WuZ//jHP3JU+7x581S/fn3deOONXu2PPfaYjDFeRzp5oX379vLz+79drl69epKkDh06ePU7156UlORp27lzp7p16yan06kSJUrI399fMTExkqTNmzdLkrZu3ark5GTdd999XsurXLmyWrZs6dX2/fffq2zZsurYsaPXNr3++uvldDq1YMECSdL111+vgIAAPfnkk/rkk0+0c+fOXG+HDh06qESJEp7XDRs2lKRsfz+yM2bMGK1cuTLLFB4e7umTk+21bds27dixQz169FBgYOBlP7dTp05erxs2bKjTp09nOZ2fW/PmzVPbtm3lcDg8tQ8ZMkSHDh3K0Wd9//33ioqK0vXXX+/1s7399ttls9k8P9uFCxdKUpbflwuPME+cOKHly5fr3nvvValSpTztJUqU0MMPP6x9+/blaB984IEHVKFCBU2YMMHT9v7776t8+fJZjoCvFgRsMXL//ferSZMmevnll6/otoDshIaGer0OCAhQcHBwlj9YAQEBOn36dJb3O53ObNsOHTok6ex1L0kaOHCg/P39vabevXtLUpbbJ3J6+vbQoUPZ9o2MjPTMz0vZbatLtZ/bXsePH1erVq20fPlyjRgxQgsWLNDKlSs1c+ZMSWcHkZxf7/lBc86FbX/++aeOHj2qgICALNs1OTnZs01r1Kihn3/+WRUqVNAzzzyjGjVqqEaNGnr33XeveDuEhYV5vT53avPcelxO9erV1axZsyzTuUsBOd1e5641V6xY0bK6z53m3bVrV44+Y8WKFWrXrp2ks9fSFy9erJUrV+rll1++7Ged8+eff2r9+vVZfq6lS5eWMcbzsz106JBKliyZ5ffvwt+VI0eOyBjj076SXV+73a5evXrpiy++0NGjR/XXX3/pyy+/VM+ePT3b8mrDNdhixGazacyYMYqNjdXkyZOzzD8Xihder8vroDlfcnJytm3n/piVK1dOkjR48OAs12/PqVOnjtfrnF7rCgsL08GDB7O0HzhwwOuzC9q8efN04MABLViwwHMUJp0doHK+c9vs3H9Kznfhdi5XrpzCwsI0e/bsbD+zdOnSnn+3atVKrVq1UmZmplatWqX3339f8fHxCg8P1/3333+lq2WZnG6v8uXLS5L27dtnWS3NmjVTaGio/vOf/2jUqFGX/d1MTEyUv7+/vv/+e6//pH7zzTc5/sxy5copKCjooteGz/1eh4WF6cyZMzp8+LBXyF74u3LNNdfIz8/Pp33lYuv59NNPa/To0ZoyZYpOnz6tM2fO6KmnnsrxuhU1HMEWM23btlVsbKxee+01HT9+3GteeHi4AgMDtX79eq/2//znP5bVM336dK/RkXv27NGSJUs8o0/r1KmjWrVq6bfffsv2qKVZs2ZeYeCL2267Tb///rvWrFnj1X5uVGN291oWhHN/rC78X/4///lPr9d16tSR0+nMcgkgKSlJS5Ys8WqLi4vToUOHlJmZme02vfA/LdLZU4LNmzf3nOK7cLsVFjndXrVr11aNGjU0ZcqUS440zw1/f3+9+OKL2rJli15//fVs+6SkpGjx4sWSztZesmRJr1Pop06dyvYedrvdnu0RbVxcnHbs2KGwsLBsf7bnRhuf+8/HjBkzvN6fmJjo9TokJETNmzfXzJkzvT7P7Xbrs88+U8WKFVW7du0cbI2zR7ZdunTRxIkTNWnSJHXs2NFzlH814gi2GBozZoyaNm2qlJQUXXfddZ52m82mhx56SFOmTFGNGjXUqFEjrVixQl988YVltaSkpKhz58564okn5HK5NHToUAUGBnpGaEpn/zDeeeeduv322/XYY4/p2muv1eHDh7V582atWbNG//73v6/os/v166dPP/1UHTp00GuvvaYqVarohx9+0MSJE/X000/n+I+G1aKjo3XNNdfoqaee0tChQ+Xv76/PP/9cv/32m1c/Pz8/DR8+XL169dK9996r7t276+jRoxo+fLgiIiK8rv/ef//9+vzzz9W+fXv17dtXN954o/z9/bVv3z7Nnz9fd911lzp37qxJkyZp3rx56tChgypXrqzTp097jozatm2br9vhnD/++CPb23oqVqyoihUr5nh7SWdHNHfs2FEtWrRQv379VLlyZSUlJWnOnDn6/PPP86Te559/Xps3b9bQoUO1YsUKdevWzfOgif/973+aPHmyhg8frpYtW6pDhw5KSEhQt27d9OSTT+rQoUN68803sz2F2qBBAyUmJmrGjBmqXr26AgMD1aBBA8XHx+vrr79W69at1a9fPzVs2FBut1tJSUn66aefNGDAADVv3lx33HGHWrZsqQEDBig1NVVNmzbV0qVL9emnn0qS1+/LqFGjFBsbq1tuuUUDBw5UQECAJk6cqI0bN2r69Ok+3ePat29fNW/eXJL08ccf53LrFnIFO8YKVjp/FPGFunXrZiR5jSI2xhiXy2V69uxpwsPDTUhIiOnYsaPZvXv3RUcR//XXX17vf/TRR01ISEiWz7twxPK5EaHTpk0zzz33nClfvryx2+2mVatWZtWqVVne/9tvv5n77rvPVKhQwfj7+xun02luvfVW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QkNDTVBQkImLizNJSUlefQ4dOmQefPBBU7p0aVO6dGnz4IMPmiNHjvhUKwGbt1JTU40k8/PPP3u1t2jRwsTExJjMzExTqlQp89prr5l27dqZ8uXLmxtvvNHrVq5ffvnFSDKHDx/2WkbDhg3NkCFD8mM1kFsF/ceWqfhNuVRkArYoIWDz3k033WRiYmLM/v37zZkzZ8y0adOMzWYztWvXNgcPHjSSTHBwsOfMxqhRo4zNZjMLFiwwxhjz+eefm4CAgCzLjY2NNU8++WR+rw6uREH/sWUqflMuXRX3weLqN23aNBljdO2118put+u9995Tt27dVKJECbndbknSXXfdpX79+un666/XoEGDFBcXp0mTJl1yucZcfqQ5AFiNgEWBqVGjhhYuXKjjx49r7969WrFihTIyMlStWjWVK1dOJUuWVP369b3eU69ePc8o4pyMIgeAgkLAosCFhIQoIiJCR44c0Zw5c3TXXXcpICBAN9xwg7Zu3erVd9u2bapSpYqknI0iB4CCUrKgC0DxNWfOHBljVKdOHW3fvl3PP/+86tSpo8cff1yS9Pzzz6tr165q3bq1brnlFs2ePVvfffedFixYIElyOBzq0aOHBgwYoLCwMIWGhmrgwIFq0KCB2rZtW4BrBgDKgyu+xQSDnPLejBkzTPXq1U1AQIBxOp3mmWeeMUePHvXq89FHH5maNWuawMBA06hRI/PNN994zc/JKHIUYgU94IWp+E255EsW2M7+juNyUlNT5XA45HK5eKoTkFcYjIb8lsvI8yULuAYLAIAFCFgAACxAwAIAYAFGEeczLjkhvzHKAigYHMECAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQs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hw7NctoeKG7YF4qOYnMfLAAA+alYXIMFACC/EbAAAFiAgAUAwAIELPKdMUZPPvmkQkNDZbPZtG7dukv23717d476Afg/7DcFr9iMIkbhMXv2bE2dOlULFixQ9erVVa5cuYIuCQDyHAGLfLdjxw5FRETwkA/gItLT0xUQEFDQZSCXOEWMfPXYY4/p2WefVVJSkmw2m6pWrarZs2fr5ptvVtmyZRUWFqa4uDjt2LHjostwu9164oknVLt2be3Zs0eS9N1336lp06YKDAxU9erVNXz4cJ05cya/VgvIlTZt2qhPnz7q37+/ypUrp9jYWP3+++9q3769SpUqpfDwcD388MP6+++/Pe/xdb9B/iNgka/effddvfbaa6pYsaIOHjyolStX6sSJE+rfv79WrlypX375RX5+furcubPcbneW96enp+u+++7TqlWrtGjRIlWpUkVz5szRQw89pOeee06///67/vnPf2rq1Kl64403CmANgSvzySefqGTJklq8eLFGjx6tmJgYXX/99Vq1apVmz56tP//8U/fdd5+nvy/7DQqIAfLZ22+/bapUqXLR+SkpKUaS2bBhgzHGmF27dhlJ5tdffzVt27Y1LVu2NEePHvX0b9WqlRk5cqTXMqZNm2YiIiIsqR/IazExMeb666/3vH711VdNu3btvPrs3bvXSDJbt27NdhkX22/Wrl1rWd24NI5gUeB27Nihbt26qXr16ipTpoyqVasmSUpKSvLq98ADD+j48eP66aefvL7NYvXq1XrttddUqlQpz/TEE0/o4MGDOnnyZL6uC3ClmjVr5vn36tWrNX/+fK/f6bp160qS5zRwTvcbFBwGOaHAdezYUZUqVdKHH36oyMhIud1uRUVFKT093atf+/bt9dlnn2nZsmW69dZbPe1ut1vDhw/XPffck2XZgYGBltcP5IWQkBDPv91utzp27KgxY8Zk6RcRESEp5/sNCg4BiwJ16NAhbd68Wf/85z/VqlUrSdKiRYuy7fv0008rKipKnTp10g8//KCYmBhJUpMmTbR161bVrFkz3+oGrNSkSRN9/fXXqlq1qkqWzPpn2pf9BgWHgEWBuuaaaxQWFqbJkycrIiJCSUlJGjRo0EX7P/vss8rMzFRcXJx+/PFH3XzzzRoyZIji4uJUqVIldenSRX5+flq/fr02bNigESNG5OPaAHnjmWee0YcffqgHHnhAzz//vMqVK6ft27crMTFRH374oc/7DQoG12BRoPz8/JSYmKjVq1crKipK/fr107hx4y75nvj4eA0fPlzt27fXkiVLdPvtt+v777/X3LlzdcMNN6hFixZKSEjgqwhRZEVGRmrx4sXKzMzU7bffrqioKPXt21cOh0N+fn5XtN8g//F1dQAAWIAjWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAJFVHJysp599llVr15ddrtdlSpVUseOHfXLL7/k6P1Tp05V2bJlrS0SKMZ42D9QBO3evVstW7ZU2bJlNXbsWDVs2FAZGRmaM2eOnnnmGW3ZsqWgS/RZRkaG/P39C7oMIM9wBAsUQb1795bNZtOKFSt07733qnbt2rruuuvUv39/LVu2TJKUkJCgBg0aKCQkRJUqVVLv3r11/PhxSdKCBQv0+OOPy+VyyWazyWazadiwYZKk9PR0vfDCC7r22msVEhKi5s2ba8GCBV6f/+GHH6pSpUoKDg5W586dlZCQkOVo+IMPPlCNGjUUEBCgOnXqaNq0aV7zbTabJk2apLvuukshISEaMWKEatasqTfffNOr38aNG+Xn5+f5onGgyDAAipRDhw4Zm81mRo4cecl+b7/9tpk3b57ZuXOn+eWXX0ydOnXM008/bYwxJi0tzbzzzjumTJky5uDBg+bgwYPm2LFjxhhjunXrZqKjo83//vc/s337djNu3Dhjt9vNtm3bjDHGLFq0yPj5+Zlx48aZrVu3mgkTJpjQ0FDjcDg8nz1z5kzj7+9vJkyYYLZu3WreeustU6JECTNv3jxPH0mmQoUK5qOPPjI7duwwu3fvNm+88YapX7++13r069fPtG7dOi82HZCvCFigiFm+fLmRZGbOnOnT+7788ksTFhbmef3xxx97haIxxmzfvt3YbDazf/9+r/bbbrvNDB482BhjTNeuXU2HDh285j/44INey4qOjjZPPPGEV58uXbqY9u3be15LMvHx8V59Dhw4YEqUKGGWL19ujDEmPT3dlC9f3kydOtWndQUKA04RA0WM+f/fMGmz2S7Zb/78+YqNjdW1116r0qVL65FHHtGhQ4d04sSJi75nzZo1Msaodu3aKlWqlGdauHCh5xTt1q1bdeONN3q978LXmzdvVsuWLb3aWrZsqc2bN3u1NWvWzOt1RESEOnTooClTpkiSvv/+e50+fVpdunS55LoChREBCxQxtWrVks1myxJW59uzZ4/at2+vqKgoff3111q9erUmTJgg6exgootxu90qUaKEVq9erXXr1nmmzZs3691335V0NuAvDHeTzddKZ9fnwraQkJAs7+vZs6cSExN16tQpffzxx+ratauCg4MvWjNQWBGwQBETGhqq22+/XRMmTMj2aPTo0aNatWqVzpw5o7feekstWrRQ7dq1deDAAa9+AQEByszM9Gpr3LixMjMzlZKSopo1a3pNTqdTklS3bl2tWLHC632rVq3yel2vXj0tWrTIq23JkiWqV6/eZdevffv2CgkJ0QcffKAff/xR3bt3v+x7gEKpQE9QA7giO3fuNE6n09SvX9989dVXZtu2beb333837777rqlbt65Zu3atkWTeeecds2PHDvPpp5+aa6+91kgyR44cMcYYs3jxYiPJ/Pzzz+avv/4yJ06cMMacvZ5atWpV8/XXX5udO3eaFStWmNGjR5sffvjBGPN/g5zeeusts23bNjNp0iQTFhZmypYt66lv1qxZxt/f33zwwQdm27ZtnkFO8+fP9/SRZGbNmpXt+r300ksmICDA1K1b15LtB+QHAhYoog4cOGCeeeYZU6VKFRMQEGCuvfZa06lTJ0+IJSQkmIiICBMUFGRuv/128+mnn3oFrDHGPPXUUyYsLMxIMkOHDjXGnB1YNGTIEFO1alXj7+9vnE6n6dy5s1m/fr3nfZMnTzbXXnutCQoKMnfffbcZMWKEcTqdXvVNnDjRVK9e3fj7+5vatWubTz/91Gv+pQJ2x44dRpIZO3ZsrrcTUFBsxmRz8QQAfPDEE09oy5Yt+vXXX/NkeYsXL1abNm20b98+hYeH58kygfzGk5wA+OzNN99UbGysQkJC9OOPP+qTTz7RxIkTc73ctLQ07d27V6+++qruu+8+whVFGoOcAPhsxYoVio2NVYMGDTRp0iS999576tmzZ66XO336dNWpU0cul0tjx47Ng0qBgsMpYgAALMARLAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMAC/w9P8nOVRFAfXAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "counts = {category: 0 for category in new_categories}\n", + "\n", + "for category in new_categories:\n", + " category_path = os.path.join(output_dir, category)\n", + " counts[category] = len(os.listdir(category_path))\n", + "\n", + "plt.figure(figsize=(5, 6))\n", + "bars = plt.bar(counts.keys(), counts.values(), color=['blue', 'red'])\n", + "plt.xlabel('Category')\n", + "plt.ylabel('Number of Images')\n", + "plt.title('Number of Images in Each Category')\n", + "\n", + "for bar in bars:\n", + " yval = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2, yval + 5, int(yval), ha='center', va='bottom')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "835bcd36", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + } + }, "nbformat": 4, "nbformat_minor": 5 } diff --git a/Pre-processing.ipynb b/Pre-processing.ipynb index 6c725ce..e1ffd31 100644 --- a/Pre-processing.ipynb +++ b/Pre-processing.ipynb @@ -23,6 +23,17 @@ "from PIL import Image" ] }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6430c1ea", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import matplotlib.pyplot as plt" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -97,7 +108,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\shiva\\AppData\\Local\\Temp\\ipykernel_19972\\2784625116.py:4: DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use LANCZOS or Resampling.LANCZOS instead.\n", + "C:\\Users\\shiva\\AppData\\Local\\Temp\\ipykernel_16588\\2784625116.py:4: DeprecationWarning: ANTIALIAS is deprecated and will be removed in Pillow 10 (2023-07-01). Use LANCZOS or Resampling.LANCZOS instead.\n", " img = img.resize(target_size, Image.ANTIALIAS)\n" ] }, @@ -113,6 +124,51 @@ "process_and_move_images()\n", "print(\"Preprocessing and organization completed.\")" ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "66289984", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdgAAAIhCAYAAADtrKvVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJDElEQVR4nO3dd3gU5f7+8XsDyaYAiwmQTaR3MIAUBYMQVIIKAcUjotgBRRElFBUsFEWqxgbIwSOiqASPgsdyBFHKkd6lSJEaWoxSNtQkZJ/fH/zYL0sCZEkmhbxf1zXXxT7z7OxnJpnczMwzszZjjBEAAMhTfgVdAAAAVyMCFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAvYqNnXqVNlsNgUGBmrPnj1Z5rdp00ZRUVEFUJm0YMEC2Ww2ffXVVwXy+b7avXu3OnTooNDQUNlsNsXHx1+0b9WqVRUXF5d/xRVSbdq0UZs2bfJseed+Zy42TZ06Nc8+63zDhg2TzWbT33//navlfPfdd+rYsaPCw8MVEBCg0NBQ3Xbbbfr888+VkZHh8/ImTpxo2Tojb5Qs6AJgvbS0NL3yyiuaNm1aQZdSZPXr10/Lly/XlClT5HQ6FRERUdAlFXoTJ060ZLkjR47ULbfckqW9Ro0alnxebhlj1L17d02dOlXt27dXQkKCKlWqJJfLpfnz56t37976+++/1bdvX5+WO3HiRJUrV06PPfaYNYUj1wjYYuCOO+7QF198oYEDB6pRo0YFXU6+OnXqlAIDA2Wz2XK1nI0bN+rGG2/U3XffnTeFFQP169e3ZLm1atVSixYtLFm2FcaNG6epU6dq+PDhGjJkiNe8jh076oUXXtD27dsLqDrr5dU+WBRxirgYeOGFFxQWFqYXX3zxkv1279590VNtNptNw4YN87w+d9ps/fr16tKlixwOh0JDQ9W/f3+dOXNGW7du1R133KHSpUuratWqGjt2bLafefr0afXv319Op1NBQUGKiYnR2rVrs/RbtWqVOnXqpNDQUAUGBqpx48b68ssvvfqcOyX+008/qXv37ipfvryCg4OVlpZ20XVOSkrSQw89pAoVKshut6tevXp666235Ha7Jf3facnt27frxx9/9JyO3L179yW35fnObddx48ZpzJgxqlq1qoKCgtSmTRtt27ZNGRkZGjRokCIjI+VwONS5c2elpKR4LWPGjBlq166dIiIiFBQUpHr16mnQoEE6ceJEls/78MMPVbt2bdntdtWvX19ffPGFHnvsMVWtWtWrX3p6ukaMGKG6devKbrerfPnyevzxx/XXX3959Zs3b57atGmjsLAwBQUFqXLlyvrHP/6hkydPXnK9LzxFfG47vPnmm0pISFC1atVUqlQp3XTTTVq2bFmOt2dO+LK9li9fro4dOyosLEyBgYGqUaNGtpcA/vzzTz3wwANyOBwKDw9X9+7d5XK5LllHRkaGxowZo7p16+rVV1/Nto/T6dTNN9/seT18+HA1b95coaGhKlOmjJo0aaKPPvpI538vS9WqVbVp0yYtXLjQ8zt5/s83NTVVAwcOVLVq1RQQEKBrr71W8fHxWdb/6NGj6tGjh0JDQ1WqVCl16NBBO3fuzLK/S9KiRYt02223qXTp0goODlZ0dLR++OEHrz4X2wcXLVokm82m6dOnZ1n/Tz/9VDabTStXrrzktiyKOIItBkqXLq1XXnlFffv21bx583Trrbfm2bLvu+8+PfTQQ+rVq5fmzp2rsWPHKiMjQz///LN69+6tgQMH6osvvtCLL76omjVr6p577vF6/0svvaQmTZroX//6l1wul4YNG6Y2bdpo7dq1ql69uiRp/vz5uuOOO9S8eXNNmjRJDodDiYmJ6tq1q06ePJnlFFn37t3VoUMHTZs2TSdOnJC/v3+2tf/111+Kjo5Wenq6Xn/9dVWtWlXff/+9Bg4cqB07dmjixIlq0qSJli5dqs6dO6tGjRp68803JemKThFPmDBBDRs21IQJE3T06FENGDBAHTt2VPPmzeXv768pU6Zoz549GjhwoHr27Klvv/3W894//vhD7du3V3x8vEJCQrRlyxaNGTNGK1as0Lx58zz9Jk+erF69eukf//iH3n77bblcLg0fPjzLfzLcbrfuuusu/frrr3rhhRcUHR2tPXv2aOjQoWrTpo1WrVqloKAgz7XnVq1aacqUKSpbtqz279+v2bNnKz09XcHBwVe0HerWrat33nlHkvTqq6+qffv22rVrlxwOx2Xf73a7debMmSztJUv+35+znG6vOXPmqGPHjqpXr54SEhJUuXJl7d69Wz/99FOW5f/jH/9Q165d1aNHD23YsEGDBw+WJE2ZMuWita5atUqHDx/WE088keMjuN27d6tXr16qXLmyJGnZsmV69tlntX//fs8R8KxZs3TvvffK4XB4TsXb7XZJ0smTJxUTE6N9+/bppZdeUsOGDbVp0yYNGTJEGzZs0M8//yybzSa3262OHTtq1apVGjZsmOd3/Y477shS08KFCxUbG6uGDRvqo48+kt1u18SJE9WxY0dNnz5dXbt29ep/4T4YHR2txo0ba8KECXrggQe8+o4fP1433HCDbrjhhhxtnyLF4Kr18ccfG0lm5cqVJi0tzVSvXt00a9bMuN1uY4wxMTEx5rrrrvP037Vrl5FkPv744yzLkmSGDh3qeT106FAjybz11lte/a6//nojycycOdPTlpGRYcqXL2/uueceT9v8+fONJNOkSRNPPcYYs3v3buPv72969uzpaatbt65p3LixycjI8PqsuLg4ExERYTIzM73W95FHHsnR9hk0aJCRZJYvX+7V/vTTTxubzWa2bt3qaatSpYrp0KFDjpZ7Yd9z27VRo0aeWo0x5p133jGSTKdOnbzeHx8fbyQZl8uV7fLdbrfJyMgwCxcuNJLMb7/9ZowxJjMz0zidTtO8eXOv/nv27DH+/v6mSpUqnrbp06cbSebrr7/26rty5UojyUycONEYY8xXX31lJJl169blaN3PFxMTY2JiYrJshwYNGpgzZ8542lesWGEkmenTp19yeed+Zy427d27N9v3XWx7GWNMjRo1TI0aNcypU6cu+rnnftfHjh3r1d67d28TGBjo9ft7ocTERCPJTJo06ZLrdjGZmZkmIyPDvPbaayYsLMzrs6677jqv7XvOqFGjjJ+fn1m5cqVX+7mf5X//+19jjDE//PCDkWQ++OCDLO+/cH9v0aKFqVChgjl27Jin7cyZMyYqKspUrFjRU9el9sFz89auXetpO/ez/+STT3K8TYoSThEXEwEBARoxYoRWrVqV5dRqblw4WrZevXqy2Wy68847PW0lS5ZUzZo1sx3J3K1bN6//2VepUkXR0dGaP3++JGn79u3asmWLHnzwQUnSmTNnPFP79u118OBBbd261WuZ//jHP3JU+7x581S/fn3deOONXu2PPfaYjDFeRzp5oX379vLz+79drl69epKkDh06ePU7156UlORp27lzp7p16yan06kSJUrI399fMTExkqTNmzdLkrZu3ark5GTdd999XsurXLmyWrZs6dX2/fffq2zZsurYsaPXNr3++uvldDq1YMECSdL111+vgIAAPfnkk/rkk0+0c+fOXG+HDh06qESJEp7XDRs2lKRsfz+yM2bMGK1cuTLLFB4e7umTk+21bds27dixQz169FBgYOBlP7dTp05erxs2bKjTp09nOZ2fW/PmzVPbtm3lcDg8tQ8ZMkSHDh3K0Wd9//33ioqK0vXXX+/1s7399ttls9k8P9uFCxdKUpbflwuPME+cOKHly5fr3nvvValSpTztJUqU0MMPP6x9+/blaB984IEHVKFCBU2YMMHT9v7776t8+fJZjoCvFgRsMXL//ferSZMmevnll6/otoDshIaGer0OCAhQcHBwlj9YAQEBOn36dJb3O53ObNsOHTok6ex1L0kaOHCg/P39vabevXtLUpbbJ3J6+vbQoUPZ9o2MjPTMz0vZbatLtZ/bXsePH1erVq20fPlyjRgxQgsWLNDKlSs1c+ZMSWcHkZxf7/lBc86FbX/++aeOHj2qgICALNs1OTnZs01r1Kihn3/+WRUqVNAzzzyjGjVqqEaNGnr33XeveDuEhYV5vT53avPcelxO9erV1axZsyzTuUsBOd1e5641V6xY0bK6z53m3bVrV44+Y8WKFWrXrp2ks9fSFy9erJUrV+rll1++7Ged8+eff2r9+vVZfq6lS5eWMcbzsz106JBKliyZ5ffvwt+VI0eOyBjj076SXV+73a5evXrpiy++0NGjR/XXX3/pyy+/VM+ePT3b8mrDNdhixGazacyYMYqNjdXkyZOzzD8Xihder8vroDlfcnJytm3n/piVK1dOkjR48OAs12/PqVOnjtfrnF7rCgsL08GDB7O0HzhwwOuzC9q8efN04MABLViwwHMUJp0doHK+c9vs3H9Kznfhdi5XrpzCwsI0e/bsbD+zdOnSnn+3atVKrVq1UmZmplatWqX3339f8fHxCg8P1/3333+lq2WZnG6v8uXLS5L27dtnWS3NmjVTaGio/vOf/2jUqFGX/d1MTEyUv7+/vv/+e6//pH7zzTc5/sxy5copKCjooteGz/1eh4WF6cyZMzp8+LBXyF74u3LNNdfIz8/Pp33lYuv59NNPa/To0ZoyZYpOnz6tM2fO6KmnnsrxuhU1HMEWM23btlVsbKxee+01HT9+3GteeHi4AgMDtX79eq/2//znP5bVM336dK/RkXv27NGSJUs8o0/r1KmjWrVq6bfffsv2qKVZs2ZeYeCL2267Tb///rvWrFnj1X5uVGN291oWhHN/rC78X/4///lPr9d16tSR0+nMcgkgKSlJS5Ys8WqLi4vToUOHlJmZme02vfA/LdLZU4LNmzf3nOK7cLsVFjndXrVr11aNGjU0ZcqUS440zw1/f3+9+OKL2rJli15//fVs+6SkpGjx4sWSztZesmRJr1Pop06dyvYedrvdnu0RbVxcnHbs2KGwsLBsf7bnRhuf+8/HjBkzvN6fmJjo9TokJETNmzfXzJkzvT7P7Xbrs88+U8WKFVW7du0cbI2zR7ZdunTRxIkTNWnSJHXs2NFzlH814gi2GBozZoyaNm2qlJQUXXfddZ52m82mhx56SFOmTFGNGjXUqFEjrVixQl988YVltaSkpKhz58564okn5HK5NHToUAUGBnpGaEpn/zDeeeeduv322/XYY4/p2muv1eHDh7V582atWbNG//73v6/os/v166dPP/1UHTp00GuvvaYqVarohx9+0MSJE/X000/n+I+G1aKjo3XNNdfoqaee0tChQ+Xv76/PP/9cv/32m1c/Pz8/DR8+XL169dK9996r7t276+jRoxo+fLgiIiK8rv/ef//9+vzzz9W+fXv17dtXN954o/z9/bVv3z7Nnz9fd911lzp37qxJkyZp3rx56tChgypXrqzTp097jozatm2br9vhnD/++CPb23oqVqyoihUr5nh7SWdHNHfs2FEtWrRQv379VLlyZSUlJWnOnDn6/PPP86Te559/Xps3b9bQoUO1YsUKdevWzfOgif/973+aPHmyhg8frpYtW6pDhw5KSEhQt27d9OSTT+rQoUN68803sz2F2qBBAyUmJmrGjBmqXr26AgMD1aBBA8XHx+vrr79W69at1a9fPzVs2FBut1tJSUn66aefNGDAADVv3lx33HGHWrZsqQEDBig1NVVNmzbV0qVL9emnn0qS1+/LqFGjFBsbq1tuuUUDBw5UQECAJk6cqI0bN2r69Ok+3ePat29fNW/eXJL08ccf53LrFnIFO8YKVjp/FPGFunXrZiR5jSI2xhiXy2V69uxpwsPDTUhIiOnYsaPZvXv3RUcR//XXX17vf/TRR01ISEiWz7twxPK5EaHTpk0zzz33nClfvryx2+2mVatWZtWqVVne/9tvv5n77rvPVKhQwfj7+xun02luvfVW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QkNDTVBQkImLizNJSUlefQ4dOmQefPBBU7p0aVO6dGnz4IMPmiNHjvhUKwGbt1JTU40k8/PPP3u1t2jRwsTExJjMzExTqlQp89prr5l27dqZ8uXLmxtvvNHrVq5ffvnFSDKHDx/2WkbDhg3NkCFD8mM1kFsF/ceWqfhNuVRkArYoIWDz3k033WRiYmLM/v37zZkzZ8y0adOMzWYztWvXNgcPHjSSTHBwsOfMxqhRo4zNZjMLFiwwxhjz+eefm4CAgCzLjY2NNU8++WR+rw6uREH/sWUqflMuXRX3weLqN23aNBljdO2118put+u9995Tt27dVKJECbndbknSXXfdpX79+un666/XoEGDFBcXp0mTJl1yucZcfqQ5AFiNgEWBqVGjhhYuXKjjx49r7969WrFihTIyMlStWjWVK1dOJUuWVP369b3eU69ePc8o4pyMIgeAgkLAosCFhIQoIiJCR44c0Zw5c3TXXXcpICBAN9xwg7Zu3erVd9u2bapSpYqknI0iB4CCUrKgC0DxNWfOHBljVKdOHW3fvl3PP/+86tSpo8cff1yS9Pzzz6tr165q3bq1brnlFs2ePVvfffedFixYIElyOBzq0aOHBgwYoLCwMIWGhmrgwIFq0KCB2rZtW4BrBgDKgyu+xQSDnPLejBkzTPXq1U1AQIBxOp3mmWeeMUePHvXq89FHH5maNWuawMBA06hRI/PNN994zc/JKHIUYgU94IWp+E255EsW2M7+juNyUlNT5XA45HK5eKoTkFcYjIb8lsvI8yULuAYLAIAFCFgAACxAwAIAYAFGEeczLjkhvzHKAigYHMECAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAKFOmDPnDmjV155RdWqVVNQUJCqV6+u1157TW6329PHGKNhw4YpMjJSQUFBatOmjTZt2uS1nLS0ND377LMqV66cQkJC1KlTJ+3bty+/VwcAUIwU6oAdM2aMJk2apPHjx2vz5s0aO3asxo0bp/fff9/TZ+zYsUpISND48eO1cuVKOZ1OxcbG6tixY54+8fHxmjVrlhITE7Vo0SIdP35ccXFxyszMLIjVAgAUB6YQ69Chg+nevbtX2z333GMeeughY4wxbrfbOJ1OM3r0aM/806dPG4fDYSZNmmSMMebo0aPG39/fJCYmevrs37/f+Pn5mdmzZ+e4FpfLZSQZl8uVm1UyEhNT/k6FWkFvHKbiN+WSL1lQqI9gb775Zv3yyy/atm2bJOm3337TokWL1L59e0nSrl27lJycrHbt2nneY7fbFRMToyVLlkiSVq9erYyMDK8+kZGRioqK8vTJTlpamlJTU70mAAByqmRBF3ApL774olwul+rWrasSJUooMzNTb7zxhh544AFJUnJysiQpPDzc633h4eHas2ePp09AQICuueaaLH3OvT87o0aN0vDhw/NydQAAxUihPoKdMWOGPvvsM33xxRdas2aNPvnkE7355pv65JNPvPrZbDav18aYLG0XulyfwYMHy+Vyeaa9e/de+YoAAIqdQn0E+/zzz2vQoEG6//77JUkNGjTQnj17NGrUKD366KNyOp2Szh6lRkREeN6XkpLiOap1Op1KT0/XkSNHvI5iU1JSFB0dfdHPttvtstvtVqwWAKAYKNRHsCdPnpSfn3eJJUqU8NymU61aNTmdTs2dO9czPz09XQsXLvSEZ9OmTeXv7+/V5+DBg9q4ceMlAxYAgNwo1EewHTt21BtvvKHKlSvruuuu09q1a5WQkKDu3btLOntqOD4+XiNHjlStWrVUq1YtjRw5UsHBwerWrZskyeFwqEePHhowYIDCwsIUGhqqgQMHqkGDBmrbtm1Brh4A4GqW6zHLFkpNTTV9+/Y1lStXNoGBgaZ69erm5ZdfNmlpaZ4+brfbDB061DidTmO3203r1q3Nhg0bvJZz6tQp06dPHxMaGmqCgoJMXFycSUpK8qkWbtNhKqpToVbQG4ep+E255EsW2M7+juNyUlNT5XA45HK5VKZMmStezmXGXgF5rlDv4ewQyG+53CF8yYJCfQ0WAICiioAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACPgfsJ598oh9++MHz+oUXXlDZsmUVHR2tPXv25GlxAAAUVT4H7MiRIxUUFCRJWrp0qcaPH6+xY8eqXLly6tevX54XCABAUVTS1zfs3btXNWvWlCR98803uvfee/Xkk0+qZcuWatOmTV7XBwBAkeTzEWypUqV06NAhSdJPP/2ktm3bSpICAwN16tSpvK0OAIAiyucj2NjYWPXs2VONGzfWtm3b1KFDB0nSpk2bVLVq1byuDwCAIsnnI9gJEybopptu0l9//aWvv/5aYWFhkqTVq1frgQceyPMCAQAoimzGGFPQRRQFqampcjgccrlcKlOmzBUvx2bLw6KAHCjUezg7BPJbLncIX7Lgiu6D/fXXX/XQQw8pOjpa+/fvlyRNmzZNixYtupLFAQBw1fE5YL/++mvdfvvtCgoK0po1a5SWliZJOnbsmEaOHJnnBQIAUBT5HLAjRozQpEmT9OGHH8rf39/THh0drTVr1uRpcQAAFFU+B+zWrVvVunXrLO1lypTR0aNH86ImAACKPJ8DNiIiQtu3b8/SvmjRIlWvXj1PigIAoKjzOWB79eqlvn37avny5bLZbDpw4IA+//xzDRw4UL1797aiRgAAihyfHzTxwgsvyOVy6ZZbbtHp06fVunVr2e12DRw4UH369LGiRgAAipwrvg/25MmT+v333+V2u1W/fn2VKlUqr2srVLgPFkUV98EC58nH+2B9PoI9Jzg4WM2aNbvStwMAcFXzOWA7d+4sWzb/67TZbAoMDFTNmjXVrVs31alTJ08KBACgKPJ5kJPD4dC8efO0Zs0aT9CuXbtW8+bN05kzZzRjxgw1atRIixcvzvNiAQAoKnw+gnU6nerWrZvGjx8vP7+z+ex2u9W3b1+VLl1aiYmJeuqpp/Tiiy/y6EQAQLHl8yCn8uXLa/Hixapdu7ZX+7Zt2xQdHa2///5bGzZsUKtWra6qB08wyAlFFYOcgPMU5of9nzlzRlu2bMnSvmXLFmVmZko6++Xr2V2nBQCguPD5FPHDDz+sHj166KWXXtINN9wgm82mFStWaOTIkXrkkUckSQsXLtR1112X58UCAFBU+Bywb7/9tsLDwzV27Fj9+eefkqTw8HD169dPL774oiSpXbt2uuOOO/K2UgAAipBcfeF6amqqJOXqmmRRwTVYFFVcgwXOUxQeNCEVj2AFAOBKXFHAfvXVV/ryyy+VlJSk9PR0r3l8JywAAFcwivi9997T448/rgoVKmjt2rW68cYbFRYWpp07d+rOO++0okYAAIocnwN24sSJmjx5ssaPH6+AgAC98MILmjt3rp577jm5XC4ragQAoMjxOWCTkpIUHR0tSQoKCtKxY8cknb19Z/r06XlbHQAARZTPAet0OnXo0CFJUpUqVbRs2TJJ0q5du5SLAckAAFxVfA7YW2+9Vd99950kqUePHurXr59iY2PVtWtXde7cOc8LBACgKPL5Pli32y23262SJc8OQP7yyy+1aNEi1axZU0899ZQCAgIsKbSgcR8siqpCfWKJHQL5LR/vg83VgyaKEwIWRVWh3sPZIZDfCvuDJk6fPq3169crJSVFbrfba16nTp2uZJEAAFxVfA7Y2bNn65FHHtHff/+dZZ7NZvN8ow4AAMWZz4Oc+vTpoy5duujgwYOe67HnJsIVAICzfA7YlJQU9e/fX+Hh4VbUAwDAVcHngL333nu1YMECC0oBAODq4fMo4pMnT6pLly4qX768GjRoIH9/f6/5zz33XJ4WWFgwihhFFaOIgfMU5lHEX3zxhebMmaOgoCAtWLBAtvN2EJvNdtUGLAAAvvA5YF955RW99tprGjRokPz8fD7DDABAseBzQqanp6tr166EKwAAl+BzSj766KOaMWOGFbUAAHDV8PkUcWZmpsaOHas5c+aoYcOGWQY5JSQk5FlxAAAUVT4H7IYNG9S4cWNJ0saNG73m2RgRCADAWaaQ27dvn3nwwQdNaGioCQoKMo0aNTKrVq3yzHe73Wbo0KEmIiLCBAYGmpiYGLNx40avZZw+fdr06dPHhIWFmeDgYNOxY0ezd+9en+pwuVxGknG5XLlan7NjxJmY8m8q1Ap64zAVvymXfMmCQj1S6ciRI2rZsqX8/f31448/6vfff9dbb72lsmXLevqMHTtWCQkJGj9+vFauXCmn06nY2FgdO3bM0yc+Pl6zZs1SYmKiFi1apOPHjysuLo5HOwIALJPjB03cc889OVrgzJkzc1XQ+QYNGqTFixfr119/zXa+MUaRkZGKj4/Xiy++KElKS0tTeHi4xowZo169esnlcql8+fKaNm2aunbtKkk6cOCAKlWqpP/+97+6/fbbc1QLD5pAUZWzPbyAsEMgv+Vyh/AlC3J8BOtwOHI05aVvv/1WzZo1U5cuXVShQgU1btxYH374oWf+rl27lJycrHbt2nna7Ha7YmJitGTJEknS6tWrlZGR4dUnMjJSUVFRnj7ZSUtLU2pqqtcEAEBO5XiQ08cff2xlHdnauXOnPvjgA/Xv318vvfSSVqxYoeeee052u12PPPKIkpOTJSnLFw+Eh4drz549kqTk5GQFBATommuuydLn3PuzM2rUKA0fPjyP1wgAUFwU6muwbrdbTZo00ciRI9W4cWP16tVLTzzxhD744AOvfheOXjbGXHZE8+X6DB48WC6XyzPt3bv3ylcEAFDsFOqAjYiIUP369b3a6tWrp6SkJEmS0+mUpCxHoikpKZ6jWqfTqfT0dB05cuSifbJjt9tVpkwZrwkAgJwq1AHbsmVLbd261att27ZtqlKliiSpWrVqcjqdmjt3rmd+enq6Fi5cqOjoaElS06ZN5e/v79Xn4MGD2rhxo6cPAAB5Ltc3BVloxYoVpmTJkuaNN94wf/zxh/n8889NcHCw+eyzzzx9Ro8ebRwOh5k5c6bZsGGDeeCBB0xERIRJTU319HnqqadMxYoVzc8//2zWrFljbr31VtOoUSNz5syZHNfCfbBMRXUq1Ap64zAVvymXfMmCHH1a48aNzeHDh40xxgwfPtycOHEidxX64LvvvjNRUVHGbrebunXrmsmTJ3vNP/egCafTaex2u2ndurXZsGGDV59Tp06ZPn36eB5WERcXZ5KSknyqg4BlKqpToVbQG4ep+E255EsW5Og+2KCgIP3xxx+qWLGiSpQooYMHD6pChQpWH1wXKtwHi6Lq8nt4AWKHQH7L5Q6R51+4fv311+vxxx/XzTffLGOM3nzzTZUqVSrbvkOGDPG9YgAArjI5OoLdunWrhg4dqh07dmjNmjWqX7++SpbMms02m01r1qyxpNCCxhEsiiqOYIHz5OMRbI4flXiOn5+fkpOTOUV8hfh7gvxGwALnKWyniM/ndruvuDAAAIoLnwNWknbs2KF33nlHmzdvls1mU7169dS3b1/VqFEjr+sDAKBI8vlBE3PmzFH9+vW1YsUKNWzYUFFRUVq+fLmuu+46r4c5AABQnPl8DbZx48a6/fbbNXr0aK/2QYMG6aeffmKQ02VwyQn5jWuwwHny8Rqsz0ewmzdvVo8ePbK0d+/eXb///ruviwMA4Krkc8CWL19e69aty9K+bt26YjeyGACAi/F5kNMTTzyhJ598Ujt37lR0dLRsNpsWLVqkMWPGaMCAAVbUCABAkePzNVhjjN555x299dZbOnDggCQpMjJSzz//vJ577rnLfg9rUcU1WBRVXIMFzlOYHzRxvmPHjkmSSpcufaWLKDIIWBRVBCxwnsL8oInzFYdgBQDgShTqL1wHAKCoImABALAAAQsAgAV8CtiMjAzdcsst2rZtm1X1AABwVfApYP39/bVx48ar9lYcAADyis+niB955BF99NFHVtQCAMBVw+fbdNLT0/Wvf/1Lc+fOVbNmzRQSEuI1PyEhIc+KAwCgqPI5YDdu3KgmTZpIUpZrsZw6BgDgLJ8Ddv78+VbUAQDAVeWKb9PZvn275syZo1OnTkk6+4xiAABwls8Be+jQId12222qXbu22rdvr4MHD0qSevbsybfpAADw//kcsP369ZO/v7+SkpIUHBzsae/atatmz56dp8UBAFBU+XwN9qefftKcOXNUsWJFr/ZatWppz549eVYYAABFmc9HsCdOnPA6cj3n77//lt1uz5OiAAAo6nwO2NatW+vTTz/1vLbZbHK73Ro3bpxuueWWPC0OAICiyudTxOPGjVObNm20atUqpaen64UXXtCmTZt0+PBhLV682IoaAQAocnw+gq1fv77Wr1+vG2+8UbGxsTpx4oTuuecerV27VjVq1LCiRgAAihyb4QbWHElNTZXD4ZDL5VKZMmWueDk87Ar5rVDv4ewQyG+53CF8yQKfTxFL0pEjR/TRRx9p8+bNstlsqlevnh5//HGFhoZeUcEAAFxtfD5FvHDhQlWrVk3vvfeejhw5osOHD+u9995TtWrVtHDhQitqBACgyPH5FHFUVJSio6P1wQcfqESJEpKkzMxM9e7dW4sXL9bGjRstKbSgcYoYRRWniIHz5OMpYp+PYHfs2KEBAwZ4wlWSSpQoof79+2vHjh2+VwsAwFXI54Bt0qSJNm/enKV98+bNuv766/OiJgAAirwcDXJav36959/PPfec+vbtq+3bt6tFixaSpGXLlmnChAkaPXq0NVUCAFDE5OgarJ+fn2w222W/ks5msykzMzPPiitMuAaLooprsMB5CtttOrt27cpVQQAAFDc5CtgqVapYXQcAAFeVK3rQxP79+7V48WKlpKTI7XZ7zXvuuefypDAAAIoynwP2448/1lNPPaWAgACFhYXJdt41FJvNRsACAKArCNghQ4ZoyJAhGjx4sPz8fL7LBwCAYsHnhDx58qTuv/9+whUAgEvwOSV79Oihf//731bUAgDAVcPnZxFnZmYqLi5Op06dUoMGDeTv7+81PyEhIU8LLCy4DxZFFffBAucpbPfBnm/kyJGaM2eO6tSpI0lZBjkBAIArCNiEhARNmTJFjz32mAXlAABwdfD5GqzdblfLli2tqAUAgKuGzwHbt29fvf/++1bUAgDAVcPnU8QrVqzQvHnz9P333+u6667LMshp5syZeVYcAABFlc8BW7ZsWd1zzz1W1AIAwFXjih6VCAAALo3HMQEAYAGfj2CrVat2yftdd+7cmauCAAC4GvgcsPHx8V6vMzIytHbtWs2ePVvPP/98XtUFAECR5nPA9u3bN9v2CRMmaNWqVbkuCACAq0GeXYO988479fXXX+fV4gAAKNLyLGC/+uorhYaG5tXiAAAo0nw+Rdy4cWOvQU7GGCUnJ+uvv/7SxIkT87Q4AACKKp8D9u677/Z67efnp/Lly6tNmzaqW7duXtUFAECR5vP3wRZXfB8siqpCvYezQyC/5eP3wfKgCQAALJDjU8R+fn6X/UJ1m82mM2fO5LooAACKuhwH7KxZsy46b8mSJXr//ffF2WYAAM7KccDeddddWdq2bNmiwYMH67vvvtODDz6o119/PU+LAwCgqLqia7AHDhzQE088oYYNG+rMmTNat26dPvnkE1WuXDmv6wMAoEjyKWBdLpdefPFF1axZU5s2bdIvv/yi7777TlFRUVbVBwBAkZTjU8Rjx47VmDFj5HQ6NX369GxPGQMAgLNyfB+sn5+fgoKC1LZtW5UoUeKi/WbOnJlnxRUm3AeLoqpQjz1kh0B+K4z3wT7yyCO67777FBoaKofDcdHJSqNGjZLNZvP6yjxjjIYNG6bIyEgFBQWpTZs22rRpk9f70tLS9Oyzz6pcuXIKCQlRp06dtG/fPktrBQAUbzk+RTx16lQLy7i8lStXavLkyWrYsKFX+9ixY5WQkKCpU6eqdu3aGjFihGJjY7V161aVLl1a0tnvsP3uu++UmJiosLAwDRgwQHFxcVq9evUlj8YBALhipgg4duyYqVWrlpk7d66JiYkxffv2NcYY43a7jdPpNKNHj/b0PX36tHE4HGbSpEnGGGOOHj1q/P39TWJioqfP/v37jZ+fn5k9e3aOa3C5XEaScblcuVqXs+cnmJjybyrUCnrjMBW/KZd8yYIi8ajEZ555Rh06dFDbtm292nft2qXk5GS1a9fO02a32xUTE6MlS5ZIklavXq2MjAyvPpGRkYqKivL0yU5aWppSU1O9JgAAcsrnb9PJb4mJiVqzZo1WrlyZZV5ycrIkKTw83Ks9PDxce/bs8fQJCAjQNddck6XPufdnZ9SoURo+fHhuywcAFFOF+gh279696tu3rz777DMFBgZetN+Fz0g2xlz2ucmX6zN48GC5XC7PtHfvXt+KBwAUa4U6YFevXq2UlBQ1bdpUJUuWVMmSJbVw4UK99957KlmypOfI9cIj0ZSUFM88p9Op9PR0HTly5KJ9smO321WmTBmvCQCAnCrUAXvbbbdpw4YNWrdunWdq1qyZHnzwQa1bt07Vq1eX0+nU3LlzPe9JT0/XwoULFR0dLUlq2rSp/P39vfocPHhQGzdu9PQBACCvFeprsKVLl87yGMaQkBCFhYV52uPj4zVy5EjVqlVLtWrV0siRIxUcHKxu3bpJkhwOh3r06KEBAwYoLCxMoaGhGjhwoBo0aJBl0BQAAHmlUAdsTrzwwgs6deqUevfurSNHjqh58+b66aefPPfAStLbb7+tkiVL6r777tOpU6d02223aerUqdwDCwCwTI4flVjc8ahEFFWFeg9nh0B+y+UOYcmjEgEAQM4RsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQp1wI4aNUo33HCDSpcurQoVKujuu+/W1q1bvfoYYzRs2DBFRkYqKChIbdq00aZNm7z6pKWl6dlnn1W5cuUUEhKiTp06ad++ffm5KgCAYqZQB+zChQv1zDPPaNmyZZo7d67OnDmjdu3a6cSJE54+Y8eOVUJCgsaPH6+VK1fK6XQqNjZWx44d8/SJj4/XrFmzlJiYqEWLFun48eOKi4tTZmZmQawWAKA4MEVISkqKkWQWLlxojDHG7XYbp9NpRo8e7elz+vRp43A4zKRJk4wxxhw9etT4+/ubxMRET5/9+/cbPz8/M3v27Bx/tsvlMpKMy+XK1TpITEz5OxVqBb1xmIrflEu+ZEGhPoK9kMvlkiSFhoZKknbt2qXk5GS1a9fO08dutysmJkZLliyRJK1evVoZGRlefSIjIxUVFeXpk520tDSlpqZ6TQAA5FSRCVhjjPr376+bb75ZUVFRkqTk5GRJUnh4uFff8PBwz7zk5GQFBATommuuuWif7IwaNUoOh8MzVapUKS9XBwBwlSsyAdunTx+tX79e06dPzzLPZrN5vTbGZGm70OX6DB48WC6XyzPt3bv3ygoHABRLRSJgn332WX377beaP3++Klas6Gl3Op2SlOVINCUlxXNU63Q6lZ6eriNHjly0T3bsdrvKlCnjNQEAkFOFOmCNMerTp49mzpypefPmqVq1al7zq1WrJqfTqblz53ra0tPTtXDhQkVHR0uSmjZtKn9/f68+Bw8e1MaNGz19AADIayULuoBLeeaZZ/TFF1/oP//5j0qXLu05UnU4HAoKCpLNZlN8fLxGjhypWrVqqVatWho5cqSCg4PVrVs3T98ePXpowIABCgsLU2hoqAYOHKgGDRqobdu2Bbl6AICrWa7HLFtIUrbTxx9/7OnjdrvN0KFDjdPpNHa73bRu3dps2LDBazmnTp0yffr0MaGhoSYoKMjExcWZpKQkn2rhNh2mojoVagW9cZiK35RLvmSB7ezvOC4nNTVVDodDLpcrV9djLzP2CshzhXoPZ4dAfsvlDuFLFhTqa7AAABRVBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMACBCwAABYgYAEAsAABCwCABQhYAAAsQMACAGABAhYAAAsQsAAAWICABQDAAgQsAAAWIGABALAAAQsAgAUIWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxSrgJ04caKqVaumwMBANW3aVL/++mtBlwQAuEoVm4CdMWOG4uPj9fLLL2vt2rVq1aqV7rzzTiUlJRV0aQCAq5DNGGMKuoj80Lx5czVp0kQffPCBp61evXq6++67NWrUqMu+PzU1VQ6HQy6XS2XKlLniOmy2K34rcEUK9R7ODoH8lssdwpcsKJmrTyoi0tPTtXr1ag0aNMirvV27dlqyZEm270lLS1NaWprntcvlknR24wJFCb+ywHlyuUOcy4CcHJsWi4D9+++/lZmZqfDwcK/28PBwJScnZ/ueUaNGafjw4VnaK1WqZEmNgFUcjoKuAChE8miHOHbsmByXWVaxCNhzbBecjjLGZGk7Z/Dgwerfv7/ntdvt1uHDhxUWFnbR98A6qampqlSpkvbu3ZurU/RAUce+ULCMMTp27JgiIyMv27dYBGy5cuVUokSJLEerKSkpWY5qz7Hb7bLb7V5tZcuWtapE5FCZMmX4owKIfaEgXe7I9ZxiMYo4ICBATZs21dy5c73a586dq+jo6AKqCgBwNSsWR7CS1L9/fz388MNq1qyZbrrpJk2ePFlJSUl66qmnCro0AMBVqNgEbNeuXXXo0CG99tprOnjwoKKiovTf//5XVapUKejSkAN2u11Dhw7NctoeKG7YF4qOYnMfLAAA+alYXIMFACC/EbAAAFiAgAUAwAIELPKdMUZPPvmkQkNDZbPZtG7dukv23717d476Afg/7DcFr9iMIkbhMXv2bE2dOlULFixQ9erVVa5cuYIuCQDyHAGLfLdjxw5FRETwkA/gItLT0xUQEFDQZSCXOEWMfPXYY4/p2WefVVJSkmw2m6pWrarZs2fr5ptvVtmyZRUWFqa4uDjt2LHjostwu9164oknVLt2be3Zs0eS9N1336lp06YKDAxU9erVNXz4cJ05cya/VgvIlTZt2qhPnz7q37+/ypUrp9jYWP3+++9q3769SpUqpfDwcD388MP6+++/Pe/xdb9B/iNgka/effddvfbaa6pYsaIOHjyolStX6sSJE+rfv79WrlypX375RX5+furcubPcbneW96enp+u+++7TqlWrtGjRIlWpUkVz5szRQw89pOeee06///67/vnPf2rq1Kl64403CmANgSvzySefqGTJklq8eLFGjx6tmJgYXX/99Vq1apVmz56tP//8U/fdd5+nvy/7DQqIAfLZ22+/bapUqXLR+SkpKUaS2bBhgzHGmF27dhlJ5tdffzVt27Y1LVu2NEePHvX0b9WqlRk5cqTXMqZNm2YiIiIsqR/IazExMeb666/3vH711VdNu3btvPrs3bvXSDJbt27NdhkX22/Wrl1rWd24NI5gUeB27Nihbt26qXr16ipTpoyqVasmSUpKSvLq98ADD+j48eP66aefvL7NYvXq1XrttddUqlQpz/TEE0/o4MGDOnnyZL6uC3ClmjVr5vn36tWrNX/+fK/f6bp160qS5zRwTvcbFBwGOaHAdezYUZUqVdKHH36oyMhIud1uRUVFKT093atf+/bt9dlnn2nZsmW69dZbPe1ut1vDhw/XPffck2XZgYGBltcP5IWQkBDPv91utzp27KgxY8Zk6RcRESEp5/sNCg4BiwJ16NAhbd68Wf/85z/VqlUrSdKiRYuy7fv0008rKipKnTp10g8//KCYmBhJUpMmTbR161bVrFkz3+oGrNSkSRN9/fXXqlq1qkqWzPpn2pf9BgWHgEWBuuaaaxQWFqbJkycrIiJCSUlJGjRo0EX7P/vss8rMzFRcXJx+/PFH3XzzzRoyZIji4uJUqVIldenSRX5+flq/fr02bNigESNG5OPaAHnjmWee0YcffqgHHnhAzz//vMqVK6ft27crMTFRH374oc/7DQoG12BRoPz8/JSYmKjVq1crKipK/fr107hx4y75nvj4eA0fPlzt27fXkiVLdPvtt+v777/X3LlzdcMNN6hFixZKSEjgqwhRZEVGRmrx4sXKzMzU7bffrqioKPXt21cOh0N+fn5XtN8g//F1dQAAWIAjWAAALEDAAgBgAQIWAAALELAAAFiAgAUAwAIELAAAFiBgAQCwAAELAIAFCFgAACxAwAJFVHJysp599llVr15ddrtdlSpVUseOHfXLL7/k6P1Tp05V2bJlrS0SKMZ42D9QBO3evVstW7ZU2bJlNXbsWDVs2FAZGRmaM2eOnnnmGW3ZsqWgS/RZRkaG/P39C7oMIM9wBAsUQb1795bNZtOKFSt07733qnbt2rruuuvUv39/LVu2TJKUkJCgBg0aKCQkRJUqVVLv3r11/PhxSdKCBQv0+OOPy+VyyWazyWazadiwYZKk9PR0vfDCC7r22msVEhKi5s2ba8GCBV6f/+GHH6pSpUoKDg5W586dlZCQkOVo+IMPPlCNGjUUEBCgOnXqaNq0aV7zbTabJk2apLvuukshISEaMWKEatasqTfffNOr38aNG+Xn5+f5onGgyDAAipRDhw4Zm81mRo4cecl+b7/9tpk3b57ZuXOn+eWXX0ydOnXM008/bYwxJi0tzbzzzjumTJky5uDBg+bgwYPm2LFjxhhjunXrZqKjo83//vc/s337djNu3Dhjt9vNtm3bjDHGLFq0yPj5+Zlx48aZrVu3mgkTJpjQ0FDjcDg8nz1z5kzj7+9vJkyYYLZu3WreeustU6JECTNv3jxPH0mmQoUK5qOPPjI7duwwu3fvNm+88YapX7++13r069fPtG7dOi82HZCvCFigiFm+fLmRZGbOnOnT+7788ksTFhbmef3xxx97haIxxmzfvt3YbDazf/9+r/bbbrvNDB482BhjTNeuXU2HDh285j/44INey4qOjjZPPPGEV58uXbqY9u3be15LMvHx8V59Dhw4YEqUKGGWL19ujDEmPT3dlC9f3kydOtWndQUKA04RA0WM+f/fMGmz2S7Zb/78+YqNjdW1116r0qVL65FHHtGhQ4d04sSJi75nzZo1Msaodu3aKlWqlGdauHCh5xTt1q1bdeONN3q978LXmzdvVsuWLb3aWrZsqc2bN3u1NWvWzOt1RESEOnTooClTpkiSvv/+e50+fVpdunS55LoChREBCxQxtWrVks1myxJW59uzZ4/at2+vqKgoff3111q9erUmTJgg6exgootxu90qUaKEVq9erXXr1nmmzZs3691335V0NuAvDHeTzddKZ9fnwraQkJAs7+vZs6cSExN16tQpffzxx+ratauCg4MvWjNQWBGwQBETGhqq22+/XRMmTMj2aPTo0aNatWqVzpw5o7feekstWrRQ7dq1deDAAa9+AQEByszM9Gpr3LixMjMzlZKSopo1a3pNTqdTklS3bl2tWLHC632rVq3yel2vXj0tWrTIq23JkiWqV6/eZdevffv2CgkJ0QcffKAff/xR3bt3v+x7gEKpQE9QA7giO3fuNE6n09SvX9989dVXZtu2beb333837777rqlbt65Zu3atkWTeeecds2PHDvPpp5+aa6+91kgyR44cMcYYs3jxYiPJ/Pzzz+avv/4yJ06cMMacvZ5atWpV8/XXX5udO3eaFStWmNGjR5sffvjBGPN/g5zeeusts23bNjNp0iQTFhZmypYt66lv1qxZxt/f33zwwQdm27ZtnkFO8+fP9/SRZGbNmpXt+r300ksmICDA1K1b15LtB+QHAhYoog4cOGCeeeYZU6VKFRMQEGCuvfZa06lTJ0+IJSQkmIiICBMUFGRuv/128+mnn3oFrDHGPPXUUyYsLMxIMkOHDjXGnB1YNGTIEFO1alXj7+9vnE6n6dy5s1m/fr3nfZMnTzbXXnutCQoKMnfffbcZMWKEcTqdXvVNnDjRVK9e3fj7+5vatWubTz/91Gv+pQJ2x44dRpIZO3ZsrrcTUFBsxmRz8QQAfPDEE09oy5Yt+vXXX/NkeYsXL1abNm20b98+hYeH58kygfzGk5wA+OzNN99UbGysQkJC9OOPP+qTTz7RxIkTc73ctLQ07d27V6+++qruu+8+whVFGoOcAPhsxYoVio2NVYMGDTRp0iS999576tmzZ66XO336dNWpU0cul0tjx47Ng0qBgsMpYgAALMARLAAAFiBgAQCwAAELAIAFCFgAACxAwAIAYAECFgAACxCwAABYgIAFAMAC/w9P8nOVRFAfXAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "counts = {category: 0 for category in new_categories}\n", + "\n", + "for category in new_categories:\n", + " category_path = os.path.join(output_dir, category)\n", + " counts[category] = len(os.listdir(category_path))\n", + "\n", + "plt.figure(figsize=(5, 6))\n", + "bars = plt.bar(counts.keys(), counts.values(), color=['blue', 'red'])\n", + "plt.xlabel('Category')\n", + "plt.ylabel('Number of Images')\n", + "plt.title('Number of Images in Each Category')\n", + "\n", + "for bar in bars:\n", + " yval = bar.get_height()\n", + " plt.text(bar.get_x() + bar.get_width()/2, yval + 5, int(yval), ha='center', va='bottom')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "835bcd36", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {