{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":89850,"databundleVersionId":11256103,"isSourceIdPinned":false,"sourceType":"competition"}],"dockerImageVersionId":30918,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Plant Photo Gallery","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nimport random\nimport os\nimport cv2\nimport matplotlib.pyplot as plt\nimport requests","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T05:28:35.016500Z","iopub.execute_input":"2025-03-20T05:28:35.016968Z","iopub.status.idle":"2025-03-20T05:28:35.021980Z","shell.execute_reply.started":"2025-03-20T05:28:35.016925Z","shell.execute_reply":"2025-03-20T05:28:35.020742Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df=pd.read_csv('/kaggle/input/plantclef-2025/PlantCLEF2024_single_plant_training_metadata.csv',sep=';')\nprint(df.columns.tolist())\ndisplay(df[0:2].T)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T05:28:35.023340Z","iopub.execute_input":"2025-03-20T05:28:35.023744Z","iopub.status.idle":"2025-03-20T05:28:49.721819Z","shell.execute_reply.started":"2025-03-20T05:28:35.023718Z","shell.execute_reply":"2025-03-20T05:28:49.720996Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"cols=['species_id','species', 'image_backup_url']\ndf=df[cols]\ndf2=df[['species_id','species']].drop_duplicates()\nid2name = df2.set_index('species_id')['species'].to_dict()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T05:28:49.723465Z","iopub.execute_input":"2025-03-20T05:28:49.723712Z","iopub.status.idle":"2025-03-20T05:28:50.119571Z","shell.execute_reply.started":"2025-03-20T05:28:49.723690Z","shell.execute_reply":"2025-03-20T05:28:50.118758Z"},"_kg_hide-output":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def dataset2show16(df):\n\n    names0 = df['species_id'].value_counts()\n    valid_names = names0[names0 >= 4].index.tolist()\n    names = random.sample(valid_names,16)\n    \n    selected_images = []\n    grouped_images = {}  # Dictionary to store images grouped by name\n    for name in names:\n        paths = df[df['species_id'] == name]['image_backup_url'].tolist()\n        paths2 = random.sample(paths, 4)  # Select 4 random images per individual\n        grouped_images[name] = [p for p in paths2]\n    \n    fig, axes = plt.subplots(16, 4, figsize=(10, 40))\n    \n    for row, (nameid, images) in enumerate(grouped_images.items()):\n        # Set row title\n        #axes[row, 0].set_title(str(nameid)+' '+id2name[nameid], fontsize=12, loc='left', pad=10)\n        axes[row, 0].annotate(id2name[nameid], xy=(0, 1), xycoords=\"axes fraction\",fontsize=12, ha=\"left\", va=\"bottom\")\n        \n        for col, img_url in enumerate(images):\n            response = requests.get(img_url)\n            img_array = np.asarray(bytearray(response.content), dtype=np.uint8)\n            img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)\n            if img is not None:\n                img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # Convert BGR to RGB for correct colors\n                axes[row, col].imshow(img)\n            axes[row, col].axis(\"off\")\n    \n    #plt.tight_layout()\n    plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T05:28:50.120590Z","iopub.execute_input":"2025-03-20T05:28:50.120832Z","iopub.status.idle":"2025-03-20T05:28:50.128895Z","shell.execute_reply.started":"2025-03-20T05:28:50.120811Z","shell.execute_reply":"2025-03-20T05:28:50.128077Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"dataset2show16(df)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-03-20T05:28:50.129992Z","iopub.execute_input":"2025-03-20T05:28:50.130296Z","iopub.status.idle":"2025-03-20T05:30:35.313440Z","shell.execute_reply.started":"2025-03-20T05:28:50.130273Z","shell.execute_reply":"2025-03-20T05:30:35.311652Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}