{"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":"markdown","source":"Just do centercrop","metadata":{}},{"cell_type":"code","source":"import os\n\ntrain_images_folder = '/kaggle/input/UBC-OCEAN/train_images'\ntrain_thumbnails_folder = '/kaggle/input/UBC-OCEAN/train_thumbnails'\n\nimages_files = set(os.listdir(train_images_folder))\nthumbnails_files = set(os.listdir(train_thumbnails_folder))\n\nimages_filenames = set([filename.split('.')[0] for filename in images_files])\n\nthumbnails_filenames = set([filename.split('_')[0] for filename in thumbnails_files])\n\nmissing_thumbnails = images_filenames - thumbnails_filenames\nmissing_thumbnails=[name+'.png' for name in missing_thumbnails]\n\nprint(\"TMA list:\")\nfor file_name in missing_thumbnails:\n    print(file_name)","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:43:16.502024Z","iopub.execute_input":"2023-10-24T05:43:16.502426Z","iopub.status.idle":"2023-10-24T05:43:16.725961Z","shell.execute_reply.started":"2023-10-24T05:43:16.502391Z","shell.execute_reply":"2023-10-24T05:43:16.724801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\ndf=pd.read_csv('/kaggle/input/UBC-OCEAN/train.csv')\nis_tma_df=df[df['is_tma']]\nis_tma_df","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:43:16.727927Z","iopub.execute_input":"2023-10-24T05:43:16.728219Z","iopub.status.idle":"2023-10-24T05:43:17.167277Z","shell.execute_reply.started":"2023-10-24T05:43:16.728193Z","shell.execute_reply":"2023-10-24T05:43:17.164194Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from PIL import Image\nImage.MAX_IMAGE_PIXELS = None\njpeg_quality=80\n\nsave_dir='/kaggle/working/images'\nif not os.path.exists(save_dir):\n    os.makedirs(save_dir)","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:52:41.387083Z","iopub.execute_input":"2023-10-24T05:52:41.387447Z","iopub.status.idle":"2023-10-24T05:52:41.393091Z","shell.execute_reply.started":"2023-10-24T05:52:41.387419Z","shell.execute_reply":"2023-10-24T05:52:41.392189Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from PIL import Image\n\ndef center_crop(tma_path,label,save_dir, target_size=2000):\n    wsi_name = tma_path.split('/')[-1].split('.')[0]\n\n    tma_image = Image.open(tma_path)\n    tma_width, tma_height = tma_image.size\n\n    if isinstance(target_size, int):\n        target_size = (target_size, target_size)\n\n    left = (tma_width - target_size[0]) // 2\n    upper = (tma_height - target_size[1]) // 2\n    right = left + target_size[0]\n    lower = upper + target_size[1]\n\n    # center crop\n    cropped_image = tma_image.crop((left, upper, right, lower))\n\n    cropped_image.save(os.path.join(save_dir, f'{wsi_name}_{label}_centercropped.jpg'))","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:52:41.556085Z","iopub.execute_input":"2023-10-24T05:52:41.557168Z","iopub.status.idle":"2023-10-24T05:52:41.565465Z","shell.execute_reply.started":"2023-10-24T05:52:41.557125Z","shell.execute_reply":"2023-10-24T05:52:41.563919Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Single WSI sample\n# wsi_path='/kaggle/input/UBC-OCEAN/train_images/91.png'\n# center_crop(wsi_path,'label',save_dir)\n\n# x=Image.open('/kaggle/working/images/91_label_centercropped.jpg')\n# x","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:52:41.772548Z","iopub.execute_input":"2023-10-24T05:52:41.77296Z","iopub.status.idle":"2023-10-24T05:52:41.777875Z","shell.execute_reply.started":"2023-10-24T05:52:41.772926Z","shell.execute_reply":"2023-10-24T05:52:41.776782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Now process all TMAs\nfor i,row in is_tma_df.iterrows():\n    print(i)\n    image_id=str(row['image_id'])\n    label=row['label']\n    TMA_path=os.path.join('/kaggle/input/UBC-OCEAN/train_images',image_id+'.png')\n    center_crop(TMA_path,label,save_dir)","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:52:43.225501Z","iopub.execute_input":"2023-10-24T05:52:43.225917Z","iopub.status.idle":"2023-10-24T05:52:55.495849Z","shell.execute_reply.started":"2023-10-24T05:52:43.225886Z","shell.execute_reply":"2023-10-24T05:52:55.49487Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# export all images into a zipped file\nimport tarfile\nimport gzip\nimport os\nimport shutil\n\ndef pack_images_to_tar_gz(input_folder, output_tar_gz):\n    with tarfile.open(output_tar_gz, 'w:gz') as tar_gz:\n        for root, dirs, files in os.walk(input_folder):\n            for file in files:\n                file_path = os.path.join(root, file)\n                arcname = os.path.relpath(file_path, input_folder)\n                tar_gz.add(file_path, arcname=arcname)\n\ninput_folder = save_dir\noutput_tar_gz =os.path.join('/kaggle/working/','cropped_tmas.tar.gz') \n\npack_images_to_tar_gz(input_folder, output_tar_gz)\n\nshutil.rmtree(input_folder)","metadata":{"execution":{"iopub.status.busy":"2023-10-24T05:51:55.251433Z","iopub.execute_input":"2023-10-24T05:51:55.252213Z","iopub.status.idle":"2023-10-24T05:51:56.105071Z","shell.execute_reply.started":"2023-10-24T05:51:55.252179Z","shell.execute_reply":"2023-10-24T05:51:56.103936Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}