{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "id": "7yB0XaWatCRV" }, "outputs": [], "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')\n", "!ln -s /content/drive/MyDrive/ /mydrive\n", "!ls /mydrive\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "id": "HXGKgW2dq8fV" }, "outputs": [ { "ename": "ModuleNotFoundError", "evalue": "No module named 'google.colab'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[3], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mgoogle\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcolab\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m drive\n\u001b[0;32m 2\u001b[0m drive\u001b[38;5;241m.\u001b[39mmount(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m/content/drive\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'google.colab'" ] } ], "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "6x3IRFnqq9_W" }, "outputs": [], "source": [ "%cd /content/drive/MyDrive/DEPI-Project" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "xvle9T10fB6g", "outputId": "4a95be02-3d53-41d5-991a-9f04589763c5" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/content/drive/MyDrive/DEPI-Project/pifuhd/sample_images\n" ] } ], "source": [ "cd /content/drive/MyDrive/DEPI-Project/pifuhd/sample_images" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 73 }, "id": "jaV_7Yi8fM-B", "outputId": "25f26f89-44a9-46f2-8023-ad1a4026b82e" }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " Upload widget is only available when the cell has been executed in the\n", " current browser session. Please rerun this cell to enable.\n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Saving man.png to man.png\n" ] } ], "source": [ "from google.colab import files\n", "\n", "filename = list(files.upload().keys())[0]" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "id": "AEzmmB01SOZp" }, "outputs": [], "source": [ "import os\n", "\n", "try:\n", " image_path = '/content/drive/MyDrive/DEPI-Project/pifuhd/sample_images/%s' % filename\n", "except:\n", " image_path = '/content/drive/MyDrive/DEPI-Project/pifuhd/sample_images/test.png' # example image\n", "image_dir = os.path.dirname(image_path)\n", "file_name = os.path.splitext(os.path.basename(image_path))[0]\n", "\n", "# output pathes\n", "obj_path = '/content/drive/MyDrive/DEPI-Project/pifuhd/results/pifuhd_final/recon/result_%s_256.obj' % file_name\n", "out_img_path = '/content/drive/MyDrive/DEPI-Project/pifuhd/results/pifuhd_final/recon/result_%s_256.png' % file_name\n", "video_path = '/content/drive/MyDrive/DEPI-Project/pifuhd/results/pifuhd_final/recon/result_%s_256.mp4' % file_name\n", "video_display_path = '/content/drive/MyDrive/DEPI-Project/pifuhd/results/pifuhd_final/result_%s_256_display.mp4' % file_name" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "896EC7iQfXkj", "outputId": "045a7462-8f77-40eb-f304-538332fc84c6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/content\n" ] } ], "source": [ "cd /content" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_zxeKR9Er8mX", "outputId": "3fa7ac4d-4739-4a5c-c33b-3bd2c9162766" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/content/drive/MyDrive/DEPI-Project/pifuhd/sample_images/man.png\n" ] } ], "source": [ "print(image_path)" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "F-vYklhI5dab", "outputId": "5133a3da-ba05-4078-e2f8-181ad35ec9d7" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/content/drive/MyDrive/DEPI-Project/lightweight-human-pose-estimation.pytorch\n" ] } ], "source": [ "cd /content/drive/MyDrive/DEPI-Project/lightweight-human-pose-estimation.pytorch/" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "id": "PdRcDXe38lHB" }, "outputs": [], "source": [ "import torch\n", "import cv2\n", "import numpy as np\n", "from models.with_mobilenet import PoseEstimationWithMobileNet\n", "from modules.keypoints import extract_keypoints, group_keypoints\n", "from modules.load_state import load_state\n", "from modules.pose import Pose, track_poses\n", "import demo\n", "\n", "def get_rect(net, images, height_size):\n", " net = net.eval()\n", "\n", " stride = 8\n", " upsample_ratio = 4\n", " num_keypoints = Pose.num_kpts\n", " previous_poses = []\n", " delay = 33\n", " for image in images:\n", " rect_path = image.replace('.%s' % (image.split('.')[-1]), '_rect.txt')\n", " img = cv2.imread(image, cv2.IMREAD_COLOR)\n", " orig_img = img.copy()\n", " orig_img = img.copy()\n", " heatmaps, pafs, scale, pad = demo.infer_fast(net, img, height_size, stride, upsample_ratio, cpu=False)\n", "\n", " total_keypoints_num = 0\n", " all_keypoints_by_type = []\n", " for kpt_idx in range(num_keypoints): # 19th for bg\n", " total_keypoints_num += extract_keypoints(heatmaps[:, :, kpt_idx], all_keypoints_by_type, total_keypoints_num)\n", "\n", " pose_entries, all_keypoints = group_keypoints(all_keypoints_by_type, pafs)\n", " for kpt_id in range(all_keypoints.shape[0]):\n", " all_keypoints[kpt_id, 0] = (all_keypoints[kpt_id, 0] * stride / upsample_ratio - pad[1]) / scale\n", " all_keypoints[kpt_id, 1] = (all_keypoints[kpt_id, 1] * stride / upsample_ratio - pad[0]) / scale\n", " current_poses = []\n", "\n", " rects = []\n", " for n in range(len(pose_entries)):\n", " if len(pose_entries[n]) == 0:\n", " continue\n", " pose_keypoints = np.ones((num_keypoints, 2), dtype=np.int32) * -1\n", " valid_keypoints = []\n", " for kpt_id in range(num_keypoints):\n", " if pose_entries[n][kpt_id] != -1.0: # keypoint was found\n", " pose_keypoints[kpt_id, 0] = int(all_keypoints[int(pose_entries[n][kpt_id]), 0])\n", " pose_keypoints[kpt_id, 1] = int(all_keypoints[int(pose_entries[n][kpt_id]), 1])\n", " valid_keypoints.append([pose_keypoints[kpt_id, 0], pose_keypoints[kpt_id, 1]])\n", " valid_keypoints = np.array(valid_keypoints)\n", "\n", " if pose_entries[n][10] != -1.0 or pose_entries[n][13] != -1.0:\n", " pmin = valid_keypoints.min(0)\n", " pmax = valid_keypoints.max(0)\n", "\n", " center = (0.5 * (pmax[:2] + pmin[:2])).astype('int')\n", " radius = int(0.65 * max(pmax[0]-pmin[0], pmax[1]-pmin[1]))\n", " elif pose_entries[n][10] == -1.0 and pose_entries[n][13] == -1.0 and pose_entries[n][8] != -1.0 and pose_entries[n][11] != -1.0:\n", " # if leg is missing, use pelvis to get cropping\n", " center = (0.5 * (pose_keypoints[8] + pose_keypoints[11])).astype('int')\n", " radius = int(1.45*np.sqrt(((center[None,:] - valid_keypoints)**2).sum(1)).max(0))\n", " center[1] += int(0.05*radius)\n", " else:\n", " center = np.array([img.shape[1]//2,img.shape[0]//2])\n", " radius = max(img.shape[1]//2,img.shape[0]//2)\n", "\n", " x1 = center[0] - radius\n", " y1 = center[1] - radius\n", "\n", " rects.append([x1, y1, 2*radius, 2*radius])\n", "\n", " np.savetxt(rect_path, np.array(rects), fmt='%d')" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "M6cGZD6f6IaY", "outputId": "b68840ec-5857-4ab0-9947-a0e05b00040c" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ ":2: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", " checkpoint = torch.load('checkpoint_iter_370000.pth', map_location='cpu')\n" ] } ], "source": [ "net = PoseEstimationWithMobileNet()\n", "checkpoint = torch.load('checkpoint_iter_370000.pth', map_location='cpu')\n", "load_state(net, checkpoint)\n", "\n", "get_rect(net.cuda(), [image_path], 512)" ] }, { "cell_type": "markdown", "metadata": { "id": "Y0rgMInwTt0s" }, "source": [ "## Download the Pretrained Model" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "QOXTVOOysSzp", "outputId": "640d5551-18b6-43fb-c1fa-c1c1e4f4dc69" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/content/drive/MyDrive/DEPI-Project\n" ] } ], "source": [ "cd /content/drive/MyDrive/DEPI-Project/" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UrIcZweSNRFI", "outputId": "e2ecc261-bf8d-4231-e15b-aa54a51a1583" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/content/drive/MyDrive/DEPI-Project/pifuhd\n" ] } ], "source": [ "cd /content/drive/MyDrive/DEPI-Project/pifuhd/" ] }, { "cell_type": "markdown", "metadata": { "id": "6heKcA-0QEBw" }, "source": [ "## Run PIFuHD!\n" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "5995t2PnQTmG", "outputId": "c7d8b71f-f01e-4d78-cbcd-c6e45329d066" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Resuming from ./checkpoints/pifuhd.pt\n", "/content/drive/MyDrive/DEPI-Project/pifuhd/apps/recon.py:150: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", " state_dict = torch.load(state_dict_path, map_location=cuda)\n", "Warning: opt is overwritten.\n", "test data size: 2\n", "initialize network with normal\n", "initialize network with normal\n", "generate mesh (test) ...\n", " 0% 0/2 [00:00=0.1.6 in /usr/local/lib/python3.10/dist-packages (from fvcore) (0.1.8)\n", "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from fvcore) (6.0.2)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from fvcore) (4.66.5)\n", "Requirement already satisfied: termcolor>=1.1 in /usr/local/lib/python3.10/dist-packages (from fvcore) (2.4.0)\n", "Requirement already satisfied: Pillow in /usr/local/lib/python3.10/dist-packages (from fvcore) (10.4.0)\n", "Requirement already satisfied: tabulate in /usr/local/lib/python3.10/dist-packages (from fvcore) (0.9.0)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from iopath) (4.12.2)\n", "Requirement already satisfied: portalocker in /usr/local/lib/python3.10/dist-packages (from iopath) (2.10.1)\n", "Looking in links: https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py310_cu121_pyt241/download.html\n", "Requirement already satisfied: pytorch3d in /usr/local/lib/python3.10/dist-packages (0.7.8)\n", "Requirement already satisfied: iopath in /usr/local/lib/python3.10/dist-packages (from pytorch3d) (0.1.10)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from iopath->pytorch3d) (4.66.5)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from iopath->pytorch3d) (4.12.2)\n", "Requirement already satisfied: portalocker in /usr/local/lib/python3.10/dist-packages (from iopath->pytorch3d) (2.10.1)\n" ] } ], "source": [ "!pip install fvcore iopath\n", "!pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/{version_str}/download.html" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": true, "id": "5xp5s5uiOiDv" }, "outputs": [], "source": [ "import sys\n", "import torch\n", "pyt_version_str=torch.__version__.split(\"+\")[0].replace(\".\", \"\")\n", "version_str=\"\".join([\n", " f\"py3{sys.version_info.minor}_cu\",\n", " torch.version.cuda.replace(\".\",\"\"),\n", " f\"_pyt{pyt_version_str}\"\n", "])" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 36 }, "id": "p-iZdRnasr1y", "outputId": "b939abdd-4afd-49f8-ea36-6508afca42fc" }, "outputs": [ { "data": { "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" }, "text/plain": [ "'/content/drive/MyDrive/DEPI-Project/pifuhd/results/pifuhd_final/recon/result_man_256.obj'" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "obj_path" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 339, "referenced_widgets": [ "d908d13b63d747e99095c2de36888737", "7153bbe0a42d4bb68e3b2d46e626f309", "13ca90005a17416681fde7408bed2d3f", "876a7295a0f446e59596fbd64a5d850a", "bf67fc07099d4746a3c331fa93b50146", "a92f9a2a52104521b67159ea4e8e475a", "18d788c978dc45ef9fb55d41bb3726d8", "56aba02a7b134007bfca100e643b0728", "e2621bddb06d4a5fa627f0d214ec93e3", "6030f32a8bc84e16807392b2838b7f8b", "d45c856b3f16423483a9a7f56001c196" ] }, "id": "afwL_-ROCmDf", "outputId": "af220cfb-63c2-4e19-9fb7-0eaa3c0432ee" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.10/dist-packages/pytorch3d/io/obj_io.py:546: UserWarning: No mtl file provided\n", " warnings.warn(\"No mtl file provided\")\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d908d13b63d747e99095c2de36888737", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/90 [00:00 " ], "text/plain": [ "" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lib.colab_util import generate_video_from_obj, set_renderer, video\n", "\n", "renderer = set_renderer()\n", "generate_video_from_obj(obj_path, out_img_path, video_path, renderer)\n", "\n", "# we cannot play a mp4 video generated by cv2\n", "!ffmpeg -i $video_path -vcodec libx264 $video_display_path -y -loglevel quiet\n", "video(video_display_path)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "lX5CTTW_KWhQ" }, "outputs": [], "source": [] } ], "metadata": { "accelerator": "GPU", "colab": { "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.4" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "13ca90005a17416681fde7408bed2d3f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_56aba02a7b134007bfca100e643b0728", "max": 90, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_e2621bddb06d4a5fa627f0d214ec93e3", "value": 90 } }, "18d788c978dc45ef9fb55d41bb3726d8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "56aba02a7b134007bfca100e643b0728": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "6030f32a8bc84e16807392b2838b7f8b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7153bbe0a42d4bb68e3b2d46e626f309": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a92f9a2a52104521b67159ea4e8e475a", "placeholder": "​", "style": "IPY_MODEL_18d788c978dc45ef9fb55d41bb3726d8", "value": "100%" } }, "876a7295a0f446e59596fbd64a5d850a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_6030f32a8bc84e16807392b2838b7f8b", "placeholder": "​", "style": "IPY_MODEL_d45c856b3f16423483a9a7f56001c196", "value": " 90/90 [00:05<00:00, 15.43it/s]" } }, "a92f9a2a52104521b67159ea4e8e475a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "bf67fc07099d4746a3c331fa93b50146": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d45c856b3f16423483a9a7f56001c196": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "d908d13b63d747e99095c2de36888737": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_7153bbe0a42d4bb68e3b2d46e626f309", "IPY_MODEL_13ca90005a17416681fde7408bed2d3f", "IPY_MODEL_876a7295a0f446e59596fbd64a5d850a" ], "layout": "IPY_MODEL_bf67fc07099d4746a3c331fa93b50146" } }, "e2621bddb06d4a5fa627f0d214ec93e3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } } } } }, "nbformat": 4, "nbformat_minor": 0 }