{"cells":[{"metadata":{},"cell_type":"markdown","source":"# horaira \n\nTools I used in Kaggle competitions. (APTOS 2019 Blindness Detection and State Farm Distracted Driver Detection)\n\nYou can find more on https://github.com/aielawady/horaira\n"},{"metadata":{},"cell_type":"markdown","source":"# Imports"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd\nimport matplotlib.pyplot as plt\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"!git clone https://github.com/aielawady/horaira.git","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import horaira.augmentors\nimport horaira.im_proc\nimport horaira.utils","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Removing .git dir because Kaggle gives error related to the depth of the dir.\n!rm -r horaira/.git/","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Configurations"},{"metadata":{"trusted":true},"cell_type":"code","source":"preprocessed_path = 'preprocess_images/'\ncompetition_base_path = '../input/aptos2019-blindness-detection/'\nimage_size = 300\nscale_value = 1\naspect_ratio = 1\ninput_aspect_ratio = 1\nNUM_CLASSES = 5","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Preparing the data"},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv(competition_base_path + 'train.csv')\ndf_test = pd.read_csv(competition_base_path + 'test.csv')\nx = df_train['id_code'].values\ny = df_train['diagnosis'].values\n\ntrain_x,train_y,valid_x,valid_y = horaira.utils.balanced_valid_set_splitter(x, y, valid_n_per_class = 100, debug=True)\nprint(train_x.shape)\nprint(train_y.shape)\nprint(valid_x.shape)\nprint(valid_y.shape)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Encoding and decoding"},{"metadata":{"trusted":true},"cell_type":"code","source":"encoding_decoding_methods = {\n    'train_encoding':'one',        # 'one', 'all_lower_ones' or 'pairs'\n    'valid_encoding': 'one',       # 'one', 'all_lower_ones' or 'pairs'\n    'decoding':'max'               # 'max' or 'highest_true'\n}\n\ntmp = np.arange(5)\nprint(\"\\nSample input 1:\")\nprint(tmp)\ntmp = horaira.utils.classes_encoder(tmp,5,method=encoding_decoding_methods['train_encoding'])\nprint(\"\\nEncoding using '{}' method:\".format(encoding_decoding_methods['train_encoding']))\nprint(tmp)\ntmp = horaira.utils.classes_decoder(tmp,method=encoding_decoding_methods['decoding'])\nprint(\"\\nDecoding using '{}' method:\".format(encoding_decoding_methods['decoding']))\nprint(tmp)\ntmp = horaira.utils.np.random.rand(6,5)\nprint(\"\\nSample input 2:\")\nprint(tmp)\ntmp = horaira.utils.classes_decoder(tmp,method=encoding_decoding_methods['decoding'])\nprint(\"\\nDecoding using '{}' method:\".format(encoding_decoding_methods['decoding']))\nprint(tmp)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Preprocessing Pipeliner"},{"metadata":{"trusted":true},"cell_type":"code","source":"circle_centering_params = {\n    'circle_detection_method':'moments',      # 'enclosing_circle', 'moments' or 'max_dim'\n    'scale_value' : scale_value,\n    'aspect_ratio' : aspect_ratio,\n    'width' : image_size, \n    'gray_threshold' : 10\n}\n\n\npreprocess_sequence_step = [horaira.im_proc.circle_centering, horaira.im_proc.veins_spots_highlighter]\npreprocess_params_step = [circle_centering_params, {}]\n\nlister = np.random.choice(df_train['id_code'],8)\n\nimgs_orig = horaira.utils.apply_preprocess(lister,src_path=competition_base_path+'train_images/', preprocessing_function={}, preprocessing_params={})\nimgs = horaira.utils.apply_preprocess(lister,src_path=competition_base_path+'train_images/', preprocessing_function=preprocess_sequence_step, preprocessing_params=preprocess_params_step)\nplt.figure(figsize=(20,20))\nfor i in range(len(imgs) * 2):\n    plt.subplot(4,4,i+1)\n    if i%2 == 0:\n        plt.imshow(imgs_orig[i//2].astype('uint8'))\n    else:\n        plt.imshow(imgs[i//2].astype('uint8'))\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Without the viens and spots highlighter."},{"metadata":{"trusted":true},"cell_type":"code","source":"preprocess_sequence_step = [horaira.im_proc.circle_centering]\npreprocess_params_step = [circle_centering_params]\n\nlister = np.random.choice(df_train['id_code'],8)\n\nimgs_orig = horaira.utils.apply_preprocess(lister,src_path=competition_base_path+'train_images/', preprocessing_function={}, preprocessing_params={})\nimgs = horaira.utils.apply_preprocess(lister,src_path=competition_base_path+'train_images/', preprocessing_function=preprocess_sequence_step, preprocessing_params=preprocess_params_step)\nplt.figure(figsize=(20,20))\nfor i in range(len(imgs) * 2):\n    plt.subplot(4,4,i+1)\n    if i%2 == 0:\n        plt.imshow(imgs_orig[i//2].astype('uint8'))\n    else:\n        plt.imshow(imgs[i//2].astype('uint8'))\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!mkdir -p $preprocessed_path/train\nhoraira.utils.apply_preprocess(df_train['id_code'][:100].values,src_path=competition_base_path+'train_images/', dst_path=preprocessed_path+'train/',\n                 preprocessing_function=preprocess_sequence_step, preprocessing_params=preprocess_params_step, write=True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Augmentor"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_x_aug, train_y_aug = horaira.augmentors.crop_augmentor(df_train['id_code'].values[:100], df_train['diagnosis'].values[:100], preprocessed_path, 10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(20,20))\nfor i in range(4):\n    plt.subplot(2,2,i+1)\n    plt.imshow(plt.imread(preprocessed_path+'train/'+train_x_aug[-i]+'.png'))","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":1}