{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# LOAD LIBRARIES\nimport numpy as np, pandas as pd, os\nimport matplotlib.pyplot as plt, cv2\nimport tensorflow as tf, re, math\nimport glob","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"# If you want to make full dataset, set TEST = 0.\n# Full dataset exceeds Kaggle notebook capacity.\n# So you should use local environment.\nTEST = 1","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"IMG_DIR = '../input/rsna-str-pe-detection-jpeg-256/train-jpegs'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/rsna-str-pulmonary-embolism-detection/train.csv')\ndf_test = pd.read_csv('../input/rsna-str-pulmonary-embolism-detection/test.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_test.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def _bytes_feature(value):\n  \"\"\"Returns a bytes_list from a string / byte.\"\"\"\n  if isinstance(value, type(tf.constant(0))):\n    value = value.numpy() # BytesList won't unpack a string from an EagerTensor.\n  return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))\n\ndef _float_feature(value):\n  \"\"\"Returns a float_list from a float / double.\"\"\"\n  return tf.train.Feature(float_list=tf.train.FloatList(value=[value]))\n\ndef _int64_feature(value):\n  \"\"\"Returns an int64_list from a bool / enum / int / uint.\"\"\"\n  return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def serialize_example(feature0, feature1, feature2, feature3, feature4, feature5, feature6, feature7, feature8, feature9, feature10, feature11, feature12):\n  feature = {\n      'image': _bytes_feature(feature0),\n      'StudyInstanceUID': _bytes_feature(feature1),\n      'SeriesInstanceUID':  _bytes_feature(feature2),\n      'SOPInstanceUID': _bytes_feature(feature3),\n      'negative_exam_for_pe':_float_feature(feature4),\n      'rv_lv_ratio_gte_1':_float_feature(feature5),\n      'rv_lv_ratio_lt_1':_float_feature(feature6),\n      'leftsided_pe':_float_feature(feature7),\n      'chronic_pe':_float_feature(feature8),\n      'rightsided_pe':_float_feature(feature9),\n      'acute_and_chronic_pe':_float_feature(feature10),\n      'central_pe':_float_feature(feature11),\n      'indeterminate':_float_feature(feature12),\n  }\n  example_proto = tf.train.Example(features=tf.train.Features(feature=feature))\n  return example_proto.SerializeToString()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"IMGS  =  glob.glob(IMG_DIR+os.sep+\"/*\")\n\nstID = df['StudyInstanceUID'].unique()\np_end=0\np_start= 0\nstart = 29\nend = 29\nflg = False\nfor p in range(251):\n    if p==5 and TEST:\n        break\n    start=p*29\n    end = (p+1)*29\n    print(start,\"to\",end)\n    length = 0\n    for i in range(start, end, 1):\n        pat = df.query('StudyInstanceUID == \"{}\"'.format(stID[i]))\n        length += len(pat)\n        \n    with tf.io.TFRecordWriter('train-{}-{}.tfrec'.format(p,length)) as writer:\n        for i in range(start, end, 1):\n            pat = df.query('StudyInstanceUID == \"{}\"'.format(stID[i]))\n            p_end += len(pat)\n            #print((stID[i]),p_start,p_end)\n            for j in range(p_start,p_end):\n                path = glob.glob(f'{IMG_DIR}/{df[\"StudyInstanceUID\"][j]}/{df[\"SeriesInstanceUID\"][j]}/*_{df[\"SOPInstanceUID\"][j]}.jpg')\n                img = cv2.imread(path[0])\n                img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Fix incorrect colors\n                if flg==False:\n                    plt.imshow(img/255)\n                    plt.show()\n                    flg=True\n                img = cv2.imencode('.jpg', img, (cv2.IMWRITE_JPEG_QUALITY, 94))[1].tostring()\n                \n                example = serialize_example(\n                    img,\n                    str.encode(df['StudyInstanceUID'][j]),\n                    str.encode(df['SeriesInstanceUID'][j]),\n                    str.encode(df['SOPInstanceUID'][j]),\n                    df['negative_exam_for_pe'][j],\n                    df['rv_lv_ratio_gte_1'][j],\n                    df['rv_lv_ratio_lt_1'][j],\n                    df['leftsided_pe'][j],\n                    df['chronic_pe'][j],\n                    df['rightsided_pe'][j],\n                    df['acute_and_chronic_pe'][j],\n                    df['central_pe'][j],\n                    df['indeterminate'][j],\n                )\n                writer.write(example)\n            p_start=p_end\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# All outputs are assembled in \"../input/rsnav4\".\n# You can use this dataset.","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}