{"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":"markdown","source":"# Whale/Dolphin Image Foreground Extraction\nhttps://www.kaggle.com/stpeteishii/whale-dolphin-image-foreground-extraction\n<div align=\"left\">\n<img src=\"https://img.shields.io/badge/Upvote-If%20you%20like%20my%20work-07b3c8?style=for-the-badge&logo=kaggle\" alt=\"upvote\">\n</div>","metadata":{"papermill":{"duration":0.042473,"end_time":"2022-02-19T06:31:50.868815","exception":false,"start_time":"2022-02-19T06:31:50.826342","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"# Loading data & forecasting","metadata":{"papermill":{"duration":0.024104,"end_time":"2022-02-19T06:31:50.965815","exception":false,"start_time":"2022-02-19T06:31:50.941711","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport cv2\nfrom tqdm import tqdm\nimport os\nfrom sklearn.cluster import KMeans","metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.execute_input":"2022-02-19T06:31:51.050187Z","iopub.status.busy":"2022-02-19T06:31:51.048750Z","iopub.status.idle":"2022-02-19T06:31:52.396374Z","shell.execute_reply":"2022-02-19T06:31:52.397541Z","shell.execute_reply.started":"2022-02-18T07:59:59.425983Z"},"papermill":{"duration":1.403084,"end_time":"2022-02-19T06:31:52.397886","exception":false,"start_time":"2022-02-19T06:31:50.994802","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TRAIN_DIR='/kaggle/input/jpeg-happywhale-128x128/train_images-128-128/train_images-128-128'\nTEST_DIR='/kaggle/input/jpeg-happywhale-128x128/test_images-128-128/test_images-128-128'","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:52.493619Z","iopub.status.busy":"2022-02-19T06:31:52.492826Z","iopub.status.idle":"2022-02-19T06:31:52.494340Z","shell.execute_reply":"2022-02-19T06:31:52.495842Z","shell.execute_reply.started":"2022-02-18T08:00:01.268886Z"},"papermill":{"duration":0.055918,"end_time":"2022-02-19T06:31:52.496024","exception":false,"start_time":"2022-02-19T06:31:52.440106","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/happy-whale-and-dolphin/train.csv')\ndf.head()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:52.580444Z","iopub.status.busy":"2022-02-19T06:31:52.579633Z","iopub.status.idle":"2022-02-19T06:31:52.731769Z","shell.execute_reply":"2022-02-19T06:31:52.732765Z","shell.execute_reply.started":"2022-02-18T08:00:01.27668Z"},"papermill":{"duration":0.198253,"end_time":"2022-02-19T06:31:52.732968","exception":false,"start_time":"2022-02-19T06:31:52.534715","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load(path, size=128):\n    img= cv2.resize(cv2.imread(path),(size,size))\n    return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n\ndef show():\n    f, ax = plt.subplots(3, 5, figsize=(40,20))\n    for i in tqdm(range(15)):\n        path= os.path.join(TRAIN_DIR, df.image[i])\n        img_id= df.individual_id[i]\n        ax[i//5][i%5].imshow(load(path, 300), aspect='auto')\n        ax[i//5][i%5].set_title(img_id)\n        ax[i//5][i%5].set_xticks([]); ax[i//5][i%5].set_yticks([])\n    plt.show()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:52.874722Z","iopub.status.busy":"2022-02-19T06:31:52.873877Z","iopub.status.idle":"2022-02-19T06:31:52.883903Z","shell.execute_reply":"2022-02-19T06:31:52.884586Z","shell.execute_reply.started":"2022-02-18T08:00:01.419957Z"},"papermill":{"duration":0.0945,"end_time":"2022-02-19T06:31:52.884788","exception":false,"start_time":"2022-02-19T06:31:52.790288","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:53.069954Z","iopub.status.busy":"2022-02-19T06:31:53.069225Z","iopub.status.idle":"2022-02-19T06:31:55.572425Z","shell.execute_reply":"2022-02-19T06:31:55.571544Z","shell.execute_reply.started":"2022-02-18T08:00:01.432004Z"},"papermill":{"duration":2.592177,"end_time":"2022-02-19T06:31:55.572554","exception":false,"start_time":"2022-02-19T06:31:52.980377","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Adaptive histogram equalization technique","metadata":{"papermill":{"duration":0.086111,"end_time":"2022-02-19T06:31:55.748077","exception":false,"start_time":"2022-02-19T06:31:55.661966","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def adaptive_hist(img, clipLimit= 4.0):\n    window= cv2.createCLAHE(clipLimit= clipLimit, tileGridSize=(8, 8))\n    img_lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)\n\n    ch1, ch2, ch3 = cv2.split(img_lab)\n    img_l = window.apply(ch1)\n    img_clahe = cv2.merge((img_l, ch2, ch3))\n    return cv2.cvtColor(img_clahe, cv2.COLOR_Lab2BGR)\n\n\ndef show_adhist(clipLimit=4.0):\n    f, ax = plt.subplots(3, 5, figsize=(40,20))\n    for i in tqdm(range(15)):\n        path= os.path.join(TRAIN_DIR, df.image[i])\n        img_id= df.individual_id[i]\n        img=load(path,128)\n        img= adaptive_hist(img, clipLimit)\n        ax[i//5][i%5].imshow(img, aspect='auto')\n        ax[i//5][i%5].set_title(img_id)\n        ax[i//5][i%5].set_xticks([]); ax[i//5][i%5].set_yticks([])\n    plt.show()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:55.945574Z","iopub.status.busy":"2022-02-19T06:31:55.944905Z","iopub.status.idle":"2022-02-19T06:31:55.948962Z","shell.execute_reply":"2022-02-19T06:31:55.948494Z","shell.execute_reply.started":"2022-02-18T08:00:04.083698Z"},"papermill":{"duration":0.114566,"end_time":"2022-02-19T06:31:55.949140","exception":false,"start_time":"2022-02-19T06:31:55.834574","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_adhist(2.0)","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:56.156940Z","iopub.status.busy":"2022-02-19T06:31:56.155811Z","iopub.status.idle":"2022-02-19T06:31:58.293606Z","shell.execute_reply":"2022-02-19T06:31:58.294129Z","shell.execute_reply.started":"2022-02-18T08:00:04.292267Z"},"papermill":{"duration":2.249366,"end_time":"2022-02-19T06:31:58.294291","exception":false,"start_time":"2022-02-19T06:31:56.044925","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Color Quantization using K-Means","metadata":{"papermill":{"duration":0.177334,"end_time":"2022-02-19T06:31:58.658710","exception":false,"start_time":"2022-02-19T06:31:58.481376","status":"completed"},"tags":[]}},{"cell_type":"code","source":"from sklearn.cluster import KMeans","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:59.003122Z","iopub.status.busy":"2022-02-19T06:31:59.002177Z","iopub.status.idle":"2022-02-19T06:31:59.003730Z","shell.execute_reply":"2022-02-19T06:31:59.004153Z","shell.execute_reply.started":"2022-02-18T08:00:06.880051Z"},"papermill":{"duration":0.177075,"end_time":"2022-02-19T06:31:59.004293","exception":false,"start_time":"2022-02-19T06:31:58.827218","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def k_means(img, n_colors= 4):\n    w, h, d = original_shape = tuple(img.shape)\n    img= img/255.0\n    image_array = np.reshape(img, (w * h, d))\n    kmeans = KMeans(n_clusters=n_colors, random_state=0).fit(image_array)\n    labels = kmeans.predict(image_array)\n    \n    \"\"\"Recreate the (compressed) image from the code book & labels\"\"\"\n    codebook= kmeans.cluster_centers_\n    d = codebook.shape[1]\n    image = np.zeros((w, h, d))\n    label_idx = 0\n    for i in range(w):\n        for j in range(h):\n            image[i][j] = codebook[labels[label_idx]]\n            label_idx += 1\n    return image","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:59.355372Z","iopub.status.busy":"2022-02-19T06:31:59.353675Z","iopub.status.idle":"2022-02-19T06:31:59.355924Z","shell.execute_reply":"2022-02-19T06:31:59.356357Z","shell.execute_reply.started":"2022-02-18T08:00:06.888379Z"},"papermill":{"duration":0.185467,"end_time":"2022-02-19T06:31:59.356501","exception":false,"start_time":"2022-02-19T06:31:59.171034","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def show_kmean(n_colors=4):\n    f, ax = plt.subplots(3, 5, figsize=(40,20))\n    for i in tqdm(range(15)):\n        path= os.path.join(TRAIN_DIR, df.image[i])\n        img_id= df.individual_id[i]\n        img=load(path,128)\n        img= k_means(img , n_colors= n_colors)\n        ax[i//5][i%5].imshow(img, aspect='auto')\n        ax[i//5][i%5].set_title(img_id)\n        ax[i//5][i%5].set_xticks([]); ax[i//5][i%5].set_yticks([])\n    plt.show()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:31:59.701614Z","iopub.status.busy":"2022-02-19T06:31:59.701012Z","iopub.status.idle":"2022-02-19T06:31:59.704808Z","shell.execute_reply":"2022-02-19T06:31:59.704386Z","shell.execute_reply.started":"2022-02-18T08:00:06.903114Z"},"papermill":{"duration":0.180263,"end_time":"2022-02-19T06:31:59.704928","exception":false,"start_time":"2022-02-19T06:31:59.524665","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_kmean(n_colors= 4)","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:00.058352Z","iopub.status.busy":"2022-02-19T06:32:00.057460Z","iopub.status.idle":"2022-02-19T06:32:07.032124Z","shell.execute_reply":"2022-02-19T06:32:07.032542Z","shell.execute_reply.started":"2022-02-18T08:00:06.917166Z"},"papermill":{"duration":7.161694,"end_time":"2022-02-19T06:32:07.032695","exception":false,"start_time":"2022-02-19T06:31:59.871001","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Edge detection with required Morphological Transformations","metadata":{"papermill":{"duration":0.21459,"end_time":"2022-02-19T06:32:07.466398","exception":false,"start_time":"2022-02-19T06:32:07.251808","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def show_edges(n_colors=4):\n    f, ax = plt.subplots(3, 5, figsize=(40,20))\n    for i in tqdm(range(15)):\n        path= os.path.join(TRAIN_DIR, df.image[i])\n        img_id= df.individual_id[i]\n        img=load(path,128)\n        img= k_means(img, n_colors= n_colors)\n        \n        img_gray= cv2.cvtColor(np.uint8(img*255), cv2.COLOR_RGB2GRAY)\n        img_gray= cv2.medianBlur(img_gray,5)\n        edges = cv2.Canny(img_gray,100,200)\n        ax[i//5][i%5].imshow(edges, aspect='auto')\n        ax[i//5][i%5].set_title(img_id)\n        ax[i//5][i%5].set_xticks([]); ax[i//5][i%5].set_yticks([])\n    plt.show()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:07.907709Z","iopub.status.busy":"2022-02-19T06:32:07.906786Z","iopub.status.idle":"2022-02-19T06:32:07.908622Z","shell.execute_reply":"2022-02-19T06:32:07.909015Z","shell.execute_reply.started":"2022-02-18T08:00:30.078866Z"},"papermill":{"duration":0.223546,"end_time":"2022-02-19T06:32:07.909175","exception":false,"start_time":"2022-02-19T06:32:07.685629","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"show_edges(n_colors =3)","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:08.381176Z","iopub.status.busy":"2022-02-19T06:32:08.368571Z","iopub.status.idle":"2022-02-19T06:32:14.859780Z","shell.execute_reply":"2022-02-19T06:32:14.860419Z","shell.execute_reply.started":"2022-02-18T08:00:30.090414Z"},"papermill":{"duration":6.741131,"end_time":"2022-02-19T06:32:14.860632","exception":false,"start_time":"2022-02-19T06:32:08.119501","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Object detection(Drawing bounding boxes around target)","metadata":{"papermill":{"duration":0.244347,"end_time":"2022-02-19T06:32:15.514740","exception":false,"start_time":"2022-02-19T06:32:15.270393","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def find_box(edges):\n    #contour masking\n    co, hi = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n    if co!=():\n        con=max(co, key=cv2.contourArea)\n        conv_hull=cv2.convexHull(con)\n        top=tuple(conv_hull[conv_hull[:,:,1].argmin()][0])\n        bottom=tuple(conv_hull[conv_hull[:,:,1].argmax()][0])\n        left=tuple(conv_hull[conv_hull[:,:,0].argmin()][0])\n        right=tuple(conv_hull[conv_hull[:,:,0].argmax()][0])\n        return top, bottom, left, right\n    \n    else:\n        return (0,0),(0,0),(0,0),(0,0)\n","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:16.018142Z","iopub.status.busy":"2022-02-19T06:32:16.017479Z","iopub.status.idle":"2022-02-19T06:32:16.019772Z","shell.execute_reply":"2022-02-19T06:32:16.020306Z","shell.execute_reply.started":"2022-02-18T08:00:53.28916Z"},"papermill":{"duration":0.251469,"end_time":"2022-02-19T06:32:16.020476","exception":false,"start_time":"2022-02-19T06:32:15.769007","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"f, ax = plt.subplots(figsize=(3,3))\ni=43\npath= os.path.join(TRAIN_DIR, df.image[i])\nimg_id= df.individual_id[i]\nimg=load(path,128)\nimg= k_means(img , n_colors= 8)\nimg_gray= cv2.cvtColor(np.uint8(img*255), cv2.COLOR_RGB2GRAY)\nimg_gray= cv2.medianBlur(img_gray,5)\nedges = cv2.Canny(img_gray,100,200)\n\nplt.imshow(edges, aspect='auto')\nplt.show()\n\nfind_box(edges)","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:16.506729Z","iopub.status.busy":"2022-02-19T06:32:16.506021Z","iopub.status.idle":"2022-02-19T06:32:17.184691Z","shell.execute_reply":"2022-02-19T06:32:17.185350Z","shell.execute_reply.started":"2022-02-18T08:00:53.302181Z"},"papermill":{"duration":0.935431,"end_time":"2022-02-19T06:32:17.185587","exception":false,"start_time":"2022-02-19T06:32:16.250156","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"f, ax = plt.subplots(figsize=(3,3))\ni=45\npath= os.path.join(TRAIN_DIR, df.image[i])\nimg_id= df.individual_id[i]\nimg=load(path,128)\nimg= k_means(img , n_colors= 8)\nimg_gray= cv2.cvtColor(np.uint8(img*255), cv2.COLOR_RGB2GRAY)\nimg_gray= cv2.medianBlur(img_gray,5)\nedges = cv2.Canny(img_gray,100,200)\n\nplt.imshow(edges, aspect='auto')\nplt.show()\n\nfind_box(edges)","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:17.778372Z","iopub.status.busy":"2022-02-19T06:32:17.777510Z","iopub.status.idle":"2022-02-19T06:32:18.720663Z","shell.execute_reply":"2022-02-19T06:32:18.721278Z","shell.execute_reply.started":"2022-02-18T08:00:54.938194Z"},"papermill":{"duration":1.243546,"end_time":"2022-02-19T06:32:18.721445","exception":false,"start_time":"2022-02-19T06:32:17.477899","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def draw_bound_box():\n    f, ax = plt.subplots(3, 5, figsize=(40,20))\n    for i in tqdm(range(15)):\n        path= os.path.join(TRAIN_DIR, df.image[i])\n        img_id= df.individual_id[i]\n        img=load(path,128)\n        org=img.copy()\n        img= k_means(img , n_colors= 8)\n        \n        img_gray= cv2.cvtColor(np.uint8(img*255), cv2.COLOR_RGB2GRAY)\n        img_gray= cv2.medianBlur(img_gray,7)\n        edges = cv2.Canny(img_gray,100,200)\n        \n        kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(15,15))\n        edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)\n        \n        top,bottom,left,right = find_box(edges)\n        org=cv2.rectangle(org, (left[0], top[1]), (right[0], bottom[1]), (0, 255, 0), thickness=3)\n        \n        ax[i//5][i%5].imshow(org, aspect='auto')\n        ax[i//5][i%5].set_title(img_id)\n        ax[i//5][i%5].set_xticks([]); ax[i//5][i%5].set_yticks([])\n    plt.show()\n    ","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:19.337026Z","iopub.status.busy":"2022-02-19T06:32:19.336397Z","iopub.status.idle":"2022-02-19T06:32:19.338882Z","shell.execute_reply":"2022-02-19T06:32:19.339611Z","shell.execute_reply.started":"2022-02-18T08:00:56.565952Z"},"papermill":{"duration":0.334185,"end_time":"2022-02-19T06:32:19.339794","exception":false,"start_time":"2022-02-19T06:32:19.005609","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"draw_bound_box()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:19.893190Z","iopub.status.busy":"2022-02-19T06:32:19.891982Z","iopub.status.idle":"2022-02-19T06:32:31.648141Z","shell.execute_reply":"2022-02-19T06:32:31.648625Z","shell.execute_reply.started":"2022-02-18T08:00:56.581308Z"},"papermill":{"duration":12.016311,"end_time":"2022-02-19T06:32:31.648790","exception":false,"start_time":"2022-02-19T06:32:19.632479","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Foreground extraction","metadata":{"papermill":{"duration":0.305777,"end_time":"2022-02-19T06:32:32.287968","exception":false,"start_time":"2022-02-19T06:32:31.982191","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def forgrd_ext(img, rec):\n    mask= np.zeros(img.shape[:2], np.uint8)\n    bgmodel= np.zeros((1, 65), np.float64)\n    fgmodel= np.zeros((1, 65), np.float64)\n    cv2.grabCut(img, mask, rec, bgmodel, fgmodel, 3, cv2.GC_INIT_WITH_RECT)\n    mask2= np.where((mask==2)|(mask==0), 0, 1).astype('uint8')\n    img= img*mask2[:,:,np.newaxis]\n    img[np.where((img == [0,0,0]).all(axis = 2))] = [255.0, 255.0, 255.0]\n    return img\n\ndef ext_frgd():\n    f, ax = plt.subplots(3, 5, figsize=(40,20))\n    for i in tqdm(range(15)):\n        path= os.path.join(TRAIN_DIR, df.image[i])\n        img_id= df.individual_id[i]\n        img=load(path,128)\n        org=img.copy()\n        img= k_means(img , n_colors= 8)\n        \n        img_gray= cv2.cvtColor(np.uint8(img*255), cv2.COLOR_RGB2GRAY)\n        img_gray= cv2.medianBlur(img_gray,7)\n        edges = cv2.Canny(img_gray,100,200)\n        \n        kernel= cv2.getStructuringElement(cv2.MORPH_RECT,(15,15))\n        edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)\n        \n        top,bottom,left,right = find_box(edges)\n        rec= (left[0], top[1], right[0]-left[0], bottom[1]-top[1])\n        forground_img= forgrd_ext(org, rec)\n        \n        ax[i//5][i%5].imshow(forground_img, aspect='auto')\n        ax[i//5][i%5].set_title(img_id)\n        ax[i//5][i%5].set_xticks([]); ax[i//5][i%5].set_yticks([])\n    plt.show()\n    ","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:32.906663Z","iopub.status.busy":"2022-02-19T06:32:32.905010Z","iopub.status.idle":"2022-02-19T06:32:32.907257Z","shell.execute_reply":"2022-02-19T06:32:32.907657Z"},"papermill":{"duration":0.314205,"end_time":"2022-02-19T06:32:32.907796","exception":false,"start_time":"2022-02-19T06:32:32.593591","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ext_frgd()","metadata":{"execution":{"iopub.execute_input":"2022-02-19T06:32:33.597480Z","iopub.status.busy":"2022-02-19T06:32:33.596087Z","iopub.status.idle":"2022-02-19T06:32:45.215986Z","shell.execute_reply":"2022-02-19T06:32:45.216551Z"},"papermill":{"duration":12.003276,"end_time":"2022-02-19T06:32:45.216741","exception":false,"start_time":"2022-02-19T06:32:33.213465","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"papermill":{"duration":17.129569,"end_time":"2022-02-19T16:26:04.178731","exception":false,"start_time":"2022-02-19T16:25:47.049162","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}