{"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 numpy as np\nimport pandas as pd\nimport cv2\nfrom tqdm import tqdm\ntqdm.pandas()\nimport matplotlib.pyplot as plt\nfrom mpl_toolkits.axes_grid1 import ImageGrid","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_image(image_id):\n    image = cv2.imread(image_id)\n    return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n\n# train_images = train_data[\"image_id\"].sample(100, random_state=2020).progress_apply(load_image)","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def init_grabcut_mask(h, w):\n    mask = np.ones((h, w), np.uint8) * cv2.GC_PR_BGD\n    mask[h//4:3*h//4, w//4:3*w//4] = cv2.GC_PR_FGD\n    mask[2*h//5:3*h//5, 2*w//5:3*w//5] = cv2.GC_FGD\n    return mask\n\n# plt.imshow(init_grabcut_mask(3*136, 3*205))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def add_contours(image, mask):\n    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)\n    \n    if len(contours) != 0:\n        cv2.drawContours(image, contours, -1, (255, 0, 0), 3)\n        c = max(contours, key = cv2.contourArea)\n        x,y,w,h = cv2.boundingRect(c)\n        cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0) ,2)\n    \n\n\ndef remove_background(image):\n    h, w = image.shape[:2]\n    mask = init_grabcut_mask(h, w)\n    bgm = np.zeros((1, 65), np.float64)\n    fgm = np.zeros((1, 65), np.float64)\n    cv2.grabCut(image, mask, None, bgm, fgm, 1, cv2.GC_INIT_WITH_MASK)\n    mask_binary = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')\n#     result = cv2.bitwise_and(image, image, mask = mask_binary)\n#     add_contours(result, mask_binary) # optional, adds visualizations\n    return mask_binary\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n  \nimport os\ntrain = os.listdir(\"../input/plant-pathology-2021-fgvc8/train_images\")[:10000]\nfor i in train:\n    im = load_image(\"../input/plant-pathology-2021-fgvc8/train_images/\"+i)\n    im = cv2.resize(im, (150, 100))\n    im = remove_background(im)\n    cv2.imwrite(i,im)\n    ","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!mkdir masks\n!mv * masks","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!apt install zip\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!zip -r masks.zip masks \n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!rm masks -r","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}