{"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":"import ast\nimport sys\nimport pydicom\nfrom pydicom import dcmread\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport hashlib\nimport os\nfrom io import BytesIO\nfrom PIL import Image, ImageFont, ImageDraw\nimport cv2\nimport warnings\nwarnings.filterwarnings('ignore')\n%matplotlib inline\n\nfrom sklearn import model_selection\nfrom tqdm.auto import tqdm\nimport shutil","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('../input/updated-csv/combined_train_data.csv')\ndf = df.dropna()\ndf = df.reset_index(drop=True)\ndf.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train, df_valid = model_selection.train_test_split(\n    df,\n    test_size=0.1,\n    random_state=42,\n    shuffle=True\n)\ndf_train = df_train.reset_index(drop=True)\ndf_valid = df_valid.reset_index(drop=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"os.makedirs(f'/kaggle/tmp/siim_640x640_yolo/images/', exist_ok=True)\nos.makedirs(f'/kaggle/tmp/siim_640x640_yolo/labels/', exist_ok=True)\n\nos.makedirs(f'/kaggle/tmp/siim_640x640_yolo/images/train/', exist_ok=True)\nos.makedirs(f'/kaggle/tmp/siim_640x640_yolo/images/validation/', exist_ok=True)\nos.makedirs(f'/kaggle/tmp/siim_640x640_yolo/labels/train/', exist_ok=True)\nos.makedirs(f'/kaggle/tmp/siim_640x640_yolo/labels/validation/', exist_ok=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def process_data(data, data_type='train'):\n    for _, row in tqdm(data.iterrows(), total=len(data)):\n        image_name = row['id'].replace('_image','')        \n        label = row['label'].split()\n        length = row['No_of_findings']\n        H = float(row['width'])\n        W = float(row['height'])\n                \n        yolo_data = []\n        j = 0\n        for i in range(length):\n            x_min = float(label[j+2])\n            y_min = float(label[j+3])            \n            x_max = float(label[j+4])           \n            y_max = float(label[j+5])\n            \n            w = x_max - x_min\n            h = y_max - y_min\n            \n            x_center = x_min + w / 2\n            y_center = y_min + h / 2\n            \n            x_center /= W           \n            y_center /= H\n            w /= W\n            h /= H            \n            yolo_data.append([0, x_center, y_center, w, h])\n            j += 6\n        yolo_data = np.array(yolo_data)\n        \n        np.savetxt(f'/kaggle/tmp/siim_640x640_yolo/labels/{data_type}/{image_name}.txt',\n                    yolo_data,\n                    fmt=[\"%d\", \"%f\", \"%f\", \"%f\", \"%f\"]\n                   )\n        \n        shutil.copyfile(\n            f'../input/siim-train-image/{image_name}.jpg',\n            f'/kaggle/tmp/siim_640x640_yolo/images/{data_type}/{image_name}.jpg'\n        )","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"process_data(df_train, data_type='train')\nprocess_data(df_valid, data_type='validation')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n!tar -zcf siim_640x640_yolo.tar.gz -C \"/kaggle/tmp/siim_640x640_yolo/\" .\n#!tar -zcf labels.tar.gz -C \"/kaggle/tmp/labels/\" .","metadata":{},"execution_count":null,"outputs":[]}]}