{"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":"#####                                     यस्य कृत्यं न जानन्ति मन्त्रं वा मन्त्रितं परे।\n#####                                     कृतमेवास्य जानन्ति स वै पण्डित उच्यते ॥","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nimport polars as pl\nimport matplotlib.pyplot as plt\nfrom matplotlib.image import imread \nimport os\nimport random\nimport cv2\nfrom IPython.display import Image\nfrom IPython.display import IFrame\nimport torch\nimport math\nfrom skimage import io,img_as_float","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-08T07:53:46.973841Z","iopub.execute_input":"2023-11-08T07:53:46.974238Z","iopub.status.idle":"2023-11-08T07:53:46.981635Z","shell.execute_reply.started":"2023-11-08T07:53:46.974207Z","shell.execute_reply":"2023-11-08T07:53:46.980292Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"directory_path_train = '/kaggle/input/blood-vessel-segmentation/train'\ndef list_files_in_directory(directory_path = directory_path_train):\n    direc = []\n    for root, dirs, files in os.walk(directory_path):\n        for dire in dirs:\n            if dire in [\"labels\",\"images\"]:\n                continue \n            file_path = os.path.join(root, dire)\n            direc.append(file_path)\n            print(file_path)\n    return direc\n            \n\ntrain_folders = list_files_in_directory(directory_path_train)","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:53:47.642201Z","iopub.execute_input":"2023-11-08T07:53:47.642622Z","iopub.status.idle":"2023-11-08T07:54:00.167284Z","shell.execute_reply.started":"2023-11-08T07:53:47.642583Z","shell.execute_reply":"2023-11-08T07:54:00.165961Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_folders","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:54:41.825038Z","iopub.execute_input":"2023-11-08T07:54:41.826413Z","iopub.status.idle":"2023-11-08T07:54:41.840912Z","shell.execute_reply.started":"2023-11-08T07:54:41.826351Z","shell.execute_reply":"2023-11-08T07:54:41.839302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def count_total_img(folders = train_folders):\n    sub_f = [\"images\",\"labels\"] \n    path = []\n    total_files = []\n    random_dir = random.choice(folders)\n    for dire in folders:\n        for subf in sub_f:\n            if (dire == \"/kaggle/input/blood-vessel-segmentation/train/kidney_3_dense\") & (subf == \"images\"):\n                continue \n            \n            _dir = dire + \"/\" + subf\n            total_sample = len(os.listdir(_dir))\n            print(f\"{_dir}: {total_sample}\")\n            path.append(_dir)\n            total_files.append(total_sample)\n    obj = {\n        \"path\": path,\n        \"total_files\":total_files\n    }\n    return obj\n            \ntrain_file_dir = count_total_img()\n","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:54:43.134572Z","iopub.execute_input":"2023-11-08T07:54:43.135067Z","iopub.status.idle":"2023-11-08T07:54:43.159795Z","shell.execute_reply.started":"2023-11-08T07:54:43.135026Z","shell.execute_reply":"2023-11-08T07:54:43.158330Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Random slice and mask(any folder)","metadata":{}},{"cell_type":"code","source":"def display_random_img(folders = train_file_dir):\n    \"\"\"\n    will display random slice image from data and its corresponding mask\n    \"\"\"\n    _paths = list(zip(folders['path'], folders['total_files']))\n    _path_tup = random.choice(_paths)\n  \n    split_text = _path_tup[0].split(\"/\")\n\n    img_no = random.choice(range(_path_tup[1]))\n    img_no = f\"{img_no:04}\"\n    random_img_no = str(img_no)\n    _IMG_PATH =  _path_tup[0] + '/' + random_img_no +\".tif\" \n    IMG_PATH = _IMG_PATH.replace(\"labels\",\"images\")\n    LABEL_PATH = IMG_PATH.replace(\"images\",\"labels\")\n    \n    \n    if \"kidney_3_dense\" in split_text:\n        IMG_PATH = IMG_PATH\n        LABEL_PATH = IMG_PATH.replace(\"kidney_3_dense\",\"kidney_3_sparse\").replace(\"labels\",\"images\")\n        \n    \n    try:\n        print(IMG_PATH)\n        print(LABEL_PATH)\n        _slice = imread(IMG_PATH)\n        _mask = imread(LABEL_PATH)\n        \n        plt.figure(figsize=(10, 5))\n        plt.subplot(1, 2, 1)\n        plt.imshow(_slice)\n        plt.title(f'3D image slice: {img_no}')\n\n        plt.subplot(1, 2, 2)\n        plt.imshow(_mask)\n        plt.title(f'Mask: {img_no}')\n\n        plt.show()\n    except Exception as e:\n        \n        print(f\"An error occurred:{e}\")\n        \n    ","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:56:00.884413Z","iopub.execute_input":"2023-11-08T07:56:00.884822Z","iopub.status.idle":"2023-11-08T07:56:00.899709Z","shell.execute_reply.started":"2023-11-08T07:56:00.884785Z","shell.execute_reply":"2023-11-08T07:56:00.898857Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i in range(10):\n    display_random_img(train_file_dir)","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:56:01.904978Z","iopub.execute_input":"2023-11-08T07:56:01.905360Z","iopub.status.idle":"2023-11-08T07:56:10.279733Z","shell.execute_reply.started":"2023-11-08T07:56:01.905329Z","shell.execute_reply":"2023-11-08T07:56:10.278419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Iterable dataloader torch ","metadata":{}},{"cell_type":"code","source":"directory_path = \"/kaggle/input/blood-vessel-segmentation/train/kidney_1_dense\"\nclass IterableDataset(torch.utils.data.IterableDataset):\n    def __init__(self, directory_path):\n        \"\"\"\n        will stream image and label from <directory_path> \n        \n        \"\"\"\n        super(IterableDataset).__init__()\n        self.directory_path = directory_path\n        self.image_path = directory_path + \"/\" + \"images\"\n        self.label_path = directory_path + \"/\" + \"labels\"\n        self.total_images = len(os.listdir(self.label_path))\n        \n        ## temp\n        self.total_images  = 10\n        \n    \n        \n        \n\n    def __iter__(self):\n        for image_no in range(self.total_images):\n            # 0004 format\n            image_no = f\"{image_no:04}\"\n            IMG_PATH = self.image_path + \"/\" + str(image_no) + \".tif\"\n            LABEL_PATH = self.label_path + \"/\" + str(image_no) + \".tif\"\n            \n            ## image and label reading\n            image = io.imread(IMG_PATH).astype(np.float32)\n            image = torch.tensor(image)\n  \n            label = io.imread(LABEL_PATH).astype(np.float32)\n            label = torch.tensor(label)\n            \n            ## sending identity of image \n            _path_img = IMG_PATH.split(\"/\")\n            _path_img = f\"/{_path_img[-3]}/{_path_img[-2]}/{_path_img[-1]}\"\n            \n            _path_lab = LABEL_PATH.split(\"/\")\n            _path_lab = f\"/{_path_lab[-3]}/{_path_lab[-2]}/{_path_lab[-1]}\"\n                \n            \n            \n            \n            \n#             if self.transform is not None:\n#                 image = self.transform(image)\n            yield image, label, _path_img, _path_lab\n    \n    # img label pathofimg pathoflabel\n\n\n            \n            \n\n\n\nds = IterableDataset(directory_path)\n\n\ndataloader = torch.utils.data.DataLoader(ds, num_workers=1,batch_size=10)","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:56:16.072983Z","iopub.execute_input":"2023-11-08T07:56:16.073391Z","iopub.status.idle":"2023-11-08T07:56:16.094090Z","shell.execute_reply.started":"2023-11-08T07:56:16.073361Z","shell.execute_reply":"2023-11-08T07:56:16.092837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for batch in dataloader:\n    for i in range(10):\n        \n        images, labels,pi,pl = batch\n#         print(f\"{pi}\")\n     \n\n        plt.figure(figsize=(10, 4))\n        plt.subplot(1, 2, 1)\n        plt.imshow(images[i])\n        plt.title(f'3D  slice:   {pi[i]}')\n        print(\"\\n\\n\")\n\n        plt.subplot(1, 2, 2)\n        plt.imshow(labels[i])\n        plt.title(f'Mask:   {pl[i]}')\n\n        plt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-08T07:57:34.878040Z","iopub.execute_input":"2023-11-08T07:57:34.878980Z","iopub.status.idle":"2023-11-08T07:57:42.451333Z","shell.execute_reply.started":"2023-11-08T07:57:34.878929Z","shell.execute_reply":"2023-11-08T07:57:42.449699Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}