{"cells":[{"metadata":{},"cell_type":"markdown","source":"## Humpback whale- bounding boxes\n\nThis kernel calculates the co-ordinates of the bounding boxes for train dataset and test dataset. \nThe results are stored in bounding_box.csv.\n\nThis kernel extends @suicaokhoailang 's [this](https://www.kaggle.com/suicaokhoailang/generating-whale-bounding-boxes) kernel by adding utility to visualize the calculated bounding box. "},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nimport os\nprint(os.listdir(\"../input\"))\n\nfrom scipy.ndimage import affine_transform\nfrom PIL import Image as pil_image\nfrom PIL import ImageDraw as pil_draw\n\nfrom keras.models import load_model\nfrom keras.preprocessing.image import img_to_array, array_to_img\nimport keras.backend as K\n\nfrom tqdm import tqdm\nimport matplotlib.pyplot as plt\n# Any results you write to the current directory are saved as output.","execution_count":50,"outputs":[{"output_type":"stream","text":"['humpback-bb-martinpiotte', 'humpback-whale-identification']\n","name":"stdout"}]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"TRAIN_PATH = \"../input/humpback-whale-identification/train\"\nTEST_PATH = \"../input/humpback-whale-identification/test\"\nMODEL_PATH = \"../input/humpback-bb-martinpiotte/cropping.model\"","execution_count":7,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5ffe8e4692231a93479df468c8775df01c0ce3f4"},"cell_type":"code","source":"# load the pretrained model\nmodel = load_model(MODEL_PATH)","execution_count":8,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a119309d5f280501ea1540bace64d348c9ef953c"},"cell_type":"code","source":"train_paths = [img for img in os.listdir(TRAIN_PATH)]\ntest_paths = [img for img in os.listdir(TEST_PATH)]","execution_count":9,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c11520517fb4100590cde270fe81360b1bb69223"},"cell_type":"code","source":"# define useful constants\nimg_shape = (128,128,1)\nanisotropy = 2.15\n\ndef center_transform(affine, input_shape):\n    hi, wi = float(input_shape[0]), float(input_shape[1])\n    ho, wo = float(img_shape[0]), float(img_shape[1])\n    top, left, bottom, right = 0, 0, hi, wi\n    if wi/hi/anisotropy < wo/ho: # input image too narrow, extend width\n        w     = hi*wo/ho*anisotropy\n        left  = (wi-w)/2\n        right = left + w\n    else: # input image too wide, extend height\n        h      = wi*ho/wo/anisotropy\n        top    = (hi-h)/2\n        bottom = top + h\n    center_matrix   = np.array([[1, 0, -ho/2], [0, 1, -wo/2], [0, 0, 1]])\n    scale_matrix    = np.array([[(bottom - top)/ho, 0, 0], [0, (right - left)/wo, 0], [0, 0, 1]])\n    decenter_matrix = np.array([[1, 0, hi/2], [0, 1, wi/2], [0, 0, 1]])\n    return np.dot(np.dot(decenter_matrix, scale_matrix), np.dot(affine, center_matrix))\n\ndef transform_img(x, affine):\n    matrix   = affine[:2,:2]\n    offset   = affine[:2,2]\n    x        = np.moveaxis(x, -1, 0)\n    channels = [affine_transform(channel, matrix, offset, output_shape=img_shape[:-1], order=1,\n                                 mode='constant', cval=np.average(channel)) for channel in x]\n    return np.moveaxis(np.stack(channels, axis=0), 0, -1)\n\ndef read_raw_image(p):\n    return pil_image.open(p)\n\ndef read_for_validation(x):\n    t  = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n    t  = center_transform(t, x.shape)\n    x  = transform_img(x, t)\n    x -= np.mean(x, keepdims=True)\n    x /= np.std(x, keepdims=True) + K.epsilon()\n    return x, t\n\ndef coord_transform(list, trans):\n    result = []\n    for x,y in list:\n        y,x,_ = trans.dot([y,x,1]).astype(np.int)\n        result.append((x,y))\n    return result\n\ndef read_array(p):\n    img = read_raw_image(p).convert('L')\n    return img_to_array(img)\n\ndef make_bbox(p):\n    raw = read_array(p)\n    width, height = raw.shape[1], raw.shape[0]\n    img,trans         = read_for_validation(raw)\n    a                 = np.expand_dims(img, axis=0)\n    x0, y0, x1, y1    = model.predict(a).squeeze()\n    (u0, v0),(u1, v1) = coord_transform([(x0,y0),(x1,y1)], trans)\n    bbox = [max(u0,0), max(v0,0), min(u1,width), min(v1,height)]\n    if bbox[0] >= bbox[2] or bbox[1] >= bbox[3]:\n        bbox = [0,0,width,height]\n    return bbox\n\ndef transform_coordinate(coords, trans):\n    result = []\n    for x,y in coords:\n        y,x,_ = trans.dot([y,x,1]).astype(np.int)\n        result.append((x,y))\n    return result","execution_count":20,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e301f7a539b01122bcc21f93c415bc759c3d8d0e"},"cell_type":"code","source":"bbox_df = pd.DataFrame(columns=['Image','x0','y0','x1','y1']).set_index('Image')","execution_count":11,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"91e3e970ca666d8f36619a2b9aad8c2901428d0f"},"cell_type":"code","source":"for img in tqdm(train_paths):\n    bbox_df.loc[img] = make_bbox(TRAIN_PATH+\"/\"+img)\n              \nfor img in tqdm(test_paths):\n    bbox_df.loc[img] = make_bbox(TEST_PATH+\"/\"+img)","execution_count":12,"outputs":[{"output_type":"stream","text":"100%|██████████| 25361/25361 [08:47<00:00, 48.12it/s]\n100%|██████████| 7960/7960 [03:20<00:00, 39.67it/s]\n","name":"stderr"}]},{"metadata":{"trusted":true,"_uuid":"4f22eb8d15707c3208cb093a97f942c277e95b93"},"cell_type":"code","source":"bbox_df.to_csv(path_or_buf='bounding_box.csv')","execution_count":13,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4ac3f0685b638e135a2ded7697301479ce72c046"},"cell_type":"code","source":"from numpy.linalg import inv as mat_inv\n\n# Type any image name here \nimg_name = \"32318c344.jpg\"\nimg = pil_image.open(TRAIN_PATH+\"/\"+img_name)\n\nprint(img.size)\n\nx0,y0,x1,y1 = bbox_df.loc[img_name]\nprint(\"Original BB Coordinates\",x0,y0,x1,y1)\n\nimgArr,trans = read_for_validation(read_array(TRAIN_PATH+\"/\"+img_name))\n(xt0,yt0),(xt1,yt1) = transform_coordinate([(x0,y0),(x1,y1)],mat_inv(trans))\nprint(\"New BB Coordinates\",xt0,yt0,xt1,yt1)\n\nimgNew = array_to_img(imgArr)\nimgNew = imgNew.convert('RGB')\n\n\nimgDraw = pil_draw.Draw(imgNew)\nimgDraw.rectangle([(xt0,yt0),(xt1,yt1)],outline='red')\n\nplt.imshow(imgNew)","execution_count":52,"outputs":[{"output_type":"stream","text":"(1800, 700)\nOriginal Coordinates 19 95 1745 517\nNew Coordinates 1 25 124 89\n","name":"stdout"},{"output_type":"execute_result","execution_count":52,"data":{"text/plain":"<matplotlib.image.AxesImage at 0x7ff2c2a9b710>"},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{}}]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}