{"cells":[{"metadata":{},"cell_type":"markdown","source":"# HuBMAP anatomical structure (.zarr)\n\n> Convert anatomical structure segmentations from json to masks (.zarr files)"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# Install zarr and load packages\n!pip install -qq zarr\nimport cv2, zarr, json, gc\nimport matplotlib.pyplot as plt, numpy as np, pandas as pd\nfrom pathlib import Path\ngc.enable()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Settings"},{"metadata":{"trusted":true},"cell_type":"code","source":"path = Path('/kaggle/input/hubmap-kidney-segmentation')\ndf_train = pd.read_csv(path/\"train.csv\")\ndf_info = pd.read_csv(path/\"HuBMAP-20-dataset_information.csv\")\ng_out = zarr.group(f'/kaggle/working/anatomy')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Conversion"},{"metadata":{"trusted":true},"cell_type":"code","source":"for _, row in df_info.iterrows():\n    \n    print(row)\n    idx = Path(row.image_file).stem\n    split = 'train' if idx in df_train['id'].values else 'test'\n    \n    # Open json\n    with open(path/split/row.anatomical_structures_segmention_file) as json_file:\n        data = json.load(json_file)  \n\n    # Empty mask\n    umat = cv2.UMat(np.zeros((row.height_pixels, row.width_pixels), dtype=np.int32))\n        \n    # Fill array\n    for poly in data:\n        coords = poly['geometry']['coordinates']\n        value = 1 if poly['properties']['classification']['name']=='Cortex' else 2\n        coords_cand = [coords] if len(coords)==1 else coords\n        for coord in coords_cand:\n            coords2 = cv2.UMat(np.array([[int(a),int(b)] for a,b in coord[0]]))\n            umat = cv2.fillConvexPoly(umat, coords2, value)\n\n    # Workaround RAM overflow\n    g_out[idx] = umat.get()\n    del umat\n    gc.collect()\n    g_out[idx] = g_out[idx][:].astype('uint8')\n    #print(g_out[idx].info)\n    \n    plt.imshow(cv2.resize(g_out[idx][:], dsize=(512, 512)))\n    plt.show()","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}