{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><iframe src=\"http://127.0.0.1:7866/\" width=\"100%\" height=\"768\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\s193396\\AppData\\Local\\miniconda3\\envs\\qim3d\\lib\\site-packages\\gradio\\analytics.py:106: UserWarning: IMPORTANT: You are using gradio version 4.44.0, however version 4.44.1 is available, please upgrade. \n",
      "--------\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "import qim3d\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Load example image\n",
    "vol = qim3d.examples.bone_128x128x128\n",
    "\n",
    "# Start annotation tool\n",
    "annotation_tool = qim3d.gui.annotation_tool.Interface()\n",
    "\n",
    "# We can directly pass the image we loaded to the interface\n",
    "app = annotation_tool.launch(vol[0]) # , server_name=\"10.197.104.229\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loaded shape: (128, 128)\n",
      "INFO:qim3d:Loaded shape: (128, 128)\n",
      "Volume using 16.0 KB of memory\n",
      "\n",
      "INFO:qim3d:Volume using 16.0 KB of memory\n",
      "\n",
      "System memory:\n",
      " • Total.: 31.6 GB\n",
      " • Used..: 18.0 GB (56.8%)\n",
      " • Free..: 13.7 GB (43.2%)\n",
      "INFO:qim3d:System memory:\n",
      " • Total.: 31.6 GB\n",
      " • Used..: 18.0 GB (56.8%)\n",
      " • Free..: 13.7 GB (43.2%)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mask_red': array([[False, False, False, ..., False, False, False],\n",
       "        [False, False, False, ..., False, False, False],\n",
       "        [False, False, False, ..., False, False, False],\n",
       "        ...,\n",
       "        [False, False, False, ..., False, False, False],\n",
       "        [False, False, False, ..., False, False, False],\n",
       "        [False, False, False, ..., False, False, False]])}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "annotation_tool.get_result()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loaded shape: (128, 128)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:qim3d:Loaded shape: (128, 128)\n",
      "Volume using 16.0 KB of memory\n",
      "\n",
      "INFO:qim3d:Volume using 16.0 KB of memory\n",
      "\n",
      "System memory:\n",
      " • Total.: 31.6 GB\n",
      " • Used..: 17.9 GB (56.7%)\n",
      " • Free..: 13.7 GB (43.3%)\n",
      "INFO:qim3d:System memory:\n",
      " • Total.: 31.6 GB\n",
      " • Used..: 17.9 GB (56.7%)\n",
      " • Free..: 13.7 GB (43.3%)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQsAAAEiCAYAAADu9vesAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAMMUlEQVR4nO3da2jVdQDG8WebjM3aORFNFxuFmyJzJMLUXpk10zlKXL1IjJWzrGARQiwoaBcxUDFfiFEujGUYSIUEUXYQmlkmdkMKWiVd7IJBc0ub1vR0/r2oHZxz7tn13L6fV3p23P4r/fr8f2etrCAIAgHAMLITfQEAUgOxAGAhFgAsxAKAhVgAsBALABZiAcBCLABYiAUAC7GAXn75ZWVlZenTTz9N9KUMqbW1VVlZWYm+jIxGLABYiAUAC7HAhPr7778Vi8USfRkYB8Qigfrvw7/99lvV1dUpHA6rsLBQTU1NCoJAP//8s1auXKlQKKSioiJt27Yt/mvPnz+v5uZmVVZWKhwO66qrrtKiRYvU0dEx6OPs3btXlZWVKigoUCgU0k033aTt27df8dp6enq0cOFClZSU6JtvvrE+n4MHDyorK0t79+7V008/reLiYk2dOlVnzpyRJB09elTLly9XOBzW1KlTtXjxYh0+fHjQ+/nwww+1YMEC5eXlqaysTG1tbdbHx8SakugLgLRq1SqVl5dr8+bNevvtt/XMM8/o2muvVVtbm6qqqrRlyxa9+uqramxs1IIFC3TLLbfozJkz2rVrl1avXq2HHnpIf/75p1566SVVV1fr448/1rx58yRJBw4c0OrVq7VkyRJt2bJFktTZ2anDhw9r/fr1l72erq4uLV26VN3d3Xr//fdVVlY2os9n48aNys3NVWNjo/r6+pSbm6v33ntPNTU1qqysVEtLi7Kzs9Xe3q6qqip98MEHWrhwoSTpyy+/1LJly1RYWKjW1lZFo1G1tLRo+vTpo/8HjPERIGFaWloCScHDDz8cfywajQYlJSVBVlZWsHnz5vjjPT09QX5+frBmzZr48/r6+ga8v56enmD69OnBAw88EH9s/fr1QSgUCqLR6JDX0d7eHkgKPvnkk+DkyZNBRUVFUFpaGvz4448j+nw6OjoCSUFpaWlw7ty5+OOxWCyYNWtWUF1dHcRisfjj586dC2bMmBEsXbo0/lhtbW2Ql5cXnDhxIv7YV199FeTk5AT8dk0sbkOSwLp16+I/zsnJ0fz58xUEgR588MH449dcc41mz56t77//Pv683NxcSVIsFlN3d7ei0ajmz5+vzz//fMCvO3v2rA4cODDsdfzyyy9avHixLly4oEOHDunGG28c1eezZs0a5efnx39+7NgxHT9+XPfee69OnTqlrq4udXV16ezZs1qyZIkOHTqkWCymf/75R5FIRLW1tbrhhhviv768vFzV1dWjuhaMH25DksDFfzAkKRwOKy8vT9ddd92gx0+dOhX/+e7du7Vt2zZ9/fXXunDhQvzxGTNmxH/c0NCg1157TTU1NSouLtayZct0zz33aPny5YOu47777tOUKVPU2dmpoqKiUX8+F398STp+/Lik/yIylNOnT6uvr09//fWXZs2aNejts2fP1jvvvDPqa8LYEYskkJOTYz0mScH/3wVxz549qq+vV21trZ544glNmzZNOTk52rRpk7777rv486dNm6Zjx44pEolo//792r9/v9rb23X//fdr9+7dA9733XffrVdeeUXbt2/Xpk2bRv35XLwqJMVfDdm6dWv8LOVSV199tfr6+kb9MTHxiEWKeuONN1RaWqp9+/YN+MrGlpaWQc/Nzc3VihUrtGLFCsViMTU0NKitrU1NTU2aOXNm/HmPPfaYZs6cqebmZoXDYT355JPjcq39B6ShUEi33377kM8rLCxUfn5+fIlczH1FBhOHM4sU1b88gou+3/LRo0d15MiRAc+7+LZFkrKzszV37lxJuuzf5E1NTWpsbNRTTz2lF154YVyutbKyUmVlZXr22WfV29s76O2///67pP8+p+rqar355pv66aef4m/v7OxUJBIZl2vB6LEsUtSdd96pffv26a677tIdd9yhH374QTt37tScOXMG/IFct26duru7VVVVpZKSEp04cUI7duzQvHnzVF5eftn3vXXrVp0+fVqPPvqoCgoKVFdXN6Zrzc7O1q5du1RTU6OKigqtXbtWxcXF+vXXX9XR0aFQKKS33npLkrRhwwa9++67WrRokRoaGhSNRrVjxw5VVFToiy++GNN1YGyIRYqqr6/Xb7/9pra2NkUiEc2ZM0d79uzR66+/roMHD8afV1dXpxdffFHPP/+8/vjjDxUVFWnVqlVqbW1VdvbQw3Lnzp3q7e3V2rVrVVBQoJUrV47pem+99VYdOXJEGzdu1HPPPafe3l4VFRXp5ptv1iOPPBJ/3ty5cxWJRPT444+rublZJSUl2rBhg06ePEksEiwrCPj/hgAYHmcWACzchmBY58+fV3d39xWfEw6HB71kivRCLDCsjz76SLfddtsVn9Pe3q76+vrJuSAkBGcWGFZPT48+++yzKz6noqJC119//SRdERKBWACwcMAJwEIsAFjsA06+szIcibyr5ffo6Dn/3lgWACzEAuMiCIKEror+a8DEIRYALHxRFkaFv8UzD8sCgIVlgRFJ9kXRf328MjL+WBYALCwLXFGyLwlMHpYFAAvLAgOwJDAUlgUAC8siw7Ek4GJZALCwLDIMSwKjRSwyBJHAWHEbAsDCskhzLAqMF5YFAAvLIk1l6qLgPyCbOCwLABZikYYydVVgYhELABbOLNJIpi8KzismFssCgIVlkQYyfVFgcrAsAFhYFiks0xcFZxSTi2UBwMKySEEsChZFIrAsAFhYFkgZLIrEYlkAsLAsUkimnlWwKJIDywKAhWWRAjJtUbAkkhPLAoCFZZHEWBRIJiwLABaWRRLKlEXBkkgtLAsAFpYFJg1LIrWxLABYWBZJJN3OKlgS6YVlAcDCskgC6bQoWBPpi1gkEJFAKuE2BICFZYExYVFkDpYFAAvLIgHS4ayCRZF5WBYALCyLScSiQCpjWQCwEAsAFmIBwMKZxSTgrALpgGUBwMKymEAsCqQTlgUAC8sCl8WiwKVYFgAsLIsJkqrnFSwKDIVlAcBCLABYiAUAC2cW44yzCqQrlgUAC8siw7Eo4GJZALCwLMZJqp1VsCgwUiwLABZiAcBCLABYOLMYI84qkClYFgAsLIsMwaLAWBGLUUq12w9grLgNAWBhWaQ5bj8wXlgWACwsixHirAKZimUBwMKySFOcVWC8sSwAWFgWplQ6q2BVYCKwLABYiAUAC7EAYOHMYhicVQD/YVkAsBALABZiAcDCmUUa4KwCk4FlAcDCshhCKr0KAkwGlgUAC8sihXFWgcnEsgBgYVlcgrMK4PJYFgAsxAKAhVgAsHBm8b9UOqvgVRAkAssCgIVYALAQCwAWzixSCGcVSCSWBQALsQBgyfjbkFR4yZTbDyQDlgUAC7EAYCEWACzEAoCFWACwZOyrIbwKAowMywKAhVgAsBALABZiAcBCLABYMu7VEF4FAUaHZQHAQiwAWIgFAAuxAGAhFgAsGfdqSDLjVRAkM5YFAAuxAGAhFgAsxAKAhVgAsBALABZiAcBCLABYiAUAS8Z9BWf/V0km0/e14Cs3kQpYFgAsxAKAJeNuQ/olw+0Itx9IJSwLAJaMXRb9ErEwWBRIRSwLAJaMXxb9JmNhsCiQylgWACwsi0tMxMJgUSAdsCwAWFgWQxhqDQy3OFgRSFcsCwAWlsUIsRyQqVgWACzEAoCFWACwEAsAFmIBwEIsAFiIBQALsQBgIRYALMQCgIVYALAQCwAWYgHAQiwAWIgFAAuxAGAhFgAsxAKAhVgAsBALABZiAcBCLABYiAUAC7EAYCEWACzEAoCFWACwEAsAFmIBwEIsAFiIBQALsQBgIRYALMQCgIVYALAQCwAWYgHAQiwAWIgFAAuxAGAhFgAsxAKAhVgAsBALABZiAcBCLABYiAUAC7EAYCEWACzEAoCFWACwEAsAFmIBwEIsAFiIBQALsQBgIRYALMQCgIVYALAQCwAWYgHAQiwAWIgFAAuxAGAhFgAsxAKAhVgAsBALABZiAcBCLABYiAUAC7EAYCEWACzEAoCFWACwEAsAFmIBwEIsAFiIBQALsQBgIRYALMQCgIVYALAQCwAWYgHAQiwAWIgFAAuxAGAhFgAsxAKAhVgAsBALABZiAcBCLABYiAUAC7EAYJniPjEIgom8DgBJjmUBwEIsAFiIBQALsQBgIRYALMQCgIVYALAQCwAWYgHA8i/YvH5VPFDsxgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import clear_output\n",
    "import numpy as np\n",
    "import time\n",
    "\n",
    "\n",
    "clear_output(wait=True)    \n",
    "masks_dict = annotation_tool.get_result()\n",
    "if len(masks_dict) == 0:\n",
    "    masks_dict[\"No mask\"] = np.zeros((32,32))\n",
    "\n",
    "fig, axs = plt.subplots(1, len(masks_dict), figsize=(8,3))\n",
    "\n",
    "if len(masks_dict) == 1:\n",
    "    axs = [axs]\n",
    "for idx, (name, mask) in enumerate(masks_dict.items()):\n",
    "\n",
    "    axs[idx].imshow(mask, cmap='gray', interpolation='none')\n",
    "    axs[idx].set_title(name)\n",
    "    axs[idx].axis('off')\n",
    "\n",
    "plt.tight_layout()\n",
    "\n",
    "\n",
    "plt.show()\n",
    "time.sleep(2)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "qim3d",
   "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.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}