diff --git a/module2/exo4/exercice.ipynb b/module2/exo4/exercice.ipynb index b329111340ca29e01233133c849ac1aad968b50a..46f94e2bacb80768c5499a7aee28ba95083a49e4 100644 --- a/module2/exo4/exercice.ipynb +++ b/module2/exo4/exercice.ipynb @@ -11,37 +11,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Install panda3d and ursina engines that may be useful for exploration then." + "## Install useful dependencies for data exploration" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { - "hideCode": true, + "hideCode": false, "hideOutput": true, "hidePrompt": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.\n", - "Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.\n", - "To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: panda3d in /opt/conda/lib/python3.6/site-packages (1.10.6.post2)\n", - "Requirement already satisfied: ursina in /opt/conda/lib/python3.6/site-packages (3.0.0)\n", - "Requirement already satisfied: panda3d in /opt/conda/lib/python3.6/site-packages (from ursina) (1.10.6.post2)\n", - "Requirement already satisfied: pillow in /opt/conda/lib/python3.6/site-packages (from ursina) (7.0.0)\n", - "Requirement already satisfied: screeninfo in /opt/conda/lib/python3.6/site-packages (from ursina) (0.6.5)\n", - "Requirement already satisfied: dataclasses in /opt/conda/lib/python3.6/site-packages (from screeninfo->ursina) (0.7)\n" + "Collecting xmltodict\n", + " Downloading xmltodict-0.12.0-py2.py3-none-any.whl (9.2 kB)\n", + "Installing collected packages: xmltodict\n" ] }, { @@ -57,74 +45,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: ipyvolume in /opt/conda/lib/python3.6/site-packages (0.5.2)\n", - "Requirement already satisfied: traittypes in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (0.2.1)\n", - "Requirement already satisfied: Pillow in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (7.0.0)\n", - "Requirement already satisfied: traitlets in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (4.3.3)\n", - "Requirement already satisfied: pythreejs>=1.0.0 in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (2.2.0)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.\n", - "Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.\n", - "To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: ipywebrtc in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (0.5.0)\n", - "Requirement already satisfied: requests in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (2.23.0)\n", - "Requirement already satisfied: numpy in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (1.15.2)\n", - "Requirement already satisfied: ipywidgets>=7.5 in /opt/conda/lib/python3.6/site-packages (from ipyvolume) (7.5.1)\n", - "Requirement already satisfied: ipython-genutils in /opt/conda/lib/python3.6/site-packages (from traitlets->ipyvolume) (0.2.0)\n", - "Requirement already satisfied: decorator in /opt/conda/lib/python3.6/site-packages (from traitlets->ipyvolume) (4.4.1)\n", - "Requirement already satisfied: six in /opt/conda/lib/python3.6/site-packages (from traitlets->ipyvolume) (1.14.0)\n", - "Requirement already satisfied: ipydatawidgets>=1.1.1 in /opt/conda/lib/python3.6/site-packages (from pythreejs>=1.0.0->ipyvolume) (4.0.1)\n", - "Requirement already satisfied: idna<3,>=2.5 in /opt/conda/lib/python3.6/site-packages (from requests->ipyvolume) (2.9)\n", - "Requirement already satisfied: chardet<4,>=3.0.2 in /opt/conda/lib/python3.6/site-packages (from requests->ipyvolume) (3.0.4)\n", - "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /opt/conda/lib/python3.6/site-packages (from requests->ipyvolume) (1.25.7)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.6/site-packages (from requests->ipyvolume) (2020.4.5.1)\n", - "Requirement already satisfied: ipython>=4.0.0; python_version >= \"3.3\" in /opt/conda/lib/python3.6/site-packages (from ipywidgets>=7.5->ipyvolume) (7.12.0)\n", - "Requirement already satisfied: widgetsnbextension~=3.5.0 in /opt/conda/lib/python3.6/site-packages (from ipywidgets>=7.5->ipyvolume) (3.5.1)\n", - "Requirement already satisfied: nbformat>=4.2.0 in /opt/conda/lib/python3.6/site-packages (from ipywidgets>=7.5->ipyvolume) (5.0.4)\n", - "Requirement already satisfied: ipykernel>=4.5.1 in /opt/conda/lib/python3.6/site-packages (from ipywidgets>=7.5->ipyvolume) (5.1.4)\n", - "Requirement already satisfied: backcall in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (0.1.0)\n", - "Requirement already satisfied: pexpect; sys_platform != \"win32\" in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (4.8.0)\n", - "Requirement already satisfied: setuptools>=18.5 in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (45.2.0.post20200209)\n", - "Requirement already satisfied: jedi>=0.10 in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (0.16.0)\n", - "Requirement already satisfied: pygments in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (2.5.2)\n", - "Requirement already satisfied: pickleshare in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (0.7.5)\n", - "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /opt/conda/lib/python3.6/site-packages (from ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (3.0.3)\n", - "Requirement already satisfied: notebook>=4.4.1 in /opt/conda/lib/python3.6/site-packages (from widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (6.0.3)\n", - "Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /opt/conda/lib/python3.6/site-packages (from nbformat>=4.2.0->ipywidgets>=7.5->ipyvolume) (3.0.2)\n", - "Requirement already satisfied: jupyter-core in /opt/conda/lib/python3.6/site-packages (from nbformat>=4.2.0->ipywidgets>=7.5->ipyvolume) (4.6.3)\n", - "Requirement already satisfied: jupyter-client in /opt/conda/lib/python3.6/site-packages (from ipykernel>=4.5.1->ipywidgets>=7.5->ipyvolume) (6.0.0)\n", - "Requirement already satisfied: tornado>=4.2 in /opt/conda/lib/python3.6/site-packages (from ipykernel>=4.5.1->ipywidgets>=7.5->ipyvolume) (6.0.3)\n", - "Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.6/site-packages (from pexpect; sys_platform != \"win32\"->ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (0.6.0)\n", - "Requirement already satisfied: parso>=0.5.2 in /opt/conda/lib/python3.6/site-packages (from jedi>=0.10->ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (0.6.0)\n", - "Requirement already satisfied: wcwidth in /opt/conda/lib/python3.6/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0; python_version >= \"3.3\"->ipywidgets>=7.5->ipyvolume) (0.1.8)\n", - "Requirement already satisfied: nbconvert in /opt/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (5.6.1)\n", - "Requirement already satisfied: terminado>=0.8.1 in /opt/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.8.3)\n", - "Requirement already satisfied: Send2Trash in /opt/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (1.5.0)\n", - "Requirement already satisfied: prometheus-client in /opt/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.7.1)\n", - "Requirement already satisfied: jinja2 in /opt/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (2.11.0)\n", - "Requirement already satisfied: pyzmq>=17 in /opt/conda/lib/python3.6/site-packages (from notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (17.1.2)\n", - "Requirement already satisfied: pyrsistent>=0.14.0 in /opt/conda/lib/python3.6/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets>=7.5->ipyvolume) (0.15.7)\n", - "Requirement already satisfied: attrs>=17.4.0 in /opt/conda/lib/python3.6/site-packages (from jsonschema!=2.5.0,>=2.4->nbformat>=4.2.0->ipywidgets>=7.5->ipyvolume) (19.3.0)\n", - "Requirement already satisfied: python-dateutil>=2.1 in /opt/conda/lib/python3.6/site-packages (from jupyter-client->ipykernel>=4.5.1->ipywidgets>=7.5->ipyvolume) (2.8.1)\n", - "Requirement already satisfied: bleach in /opt/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (3.1.0)\n", - "Requirement already satisfied: pandocfilters>=1.4.1 in /opt/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (1.4.2)\n", - "Requirement already satisfied: testpath in /opt/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.4.4)\n", - "Requirement already satisfied: entrypoints>=0.2.2 in /opt/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.3)\n", - "Requirement already satisfied: mistune<2,>=0.8.1 in /opt/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.8.4)\n", - "Requirement already satisfied: defusedxml in /opt/conda/lib/python3.6/site-packages (from nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.6.0)\n", - "Requirement already satisfied: MarkupSafe>=0.23 in /opt/conda/lib/python3.6/site-packages (from jinja2->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (1.1.1)\n", - "Requirement already satisfied: webencodings in /opt/conda/lib/python3.6/site-packages (from bleach->nbconvert->notebook>=4.4.1->widgetsnbextension~=3.5.0->ipywidgets>=7.5->ipyvolume) (0.5.1)\n" + "Successfully installed xmltodict-0.12.0\n" ] } ], @@ -137,11 +58,12 @@ " else:\n", " pip._internal.main(['install', package])\n", "\n", - "# Example\n", - "if __name__ == '__main__':\n", - " install('panda3d')\n", - " install('ursina')\n", - " install('ipyvolume')" + "# install('panda3d')\n", + "# install('ursina')\n", + "# install('ipyvolume')\n", + "# install('plotly')\n", + "# install('pyquaternion')\n", + "# install('xmltodict')" ] }, { @@ -160,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "hideCode": true, "hideOutput": true, @@ -416,39 +338,152 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "OrderedDict([('@id', '716508'),\n", + " ('@color', '21 156 162'),\n", + " ('@text', ''),\n", + " ('@nyu_class', 'wall'),\n", + " ('@note', ''),\n", + " ('@area', '492477'),\n", + " ('@obbox',\n", + " '-1.2153 -2.52873 -1.90061 4.76056 2.89713 3.58827 0.999386 0.0115122 0.0173149 0.02819'),\n", + " ('@aabbox',\n", + " '-1.19997 -0.368718 -1.66073 3.51822 2.43698 1.86119'),\n", + " ('@local_pose', '1 0 0 0')])" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import xmltodict\n", + "labels = xmltodict.parse(sample_scene_data)['annotation']['label']\n", + "sample_label = labels[0]\n", + "# sample_label" + ] + }, + { + "cell_type": "code", + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ - "from xml.etree import ElementTree\n", - "scene_root = ElementTree.fromstring(sample_scene_data)" + "import pyquaternion\n", + "\n", + "def obbox_properties_to_vertices(obbox_properties)\n", + " \"\"\"\n", + " Convert 3D box properties (center, dimensions, and quaternion)\n", + " \"\"\"\n", + " if isinstance(obbox_properties, str):\n", + " obbox_properties = a = map(float, obbox_properties.split())\n", + " \n", + "# TODO ADD EXTRA CHECKS\n", + "# if isinstance(obbox_properties, iterable) and len(obbox_properties == 10) and \n", + " \n", + " # Extract properties\n", + " cx, cy, cz = [0:3]\n", + " dx, dy, dz = [3:6]\n", + " qx, qy, qz, qw = [6:10]\n", + "\n", + " # Constants for converting properties to vertices\n", + " X = [0, 0, 1, 1, 0, 0, 1, 1]\n", + " Y = [0, 1, 1, 0, 0, 1, 1, 0]\n", + " Z = [0, 0, 0, 0, 1, 1, 1, 1]\n", + "\n", + " # Properties to unrotated vertices\n", + " x = [c_x + (-0.5 * d_x if v == 0 else 0.5 * d_x) for v in X]\n", + " y = [c_y + (-0.5 * d_y if v == 0 else 0.5 * d_y) for v in Y]\n", + " z = [c_z + (-0.5 * d_z if v == 0 else 0.5 * d_z) for v in Z]\n", + " unrotated_vertices = zip(x, y, z)\n", + " \n", + " # Apply quaternion\n", + " quaternion = pyquaternion.Quaternion(qw, qx, qy, qz)\n", + " unrotated_vectors = [(v[0] - cx, v[1] - cy, v[2] - cz) for v in unrotated_vertices]\n", + " vectors = [quaternion.rotate(v) for v in unrotated_vectors]\n", + " vertices = [(v[0] + cx, v[1] + cy, v[2] + cz) for v in vectors]\n", + " \n", + " x, y, z = zip(*vertices)\n", + " \n", + " return x, y, z\n", + "\n", + "def box_vertices" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 21, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" + "ename": "NameError", + "evalue": "name 'np' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 11\u001b[0m [1, 'magenta']],\n\u001b[1;32m 12\u001b[0m \u001b[0;31m# Intensity of each vertex, which will be interpolated and color-coded\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mintensity\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m12\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mendpoint\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0mintensitymode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'cell'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;31m# i, j and k give the vertices of triangles\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'np' is not defined" + ] } ], "source": [ - "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.mplot3d import Axes3D, axes3d\n", - "fig = plt.figure()\n", - "ax = fig.add_subplot(111, projection='3d')\n", - "X, Y, Z = axes3d.get_test_data(1.)\n", - "ax.plot_wireframe(X, Y, Z) #, rstride=10, cstride=10)\n", - "plt.show()" + "import plotly.graph_objects as go\n", + "fig = go.Figure(data=[\n", + " go.Mesh3d(\n", + " # 8 vertices of a cube\n", + " x=[0, 0, 1, 1, 0, 0, 1, 1],\n", + " y=[0, 1, 1, 0, 0, 1, 1, 0],\n", + " z=[0, 0, 0, 0, 1, 1, 1, 1],\n", + " colorbar_title='z',\n", + " colorscale=[[0, 'gold'],\n", + " [0.5, 'mediumturquoise'],\n", + " [1, 'magenta']],\n", + " # Intensity of each vertex, which will be interpolated and color-coded\n", + " intensity = np.linspace(0, 1, 12, endpoint=True),\n", + " intensitymode='cell',\n", + " # i, j and k give the vertices of triangles\n", + " i = [7, 0, 0, 0, 4, 4, 6, 6, 4, 0, 3, 2],\n", + " j = [3, 4, 1, 2, 5, 6, 5, 2, 0, 1, 6, 3],\n", + " k = [0, 7, 2, 3, 6, 7, 1, 1, 5, 5, 7, 6],\n", + " name='y',\n", + " showscale=True\n", + " )\n", + "])\n", + "\n", + "fig.show()" ] }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null,