{ "cells": [ { "cell_type": "markdown", "id": "fcfcc52fea5a9d80", "metadata": { "collapsed": false, "id": "fcfcc52fea5a9d80" }, "source": [ "# UD04 · Notebook 8 — Generar datos de entrenamiento\n", "\n", "## Introducción\n", "\n", "En este cuaderno generaremos datos para entrenar una red neuronal para controlar el robot para seguir el circuito. Usaremos los datos que generamos en este cuaderno para entrenar una red neuronal en el siguiente cuaderno." ] }, { "cell_type": "code", "execution_count": null, "id": "8fd9319d", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8fd9319d", "outputId": "21ee5092-e4d9-4369-c5ab-6f71b60e6431" }, "outputs": [], "source": [ "%pip install aitk aitk.robots keras numpy opencv-python-headless matplotlib requests\n", "\n", "# Dos caminos para la red, y cada uno pide algo distinto:\n", "# - `aitk.networks.SimpleNetwork` es el mas simple y se integra con aitk.robots, pero por\n", "# dentro usa TensorFlow. En Colab ya viene instalado y funciona sin mas.\n", "# - `keras` 3 es agnostico del backend (TensorFlow en Colab, PyTorch en local) y no necesita\n", "# TensorFlow. Es el camino que funciona en cualquier entorno.\n", "import os\n", "os.environ.setdefault(\"KERAS_BACKEND\", \"torch\")" ] }, { "cell_type": "markdown", "id": "2f333473", "metadata": { "id": "2f333473" }, "source": [ "## Preparamos el entorno" ] }, { "cell_type": "code", "execution_count": null, "id": "42219a2c757271c9", "metadata": { "ExecuteTime": { "end_time": "2023-10-07T09:33:28.463052Z", "start_time": "2023-10-07T09:33:27.505417Z" }, "id": "42219a2c757271c9" }, "outputs": [], "source": [ "import aitk.robots as bots\n", "import aitk.networks as nets\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import cv2\n", "import requests" ] }, { "cell_type": "code", "execution_count": null, "id": "917d007f", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 453 }, "id": "917d007f", "outputId": "04a0d90f-bd6e-445b-d430-79f288c4a01d" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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hBBCCCMSNAghhBDCiAQNQgghhDAiQYMQQgghjEjQIIQQQggjEjQIIYQQwogEDUIIIYQwIkGDEEIIIYyUHDS8/vrrfOQjH6GpqYl0Os1JJ53Eo48+Wlyuteaqq65i9uzZpNNpli9fzgsvvDDib+zZs4fVq1dTV1dHQ0MDl1xyCX19fYe/N0IIIYSYMCUFDXv37uWss87CdV1++9vf8swzz/B//+//ZcaMGcV1vve973HNNdfw4x//mI0bN1JdXc2KFSvIZDLFdVavXs3TTz/N2rVrueOOO7j//vu59NJLx2+vhBBCCDHulNZam6781a9+lT/+8Y/84Q9/GHW51po5c+bwhS98gS9+8YsAdHd309LSwg033MCHPvQhnn32WRYtWsQjjzzC0qVLAbjrrrt417vexWuvvcacOXMOuR09PT3U19dz7K212NXKdPOFEEIIMYqgX/PC+3vp7u6mrq7ugOuVlGn4zW9+w9KlS/ngBz9Ic3Mzp556Kj/96U+Ly7du3Up7ezvLly8vPlZfX8+yZcvYsGEDABs2bKChoaEYMAAsX74cy7LYuHHjqP9vNpulp6dnxE0IIYQQk6ukoOHll1/muuuu49hjj+Xuu+/msssu4zOf+Qw33ngjAO3t7QC0tLSMeF5LS0txWXt7O83NzSOWO45DY2NjcZ19XX311dTX1xdv8+bNK2WzhRBCCDEOSgoawjDktNNO4+///u859dRTufTSS/nkJz/Jj3/844naPgCuvPJKuru7i7ft27dP6P8nhBBCiP2VFDTMnj2bRYsWjXjs+OOPZ9u2bQC0trYC0NHRMWKdjo6O4rLW1lY6OztHLPd9nz179hTX2VcymaSurm7ETQghhBCTq6Sg4ayzzmLLli0jHnv++edZsGABAAsXLqS1tZV169YVl/f09LBx40ba2toAaGtro6uri02bNhXXuffeewnDkGXLlo15R4QQQggxsZxSVv785z/PW97yFv7+7/+eP//zP+fhhx/mJz/5CT/5yU8AUErxuc99jr/7u7/j2GOPZeHChXz9619nzpw5vO997wOizMQ73/nOYrOG53lcfvnlfOhDHzIaOSGEEEKIqVFS0HD66adz6623cuWVV/Ktb32LhQsX8sMf/pDVq1cX1/nyl79Mf38/l156KV1dXZx99tncddddpFKp4jo///nPufzyyznvvPOwLItVq1ZxzTXXjN9eCSGEEGLclVSnYbqQOg1CCCHE+JmQOg1CCCGEqFwSNAghhBDCiAQNQgghhDAiQYMQQgghjEjQIIQQQggjJQ25FEIIIUR8HWjApOlAylgGDYWdCwZiN1pUCCGEmDpaowEULJ/1bs6YcTYAg32DrOFLhwweYlmn4eWXX+boo4+e6s0QQgghysr27duZO3fuAZfHMtPQ2NgIwLZt26ivr5/irZl4PT09zJs3j+3bt5f9ZF2yr+VJ9rU8yb6WD601vb29h5zOIZZBg2VF/Tfr6+vL8s07kEqa4VP2tTzJvpYn2dfyYHIRLqMnhBBCCGFEggYhhBBCGIll0JBMJvnGN75BMpmc6k2ZFJW0v7Kv5Un2tTzJvlaeWI6eEEIIIcTki2WmQQghhBCTT4IGIYQQQhiRoEEIIYQQRiRoEEIIIYQRCRqEEEIIYSSWQcO1117LkUceSSqVYtmyZTz88MNTvUklu//++7nwwguZM2cOSiluu+22Ecu11lx11VXMnj2bdDrN8uXLeeGFF0ass2fPHlavXk1dXR0NDQ1ccskl9PX1TeJemLn66qs5/fTTqa2tpbm5mfe9731s2bJlxDqZTIY1a9bQ1NRETU0Nq1atoqOjY8Q627ZtY+XKlVRVVdHc3MyXvvQlfN+fzF05pOuuu47FixcXq8a1tbXx29/+tri8XPZzX9/97ndRSvG5z32u+Fg57es3v/lNlFIjbscdd1xxeTntK8Drr7/ORz7yEZqamkin05x00kk8+uijxeXlcnw68sgj93tflVKsWbMGKL/3dVzomLn55pt1IpHQ//Zv/6affvpp/clPflI3NDTojo6Oqd60ktx55536//yf/6P/+7//WwP61ltvHbH8u9/9rq6vr9e33Xab/tOf/qTf85736IULF+rBwcHiOu985zv1ySefrB966CH9hz/8QR9zzDH6wx/+8CTvyaGtWLFCX3/99fqpp57STzzxhH7Xu96l58+fr/v6+orrfOpTn9Lz5s3T69at048++qg+88wz9Vve8pbict/39YknnqiXL1+uH3/8cX3nnXfqmTNn6iuvvHIqdumAfvOb3+j/+Z//0c8//7zesmWL/pu/+Rvtuq5+6qmntNbls5/DPfzww/rII4/Uixcv1p/97GeLj5fTvn7jG9/QJ5xwgt6xY0fxtnPnzuLyctrXPXv26AULFuiPfexjeuPGjfrll1/Wd999t37xxReL65TL8amzs3PEe7p27VoN6Pvuu09rXV7v63iJXdBwxhln6DVr1hTvB0Gg58yZo6+++uop3KrDs2/QEIahbm1t1f/wD/9QfKyrq0snk0n9H//xH1prrZ955hkN6EceeaS4zm9/+1utlNKvv/76pG37WHR2dmpAr1+/Xmsd7ZvruvqWW24prvPss89qQG/YsEFrHQVZlmXp9vb24jrXXXedrqur09lsdnJ3oEQzZszQ//qv/1qW+9nb26uPPfZYvXbtWv32t7+9GDSU275+4xvf0CeffPKoy8ptX7/yla/os88++4DLy/n49NnPflYfffTROgzDsntfx0usmidyuRybNm1i+fLlxccsy2L58uVs2LBhCrdsfG3dupX29vYR+1lfX8+yZcuK+7lhwwYaGhpYunRpcZ3ly5djWRYbN26c9G0uRXd3NzA0W+mmTZvwPG/E/h533HHMnz9/xP6edNJJtLS0FNdZsWIFPT09PP3005O49eaCIODmm2+mv7+ftra2stzPNWvWsHLlyhH7BOX5nr7wwgvMmTOHo446itWrV7Nt2zag/Pb1N7/5DUuXLuWDH/wgzc3NnHrqqfz0pz8tLi/X41Mul+Omm27iE5/4BEqpsntfx0usgoZdu3YRBMGINwigpaWF9vb2Kdqq8VfYl4PtZ3t7O83NzSOWO45DY2PjtH4twjDkc5/7HGeddRYnnngiEO1LIpGgoaFhxLr77u9or0dh2XSyefNmampqSCaTfOpTn+LWW29l0aJFZbefN998M4899hhXX331fsvKbV+XLVvGDTfcwF133cV1113H1q1beetb30pvb2/Z7evLL7/Mddddx7HHHsvdd9/NZZddxmc+8xluvPFGoHyPT7fddhtdXV187GMfA8rvMzxeYjk1toivNWvW8NRTT/HAAw9M9aZMmDe/+c088cQTdHd385//+Z9cfPHFrF+/fqo3a1xt376dz372s6xdu5ZUKjXVmzPhLrjgguLvixcvZtmyZSxYsIBf/epXpNPpKdyy8ReGIUuXLuXv//7vATj11FN56qmn+PGPf8zFF188xVs3cX72s59xwQUXMGfOnKnelGktVpmGmTNnYtv2fr1XOzo6aG1tnaKtGn+FfTnYfra2ttLZ2Tliue/77NmzZ9q+Fpdffjl33HEH9913H3Pnzi0+3traSi6Xo6ura8T6++7vaK9HYdl0kkgkOOaYY1iyZAlXX301J598Mv/4j/9YVvu5adMmOjs7Oe2003AcB8dxWL9+Pddccw2O49DS0lI2+zqahoYG3vSmN/Hiiy+W1fsKMHv2bBYtWjTiseOPP77YHFOOx6dXX32V3/3ud/zVX/1V8bFye1/HS6yChkQiwZIlS1i3bl3xsTAMWbduHW1tbVO4ZeNr4cKFtLa2jtjPnp4eNm7cWNzPtrY2urq62LRpU3Gde++9lzAMWbZs2aRv88Forbn88su59dZbuffee1m4cOGI5UuWLMF13RH7u2XLFrZt2zZifzdv3jziQLR27Vrq6ur2O8BNN2EYks1my2o/zzvvPDZv3swTTzxRvC1dupTVq1cXfy+XfR1NX18fL730ErNnzy6r9xXgrLPO2m9I9PPPP8+CBQuA8js+AVx//fU0NzezcuXK4mPl9r6Om6nuiVmqm2++WSeTSX3DDTfoZ555Rl966aW6oaFhRO/VOOjt7dWPP/64fvzxxzWgv//97+vHH39cv/rqq1rraEhTQ0OD/vWvf62ffPJJ/d73vnfUIU2nnnqq3rhxo37ggQf0scceO+2GNGmt9WWXXabr6+v173//+xHDmwYGBorrfOpTn9Lz58/X9957r3700Ud1W1ubbmtrKy4vDG06//zz9RNPPKHvuusuPWvWrGk3tOmrX/2qXr9+vd66dat+8skn9Ve/+lWtlNL33HOP1rp89nM0w0dPaF1e+/qFL3xB//73v9dbt27Vf/zjH/Xy5cv1zJkzdWdnp9a6vPb14Ycf1o7j6O985zv6hRde0D//+c91VVWVvummm4rrlNPxKQgCPX/+fP2Vr3xlv2Xl9L6Ol9gFDVpr/U//9E96/vz5OpFI6DPOOEM/9NBDU71JJbvvvvs0sN/t4osv1lpHw5q+/vWv65aWFp1MJvV5552nt2zZMuJv7N69W3/4wx/WNTU1uq6uTn/84x/Xvb29U7A3BzfafgL6+uuvL64zODio//qv/1rPmDFDV1VV6fe///16x44dI/7OK6+8oi+44AKdTqf1zJkz9Re+8AXted4k783BfeITn9ALFizQiURCz5o1S5933nnFgEHr8tnP0ewbNJTTvl500UV69uzZOpFI6COOOEJfdNFFI+oWlNO+aq317bffrk888USdTCb1cccdp3/yk5+MWF5Ox6e7775bA/ttv9bl976OB6W11lOS4hBCCCFErMSqT4MQQgghpo4EDUIIIYQwIkGDEEIIIYxI0CCEEEIIIxI0CCGEEMKIBA1CCCGEMCJBgxBCCCGMSNAghBBCCCMSNAghhBDCiAQNQgghhDAiQYMQQgghjPx/r7ULOcvnYZoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "nombre_imagen = \"EX2_pista_6.png\"\n", "\n", "# Cargamos la imagen en una variable\n", "\n", "img = cv2.imread(nombre_imagen)\n", "\n", "# Mostramos la imagen\n", "plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))" ] }, { "cell_type": "code", "execution_count": null, "id": "4cf4ada486d52ffd", "metadata": { "ExecuteTime": { "end_time": "2023-10-07T09:33:51.682495Z", "start_time": "2023-10-07T09:33:51.278436Z" }, "colab": { "base_uri": "https://localhost:8080/", "height": 918, "referenced_widgets": [ "e948b47086ff4afbb3fd4e2e90c45d41", "ab6ae4dab1ae4834bc518dce38d736a9", "d788dbd1c6bd46f094467e1aa45914cd", "821b8bd769e54de7accd3f7f52c98cc4", "a078726e9e1f41dbaea45bd9cade4600", "55977e7f38b94abfa0054b4307064fea", "97a4751482694d428a4e7b439e4cf6f1", "d831d141ac66420b927293dc02c72cf8", "99f41fbd18684876835b48cedccf987d", "ef5deb6346cd4f57a35ec04ba53c98e3", "44ecb25e7d1142cb9b4f63740300227f", "f04b2d9202fd4091b35454cddccd8817", "09348864eb7a42bdab53c6cf8d67cbfc" ] }, "id": "4cf4ada486d52ffd", "outputId": "e0b3895d-9bd9-40a2-db25-455a67598419" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Random seed set to: 2452170\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e948b47086ff4afbb3fd4e2e90c45d41", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "821b8bd769e54de7accd3f7f52c98cc4", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "97a4751482694d428a4e7b439e4cf6f1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HTML(value='')" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "ef5deb6346cd4f57a35ec04ba53c98e3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Image(value=b'\\x89PNG\\r\\n\\x1a\\n\\x00\\x00\\x00\\rIHDR\\x00\\x00\\x00d\\x00\\x00\\x002\\x08\\x06\\x00\\x00\\x00\\xaa5~\\xbe\\x00\\…" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f04b2d9202fd4091b35454cddccd8817", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Image(value=b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xdb\\x00C\\x00\\x08\\x06\\x0…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "world = bots.World(220, 180, boundary_wall_color=\"yellow\", ground_image_filename=nombre_imagen)\n", "\n", "robot = bots.Scribbler(x=36, y=90, a=90)\n", "robot.add_device(bots.GroundCamera(width=100, height=50))\n", "\n", "world.add_robot(robot)\n", "\n", "robot['ground-camera'].watch()\n", "world.watch()" ] }, { "cell_type": "markdown", "id": "96d25fe7765d9fbf", "metadata": { "collapsed": false, "id": "96d25fe7765d9fbf" }, "source": [ "## Generación de valores de movimiento y rotación\n", "\n", "En la práctica anterior controlamos directamente el robot usando `robot.move(translate, rotate)`. Ahora queremos mover el robot y guardar los movimientos en un archivo. Para hacer esto, crearemos una función llamada `determine_move` que tomará los valores actuales de los sensores y devuelva una tupla que represente las cantidades de traslación y rotación apropiadas para esta situación, junto el valor central de la carretera.\n", "Esta función será llamada por la función `move` que controla el robot." ] }, { "cell_type": "code", "execution_count": null, "id": "5b4d619b4d432fbf", "metadata": { "ExecuteTime": { "end_time": "2023-10-07T09:44:38.873263Z", "start_time": "2023-10-07T09:44:38.834975Z" }, "id": "5b4d619b4d432fbf" }, "outputs": [], "source": [ "def determine_move(robot):\n", " \"\"\"\n", " Determina el movimiento del robot según las lecturas de sus sensores.\n", " Devuelva una tupla con la velocidad de traslación, la velocidad de rotación y el valor central de la carretera.\n", " El robot debe permanecer dentro de la pista durante el tiempo que dure la simulación.\n", " \"\"\"\n", "\n", " cam = robot['ground-camera']\n", " image = cam.get_image()\n", "\n", " # Convirtemos la imagen en una matriz numpy para trabajar en OpenCV\n", "\n", " # Nos quedamos con la parte superior de la imagen\n", "\n", " # convertir a escala de grises\n", "\n", " # Aplicamos un filtro de desenfoque gaussiano\n", "\n", " # Binarizamos la imagen (treshold)\n", "\n", " # Buscamos los contornos\n", "\n", " # Dibujamos los contornos\n", "\n", "\n", " # Definir las variables que se devolveran\n", "\n", "\n", " # Calculamos el centro de masas del borde más grande\n", "\n", " # En m tenemos los momentos de la imagen\n", "\n", " # Si el área es diferente de 0, calculamos el centro de masa\n", "\n", "\n", " # Dibujamos el centro de la masa\n", "\n", "\n", " # Movemos el robot\n", "\n", " return movimiento, rotacion, centro" ] }, { "cell_type": "markdown", "id": "a316ffa5ea970e60", "metadata": { "collapsed": false, "id": "a316ffa5ea970e60" }, "source": [ "#### Probando la función `determine_move`\n", "\n", "Necesitamos probar la función `determine_move` Y verifique que todavía controla correctamente el robot para seguir la pared. Para hacer esto, llamaremos a la función `determine_move` en un bucle y llamaremos `robot.move` con los valores de movimiento devueltos por la función `determine_move`. Esto debería hacer que el robot pase por el circuito sin ningún problema." ] }, { "cell_type": "code", "execution_count": null, "id": "1b4f3533adbf0d4c", "metadata": { "ExecuteTime": { "end_time": "2023-10-07T09:44:39.885699Z", "start_time": "2023-10-07T09:44:39.854984Z" }, "id": "1b4f3533adbf0d4c" }, "outputs": [], "source": [ "def controlador_cam(robot):\n", " translate, rotate, centro = determine_move(robot)\n", " robot.move(translate, rotate)" ] }, { "cell_type": "code", "execution_count": null, "id": "5eccbb836204298d", "metadata": { "ExecuteTime": { "end_time": "2023-10-07T09:44:58.212836Z", "start_time": "2023-10-07T09:44:41.216981Z" }, "colab": { "base_uri": "https://localhost:8080/", "height": 67, "referenced_widgets": [ "3bfad7016d2c482cb79ee51b31c79298", "0e09d6f0c4394948b62a8d9740b5aa03", "5d84638e330d4bd8b4c98f0fac6ab748", "fd75a35402ed477e889550e1979de0a2", "fa3cf9e220d64b97b91c5eecc3790604", "f4529080501d4cd89cc6af7bb68dddcd", "31ea1ef4f05f44908040afe1a1039ed1", "2ef636b55dd041e397b8ab5dd241a210", "02103cc634b94966aac4e1ecc23e5dc8", "b782606ac1a64eb5a7ab76083a9f263a", "4e3e4227cef84278aa8fdfd03903e002" ] }, "id": "5eccbb836204298d", "outputId": "1b401353-bdd3-4fb4-b44e-16b59d913859" }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "3bfad7016d2c482cb79ee51b31c79298", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 0%| | 0/300 [00:00