{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# prepare 256x256 separated images.\n# procesed dataset is available; https://www.kaggle.com/datasets/bobfromjapan/sorghum-partitioned-4x4/settings\nimport pandas as pd\nimport os\nimport cv2\nimport numpy as np\nfrom tqdm import tqdm\n# proj_dir = \"/home/bob/dev/sorghum/\"\nproj_dir = \"/kaggle/input/sorghum-id-fgvc-9/\"\n\nimage_size = [1024, 1024]\n\ndf = pd.read_csv(proj_dir + \"train_cultivar_mapping.csv\")\n#%%\nbase_path = proj_dir + \"train_images/\"\nOUTPUT_PATH =  \"/kaggle/working/train_images_256x256/\"\n\ndf[\"fullpath\"] = base_path + df[\"image\"] \n\nexists = []\n\nfor i in df[\"fullpath\"]:\n    if not os.path.exists(i):\n        exists.append(False)\n        print(i)\n    else:\n        exists.append(True)\n\n#%%\ndf[\"exist\"] = pd.Series(exists)\n#%%\ndf = df[df.exist]\nlen(df)\n#%%\ndef load_and_crop(path, n, img_size, label):\n    metadata = []\n    base_name = os.path.splitext(os.path.basename(path))[0]\n    x0 = int(img_size[0]/n)\n    y0 = int(img_size[1]/n)\n\n    image = np.array(cv2.imread(path))\n    image_cropped = [image[x0*x:x0*(x+1), y0*y:y0*(y+1)] for x in range(n) for y in range(n)]\n\n    for i, im in enumerate(image_cropped):\n        output_name = base_name + \"_\" + str(i) + \".jpg\"\n        saved_path = os.path.join(OUTPUT_PATH, output_name)\n#         print(saved_path)\n\n        ret = cv2.imwrite(saved_path, im,  [cv2.IMWRITE_JPEG_QUALITY, 100])\n        if ret == False:\n            print(\"failed imwrite!!\")\n        metadata.append((path, saved_path, label))\n\n    return pd.DataFrame(metadata, columns=[\"fullpath_org\", \"fullpath\", \"cultivar\"])\n\n#%%\noutput_df = pd.DataFrame()\nfor i in tqdm(range(len(df))):\n    output_df = pd.concat([output_df, load_and_crop(df[\"fullpath\"].iloc[i], 4, image_size, df[\"cultivar\"].iloc[i])])\n#%%\n# fullpath_org, fullpath, cultivar\noutput_df.to_csv(\"/kaggle/working/separated_train_cultivar_mapping.csv\")","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]}]}