2023-12-06 09:21:43 +00:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 1,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"import cv2\n",
|
|
|
|
"import numpy as np\n",
|
|
|
|
"from PIL import Image\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
"from pathlib import Path"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 2,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
2024-01-23 14:54:09 +00:00
|
|
|
"img_src = \"../DATASETS/hof/webcam20231103-2.png\""
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 3,
|
2024-01-23 14:54:09 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"img_path = Path(img_src)\n",
|
|
|
|
"output_path = img_path.with_stem(img_path.stem + '-homography').with_suffix('.txt')\n",
|
|
|
|
"\n"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"# Setup"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 4,
|
2024-01-23 14:54:09 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"from os import PathLike\n",
|
|
|
|
"\n",
|
|
|
|
"def render_projection(src, dst, img: PathLike, points = []):\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
" x_min = min(dst[:,0])\n",
|
|
|
|
" if x_min < 0:\n",
|
|
|
|
" dst[:,0] += x_min * -1\n",
|
|
|
|
" y_min = min(dst[:,1])\n",
|
|
|
|
" if y_min < 0:\n",
|
|
|
|
" dst[:,1] += y_min * -1\n",
|
|
|
|
"\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
" # dst[:,0] += 1500\n",
|
|
|
|
" # dst[:,1] += 600\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"\n",
|
|
|
|
"\n",
|
|
|
|
" # print(\"from\", src)\n",
|
|
|
|
" # print(\"to\", dst)\n",
|
|
|
|
"\n",
|
|
|
|
" H, status = cv2.findHomography(src,dst)\n",
|
|
|
|
" f, axes = plt.subplots(1, 2, figsize=(16,8))\n",
|
|
|
|
"\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
" img = cv2.imread(str(img))\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
" img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n",
|
|
|
|
"\n",
|
|
|
|
" for i, p in enumerate(src):\n",
|
|
|
|
" cv2.circle(img, p, 3, (0,255,0), 0)\n",
|
|
|
|
" cv2.putText(img, str(i), p, cv2.FONT_HERSHEY_COMPLEX, .5, (0,255,0))\n",
|
|
|
|
"\n",
|
|
|
|
" # print (H)\n",
|
|
|
|
" dst = cv2.warpPerspective(img,H,(2500,1920))\n",
|
|
|
|
" axes[0].imshow(img)\n",
|
|
|
|
" axes[1].imshow(dst)\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"\n",
|
|
|
|
" def onclick(event):\n",
|
|
|
|
" points.append([event.xdata,event.ydata])\n",
|
|
|
|
" f.canvas.mpl_connect('button_press_event', onclick)\n",
|
|
|
|
"\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
" plt.tight_layout()\n",
|
|
|
|
" plt.show()\n",
|
|
|
|
" # display(Image.fromarray(img).resize((600,600)), Image.fromarray(dst).resize((600,600)))\n",
|
|
|
|
" return H"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2024-01-23 14:54:09 +00:00
|
|
|
"cell_type": "markdown",
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
2024-01-23 14:54:09 +00:00
|
|
|
"# First recording"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 5,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
2024-04-25 14:31:51 +00:00
|
|
|
"image/png": "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
|
2023-12-06 09:21:43 +00:00
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 1600x800 with 2 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"text/plain": [
|
2024-04-25 14:31:51 +00:00
|
|
|
"array([[ 2.14811662e+00, -6.24253612e-01, -1.76917928e+03],\n",
|
|
|
|
" [-3.00384000e-01, 4.54296024e+00, -2.95121358e+02],\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
" [-2.89572527e-04, 1.97232411e-03, 1.00000000e+00]])"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 5,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"output_type": "execute_result"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"\n",
|
|
|
|
"src = np.array([[924, 341],\n",
|
|
|
|
" [988, 343],\n",
|
|
|
|
" [908,125],\n",
|
|
|
|
" [941, 404],])\n",
|
|
|
|
"\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"dst = np.array([[2,0],\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"[100,0],\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"[105, -695],\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"[0, 130]])\n",
|
|
|
|
"\n",
|
|
|
|
"\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
"render_projection(src, dst, img_path)"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 6,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
2024-04-25 14:31:51 +00:00
|
|
|
"image/png": "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
|
2023-12-06 09:21:43 +00:00
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 1600x800 with 2 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
2024-01-23 14:54:09 +00:00
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2024-04-25 14:31:51 +00:00
|
|
|
"[[ 2.28441941e+00 -7.25403562e-03 -1.41218482e+03]\n",
|
|
|
|
" [-2.66305397e-02 3.73547277e+00 -5.09931039e+02]\n",
|
|
|
|
" [-4.62076533e-05 1.56722238e-03 1.00000000e+00]]\n"
|
2024-01-23 14:54:09 +00:00
|
|
|
]
|
2023-12-06 09:21:43 +00:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"\n",
|
|
|
|
"src = np.array([[924, 341],\n",
|
|
|
|
" [988, 343],\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
" [810, 330],\n",
|
|
|
|
" [620, 325],\n",
|
|
|
|
" [908,143],\n",
|
|
|
|
" [1072,616],\n",
|
|
|
|
" [941, 404],\n",
|
|
|
|
" \n",
|
|
|
|
" ])\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"\n",
|
|
|
|
"dst = np.array([[0,0],\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"[97,0],\n",
|
|
|
|
"[-160,-33],\n",
|
|
|
|
"[-460,-33],\n",
|
|
|
|
"[105, -500],\n",
|
|
|
|
"[87, 420],\n",
|
|
|
|
"[-2, 112]\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
"], dtype=np.float64)\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"\n",
|
|
|
|
"\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"H = render_projection(src, dst, img_path)\n",
|
|
|
|
"print(H)\n",
|
|
|
|
"# np.savetxt(output_path, H, delimiter=\",\")\n",
|
|
|
|
"# cv2.imwrite(\"/tmp/test.jpg\", dst)"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": null,
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": []
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": 7,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
2024-04-25 14:31:51 +00:00
|
|
|
"image/png": "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
|
2023-12-06 09:21:43 +00:00
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 1600x800 with 2 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
2024-01-23 14:54:09 +00:00
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2024-04-25 14:31:51 +00:00
|
|
|
"[[ 2.33261071e-02 -7.18489563e-05 -1.44258091e+01]\n",
|
|
|
|
" [-1.58777686e-04 3.80969604e-02 -5.30388927e+00]\n",
|
|
|
|
" [-2.36557580e-05 1.59322903e-03 1.00000000e+00]]\n"
|
2024-01-23 14:54:09 +00:00
|
|
|
]
|
2023-12-06 09:21:43 +00:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
2024-04-25 14:31:51 +00:00
|
|
|
"scaled_dst = dst / 100\n",
|
|
|
|
"H = render_projection(src, scaled_dst, img_path)\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"print(H)\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
"# np.savetxt(output_path, H, delimiter=\",\")\n"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
2024-01-23 14:54:09 +00:00
|
|
|
"cell_type": "markdown",
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
2024-01-23 14:54:09 +00:00
|
|
|
"# second recording"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 8,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
2024-01-23 14:54:09 +00:00
|
|
|
"img_src = \"../DATASETS/hof/webcam20240110.png\"\n",
|
|
|
|
"img_path = Path(img_src)\n",
|
|
|
|
"output_path = img_path.with_stem(img_path.stem + '-homography').with_suffix('.txt')"
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2024-04-25 14:31:51 +00:00
|
|
|
"execution_count": 9,
|
2023-12-06 09:21:43 +00:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
2024-04-25 14:31:51 +00:00
|
|
|
"image/png": "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
|
2023-12-06 09:21:43 +00:00
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 1600x800 with 2 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
2024-01-23 14:54:09 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
2024-04-25 14:31:51 +00:00
|
|
|
"[[ 2.11102794e+00 -9.31080334e-02 -1.32994099e+03]\n",
|
|
|
|
" [ 6.52086770e-02 3.41420130e+00 -4.80260705e+02]\n",
|
|
|
|
" [-7.87097747e-05 1.44776415e-03 1.00000000e+00]]\n"
|
2024-01-23 14:54:09 +00:00
|
|
|
]
|
2023-12-06 09:21:43 +00:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"src = np.array([\n",
|
|
|
|
" [954, 326], # 0\n",
|
|
|
|
" [1010, 320], # 1\n",
|
|
|
|
" [840, 325], # 2\n",
|
|
|
|
" [645, 317], # 3\n",
|
|
|
|
" [930,123], # 4\n",
|
|
|
|
" [1115,598], # 5\n",
|
|
|
|
" [970, 390], # 6\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
" ])\n",
|
|
|
|
"\n",
|
|
|
|
"dst = np.array([[0,0],\n",
|
|
|
|
"[97,0],\n",
|
|
|
|
"[-160,-33],\n",
|
|
|
|
"[-460,-33],\n",
|
|
|
|
"[105, -500],\n",
|
|
|
|
"[87, 420],\n",
|
|
|
|
"[-2, 112]\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
"], dtype=np.float64)\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
"H = render_projection(src, dst, img_path)\n",
|
|
|
|
"print(H)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": 10,
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"data": {
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABjYAAAJnCAYAAAA0vWrlAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9a6htW1rfjf6e1lrvfdzmZc25bnvtS5XRE2OpUfBSSCAIESURXnzJByEkUT8YEkohKQikgujRkNQ5+ZDjh0gCh5MEYgQ/hYAESVIYQ94IEiUnR8WYKq3at3WZa97nuPRLa+18aK33McZcc+29S6tq19Tnt5l7zTkuffTeeuttjPH/PxeJMUYURVEURVEURVEURVEURVEURVFuAebD3gFFURRFURRFURRFURRFURRFUZQPihobiqIoiqIoiqIoiqIoiqIoiqLcGtTYUBRFURRFURRFURRFURRFURTl1qDGhqIoiqIoiqIoiqIoiqIoiqIotwY1NhRFURRFURRFURRFURRFURRFuTWosaEoiqIoiqIoiqIoiqIoiqIoyq1BjQ1FURRFURRFURRFURRFURRFUW4NamwoiqIoiqIoiqIoiqIoiqIoinJrUGNDURRFURRFURRFURRFURRFUZRbgxobiqIoiqIoiqIoiqIoiqIoiqLcGtTYUBRFURRFURTljyU/93M/x0c/+lFGoxEf//jH+fVf//UPe5cURVEURVEURfkSoMaGoiiKoiiKoih/7PjFX/xFPvnJT/JTP/VT/OZv/ibf8i3fwvd93/fx7NmzD3vXFEVRFEVRFEX5IyIxxvhh74SiKIqiKIqiKMqXko9//ON8x3d8B//0n/5TAEIIvP766/z4j/84f+/v/b0Pee8URVEURVEURfmj4D7sHVAURVEURVEURflS0jQNv/Ebv8GnPvWp4TZjDN/zPd/Dr/3ar934nLquqet6+DuEwMnJCYeHh4jIl32fFUVRFEVRFOVPOjFGLi8vefToEca8d7EpNTYURVEURVEURfljxfPnz/He8+DBg63bHzx4wO/+7u/e+JxPf/rT/PRP//RXYvcURVEURVEURXkP3nrrLV577bX3fIz22FAURVEURVEU5U88n/rUpzg/Px9+3nzzTQA+/f/8f/B//p//x4e8d4qiKIqiKIryJ4ednZ33fYxmbCiKoiiKoiiK8seKu3fv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
|
|
|
|
"text/plain": [
|
|
|
|
"<Figure size 1600x800 with 2 Axes>"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
"metadata": {},
|
|
|
|
"output_type": "display_data"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"[[ 2.07873681e-02 -9.15620699e-04 -1.30923858e+01]\n",
|
|
|
|
" [ 5.63969727e-04 3.36566989e-02 -4.66048256e+00]\n",
|
|
|
|
" [-9.42743714e-05 1.43173299e-03 1.00000000e+00]]\n",
|
|
|
|
"../DATASETS/hof/webcam20240110-homography.txt\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"\n",
|
|
|
|
"scaled_dst = dst / 100\n",
|
|
|
|
"\n",
|
|
|
|
"H = render_projection(src, scaled_dst, img_path)\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"print(H)\n",
|
2024-04-25 14:31:51 +00:00
|
|
|
"print(output_path)\n",
|
|
|
|
"# np.savetxt(output_path, H, delimiter=\",\")"
|
2024-01-23 14:54:09 +00:00
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"# Compare\n",
|
2023-12-06 09:21:43 +00:00
|
|
|
"\n",
|
2024-01-23 14:54:09 +00:00
|
|
|
"Compare the different input images and homeographies."
|
2023-12-06 09:21:43 +00:00
|
|
|
]
|
2024-04-25 14:31:51 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
|
|
|
"execution_count": 22,
|
|
|
|
"metadata": {},
|
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"-13.092385786242692 < x < 15.370183792197755\n",
|
|
|
|
"-4.660482560250155 < y < 10.624264991237176\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"source": [
|
|
|
|
"# cv2.perspectiveTransform(np.array([[[530, 307.56]]]),H)\n",
|
|
|
|
"coords = cv2.perspectiveTransform(np.array([[[0., 0.], [1280., 0], [0, 720], [1280, 720]]]),H)\n",
|
|
|
|
"xs = coords[0,:,0]\n",
|
|
|
|
"ys = coords[0,:,1]\n",
|
|
|
|
"\n",
|
|
|
|
"\n",
|
|
|
|
"minx, maxx = min(xs), max(xs)\n",
|
|
|
|
"miny, maxy = min(ys), max(ys)\n",
|
|
|
|
"\n",
|
|
|
|
"print(f\"{minx} < x < {maxx}\")\n",
|
|
|
|
"print(f\"{miny} < y < {maxy}\")"
|
|
|
|
]
|
2023-12-06 09:21:43 +00:00
|
|
|
}
|
|
|
|
],
|
|
|
|
"metadata": {
|
|
|
|
"kernelspec": {
|
|
|
|
"display_name": ".venv",
|
|
|
|
"language": "python",
|
|
|
|
"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.10.4"
|
|
|
|
}
|
|
|
|
},
|
|
|
|
"nbformat": 4,
|
|
|
|
"nbformat_minor": 2
|
|
|
|
}
|