{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.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":39272,"databundleVersionId":4629629,"sourceType":"competition"},{"sourceId":4933020,"sourceType":"datasetVersion","datasetId":2853549}],"dockerImageVersionId":30369,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Preprocess csv file & create folder and copy files","metadata":{}},{"cell_type":"markdown","source":"### Load csv file","metadata":{}},{"cell_type":"code","source":"import pandas as pd\ncsv_path = '/kaggle/input/rsna-process-dataset-jitshil/process_dataset_final.csv'\ndf = pd.read_csv(csv_path)\ndf.head()","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:03:24.935826Z","iopub.execute_input":"2024-02-14T17:03:24.936315Z","iopub.status.idle":"2024-02-14T17:03:24.978832Z","shell.execute_reply.started":"2024-02-14T17:03:24.936265Z","shell.execute_reply":"2024-02-14T17:03:24.977489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Create patient_L/R folders and copy dicom files between two folders respectively L and R letarelity","metadata":{}},{"cell_type":"code","source":"from tqdm import tqdm\nimport os\nfrom random import randint\n\nimport numpy as np\nimport pandas as pd\n\nimport nibabel as nib\nimport pydicom as pdm\nimport nilearn as nl\nimport nilearn.plotting as nlplt\nimport nrrd\nimport h5py\n\nimport matplotlib.pyplot as plt\nfrom matplotlib import cm\nimport matplotlib.animation as anim\n\nimport imageio\nfrom skimage.transform import resize\nfrom skimage.util import montage\n\nfrom IPython.display import Image as show_gif\n\nimport warnings\nwarnings.simplefilter(\"ignore\")","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:03:25.887768Z","iopub.execute_input":"2024-02-14T17:03:25.888235Z","iopub.status.idle":"2024-02-14T17:03:27.936035Z","shell.execute_reply.started":"2024-02-14T17:03:25.888195Z","shell.execute_reply":"2024-02-14T17:03:27.934031Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport shutil\n\nsource_main_path = '/kaggle/input/rsna-breast-cancer-detection/train_images/'\noutput_train_folder = '/kaggle/working/train_imgs/'\nif os.path.exists(output_train_folder) == False:\n    os.mkdir(output_train_folder)\n\n\nfor dfvalue in  df.values:\n    folder_name = str(dfvalue[2])+'_'+ str(dfvalue[4])\n    #print(folder_name)\n    output_folder = '/kaggle/working/train_imgs/'+folder_name\n    if os.path.exists(output_folder) == False:\n        os.mkdir(output_folder)\n    src = source_main_path+str(dfvalue[2])+\"/\"+str(dfvalue[3])+'.dcm'\n    dst = output_folder+'/'+str(dfvalue[2])+'.dcm'\n    shutil.copyfile(src, dst)\n    \n ","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:03:31.050305Z","iopub.execute_input":"2024-02-14T17:03:31.050744Z","iopub.status.idle":"2024-02-14T17:06:31.997027Z","shell.execute_reply.started":"2024-02-14T17:03:31.050709Z","shell.execute_reply":"2024-02-14T17:06:31.994847Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(os.listdir('/kaggle/working/train_imgs'))","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:23:25.83472Z","iopub.execute_input":"2024-02-14T17:23:25.835647Z","iopub.status.idle":"2024-02-14T17:23:25.855109Z","shell.execute_reply.started":"2024-02-14T17:23:25.835576Z","shell.execute_reply":"2024-02-14T17:23:25.853336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(os.listdir('/kaggle/working/train_imgs'))","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:23:40.622925Z","iopub.execute_input":"2024-02-14T17:23:40.62421Z","iopub.status.idle":"2024-02-14T17:23:40.635894Z","shell.execute_reply.started":"2024-02-14T17:23:40.624149Z","shell.execute_reply":"2024-02-14T17:23:40.634603Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# dicom image to nifti image conversion","metadata":{}},{"cell_type":"markdown","source":"### Import libs","metadata":{}},{"cell_type":"code","source":"import os\nimport nibabel as nib\nimport SimpleITK as sitk","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:23:43.456707Z","iopub.execute_input":"2024-02-14T17:23:43.457831Z","iopub.status.idle":"2024-02-14T17:23:43.464693Z","shell.execute_reply.started":"2024-02-14T17:23:43.457778Z","shell.execute_reply":"2024-02-14T17:23:43.463341Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Conversion function from dicom 2 nii and save nii images","metadata":{}},{"cell_type":"code","source":"output_nii_folder = '/kaggle/working/nii_img/'\nif os.path.exists(output_nii_folder) == False:\n    os.mkdir(output_nii_folder)\n\ndef dicom2nifti(main_dir, image_dir, save=True):\n    \"given a dicom directory, loads them into single file and can save it as .nii file\"\n    reader = sitk.ImageSeriesReader()\n    reader.LoadPrivateTagsOn()\n    file_dir = main_dir+image_dir\n    filenamesDICOM = reader.GetGDCMSeriesFileNames(str(file_dir))\n    reader.SetFileNames(filenamesDICOM)\n    img = reader.Execute()\n    img = sitk.Cast(img, sitk.sitkFloat32)\n\n    if save:\n        sitk.WriteImage(img, output_nii_folder+image_dir+'.nii.gz')\n    else:\n        return img\n","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:23:52.123528Z","iopub.execute_input":"2024-02-14T17:23:52.123952Z","iopub.status.idle":"2024-02-14T17:23:52.136515Z","shell.execute_reply.started":"2024-02-14T17:23:52.12392Z","shell.execute_reply":"2024-02-14T17:23:52.135196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"main_input_dir = '/kaggle/working/train_imgs/'\n\nfor img_folder in os.listdir(main_input_dir):\n    dicom2nifti(main_input_dir, img_folder)","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:23:54.717939Z","iopub.execute_input":"2024-02-14T17:23:54.718896Z","iopub.status.idle":"2024-02-14T17:30:21.117249Z","shell.execute_reply.started":"2024-02-14T17:23:54.718843Z","shell.execute_reply":"2024-02-14T17:30:21.11514Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(os.listdir(output_nii_folder))","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:30:29.53064Z","iopub.execute_input":"2024-02-14T17:30:29.531071Z","iopub.status.idle":"2024-02-14T17:30:29.540074Z","shell.execute_reply.started":"2024-02-14T17:30:29.531037Z","shell.execute_reply":"2024-02-14T17:30:29.538745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!zip -r file.zip /kaggle/working","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:30:34.211381Z","iopub.execute_input":"2024-02-14T17:30:34.211868Z","iopub.status.idle":"2024-02-14T17:37:07.654142Z","shell.execute_reply.started":"2024-02-14T17:30:34.21183Z","shell.execute_reply":"2024-02-14T17:37:07.652679Z"},"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:43:47.257919Z","iopub.execute_input":"2024-02-14T17:43:47.258497Z","iopub.status.idle":"2024-02-14T17:43:48.384325Z","shell.execute_reply.started":"2024-02-14T17:43:47.258453Z","shell.execute_reply":"2024-02-14T17:43:48.381683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"output_nii_folder","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:43:50.856752Z","iopub.execute_input":"2024-02-14T17:43:50.858069Z","iopub.status.idle":"2024-02-14T17:43:50.867853Z","shell.execute_reply.started":"2024-02-14T17:43:50.858015Z","shell.execute_reply":"2024-02-14T17:43:50.866353Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from IPython.display import FileLink\nFileLink(r'file.zip')","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:43:53.145228Z","iopub.execute_input":"2024-02-14T17:43:53.145734Z","iopub.status.idle":"2024-02-14T17:43:53.155153Z","shell.execute_reply.started":"2024-02-14T17:43:53.145694Z","shell.execute_reply":"2024-02-14T17:43:53.153706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import zipfile\nimport os\nfrom IPython.display import FileLink\n\ndef zip_dir(directory = os.curdir, file_name = 'directory.zip'):\n    \"\"\"\n    zip all the files in a directory\n    \n    Parameters\n    _____\n    directory: str\n        directory needs to be zipped, defualt is current working directory\n        \n    file_name: str\n        the name of the zipped file (including .zip), default is 'directory.zip'\n        \n    Returns\n    _____\n    Creates a hyperlink, which can be used to download the zip file)\n    \"\"\"\n    os.chdir(directory)\n    zip_ref = zipfile.ZipFile(file_name, mode='w')\n    for folder, _, files in os.walk(directory):\n        for file in files:\n            if file_name in file:\n                pass\n            else:\n                zip_ref.write(os.path.join(folder, file))\n\n    return FileLink(file_name)","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:43:55.393255Z","iopub.execute_input":"2024-02-14T17:43:55.394301Z","iopub.status.idle":"2024-02-14T17:43:55.405483Z","shell.execute_reply.started":"2024-02-14T17:43:55.394224Z","shell.execute_reply":"2024-02-14T17:43:55.403863Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"zip_dir()","metadata":{"execution":{"iopub.status.busy":"2024-02-14T17:43:58.143976Z","iopub.execute_input":"2024-02-14T17:43:58.144434Z","iopub.status.idle":"2024-02-14T17:44:28.83951Z","shell.execute_reply.started":"2024-02-14T17:43:58.144396Z","shell.execute_reply":"2024-02-14T17:44:28.837413Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sudo truncate -s 0 /var/log/celery/*log\nsudo truncate -s 0 /var/www/html/app/stderr.log","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}