1 00:00:00,560 --> 00:00:03,660 Hola a todos, mi nombre es Lucía Paula Peña Filorbea 2 00:00:03,660 --> 00:00:07,139 y a continuación voy a hacer la aplicación de mi ITFG 3 00:00:07,139 --> 00:00:12,060 empezando por un punto principal, que es el nombre de mi aplicación, 4 00:00:12,500 --> 00:00:13,619 se llama PowerTrack 5 00:00:13,619 --> 00:00:18,559 y es una aplicación móvil inteligente para la gestión y el seguimiento de entrenamientos personales. 6 00:00:19,500 --> 00:00:22,179 Yo decidí integrar una inteligencia artificial extra 7 00:00:22,179 --> 00:00:27,379 para personalizar las rutinas y un plan nutricional para distinto tipo de usuario. 8 00:00:27,379 --> 00:00:56,380 La principal idea de por qué surge este proyecto y por qué he decidido hacerlo es porque yo soy una persona bastante activa físicamente, me gusta el deporte y como actualmente estoy yendo bastante al gimnasio y llevo bastante el progreso y la constancia metidas ahí en la cabeza, pues decidí por qué no voy a hacer un tipo de aplicación donde actualmente se han detectado que las aplicaciones que hay en el mercado ofrecen rutinas genéricas, 9 00:00:57,380 --> 00:01:05,239 descomplejas y una separación entre un entrenamiento y una nutrición que yo creo que especialmente 10 00:01:05,239 --> 00:01:10,340 a los usuarios mayores les puede dificultar un seguimiento real de progreso o incluso 11 00:01:10,340 --> 00:01:16,700 no tan solo porque sean mayores sino también a los jóvenes, que tengamos donde también 12 00:01:16,700 --> 00:01:22,260 apuntar un seguimiento y además un consejo de nutrición que no nos hace falta pagar 13 00:01:22,260 --> 00:01:30,640 externamente a otra persona para que nos dé un plan nutricional, pues también ayuda bastante. 14 00:01:31,780 --> 00:01:39,000 Está más pensado para gente joven que no tiene tiempo para prepararse muy bien sus cosas, 15 00:01:39,000 --> 00:01:41,260 quiere ir a lo rápido, etc. 16 00:01:42,219 --> 00:01:48,459 Bueno, pues ahora a continuación voy a hacer una breve explicación sobre la arquitectura 17 00:01:48,459 --> 00:01:50,159 y tecnologías de esta aplicación. 18 00:01:51,319 --> 00:01:55,719 Y bueno, en primer lugar, la aplicación está desarrollada con Kotlin, 19 00:01:56,280 --> 00:02:01,319 con Compose, que es la interfaz con la que interactúa el usuario. 20 00:02:02,459 --> 00:02:06,560 En segundo lugar, como se puede ver, el backend principal está desarrollado 21 00:02:06,560 --> 00:02:10,719 con Spring Boot en Java, que gestiona toda la lógica de negocio, 22 00:02:10,719 --> 00:02:15,360 seguridad, mediante JWT, la base de datos MySQL, 23 00:02:16,180 --> 00:02:18,199 que también la implementé con FlowWave. 24 00:02:18,460 --> 00:02:20,180 ¿Por qué decidí hacerlo con Flyway? 25 00:02:21,599 --> 00:02:27,520 Decidí utilizarlo porque tuve bastantes problemas con el tema de los duplicados en la base de datos 26 00:02:27,520 --> 00:02:33,680 y me fijé que era un error que la verdad, mediante que estuve investigando 27 00:02:33,680 --> 00:02:38,120 y también gracias a unos compañeros de la empresa en la que estoy de práctica, 28 00:02:38,680 --> 00:02:44,039 me dieron un poco de feedback y actualmente en bastantes empresas se utiliza Flyway 29 00:02:44,039 --> 00:02:49,960 y la verdad es que tampoco es muy difícil de utilizar ni de implementar, es bastante sencillo 30 00:02:49,960 --> 00:02:55,000 y dije, es la mejor ruta para evitar tampoco que me surjan más problemas 31 00:02:55,000 --> 00:03:00,819 y evitar lo que surjan también en la hora de probar esta aplicación y decidí irme por ello. 32 00:03:01,919 --> 00:03:09,259 Bueno, ahora tenemos la parte del microservicio de inteligencia artificial desarrollado en Python con FastAPI 33 00:03:09,259 --> 00:03:15,819 que tiene un endpoint REST que el backend lo llama para obtener la recomendación personalizada del usuario. 34 00:03:17,539 --> 00:03:27,960 A continuación vamos a probar la aplicación, vamos a ver todas sus funcionalidades y las pantallas que he implementado. 35 00:03:28,879 --> 00:03:35,800 Como podemos ver la pantalla login para que el usuario ingrese su cuenta, también tenemos la opción de registrarse. 36 00:03:35,800 --> 00:03:39,060 vamos a hacerlo de principio, vamos a registrarnos 37 00:03:39,060 --> 00:03:40,759 vamos a poner un nombre 38 00:03:40,759 --> 00:03:42,340 Pepe, un email 39 00:03:42,340 --> 00:03:45,039 podemos probar también errores 40 00:03:45,039 --> 00:03:47,139 vamos a hacerlo sin ningún dominio 41 00:03:47,139 --> 00:03:48,719 vamos a poner Pepe otra vez 42 00:03:48,719 --> 00:03:50,919 vamos a poner yo que sé 43 00:03:50,919 --> 00:03:52,879 Pepe y vamos a 44 00:03:52,879 --> 00:03:54,560 hacer contraseñas para ver si 45 00:03:54,560 --> 00:03:56,840 bueno, al principio 46 00:03:56,840 --> 00:03:58,740 nos dice que Pepe necesita 47 00:03:58,740 --> 00:04:00,120 si o si un email 48 00:04:00,120 --> 00:04:02,199 vamos a poner por ejemplo 49 00:04:02,199 --> 00:04:04,120 gmail.com 50 00:04:04,120 --> 00:04:18,180 las contraseñas no son correctas, vamos a ver si salta un error, ahí estamos, podemos ver que también se puede ver la contraseña aquí, 51 00:04:18,180 --> 00:04:31,540 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, vale, nos registramos, vale, volvemos a la aplicación, ya como nos hemos registrado 52 00:04:31,540 --> 00:04:44,509 correctamente, ingresamos el usuario, vamos a ver si la contraseña, bueno, ahí estamos, vale, entramos a la pantalla 53 00:04:44,509 --> 00:04:51,389 de formulario, donde aquí la IA que he entrenado yo va a conocer al usuario básicamente su 54 00:04:51,389 --> 00:04:58,910 objetivo, qué tipo de género tiene, cuántos años, unas preguntas varias para conocer 55 00:04:58,910 --> 00:05:05,689 al usuario. Vamos a decir que somos mujer, tenemos entre 16 y 29 años, nuestra prioridad 56 00:05:05,689 --> 00:05:12,170 es ganar músculo, vamos a poner que lleva más de dos años entrenando y que tenemos 57 00:05:12,170 --> 00:05:17,490 de entrenamiento cinco días a la semana. No tengo ninguna lesión y vamos a hacer un 58 00:05:17,490 --> 00:05:26,870 mixto. Vamos a poner que peso 65 kilos. Aquí entramos a la pantalla de espera donde la 59 00:05:26,870 --> 00:05:33,290 IA está pensando el modelo del usuario y a continuación tenemos el para ti. Este para 60 00:05:33,290 --> 00:05:42,110 ti está diseñado para que el usuario básicamente sepa un plan de entrenamiento, otro plan 61 00:05:42,110 --> 00:05:49,329 nutricional que está recomendando para ese tipo de usuario. Pues aquí tenemos un breve 62 00:05:49,329 --> 00:05:56,209 texto donde la IA depende del usuario, le recomienda una cosa u otra, también unos 63 00:05:56,209 --> 00:06:02,470 consejos nutricionales, tenemos aquí el volumen, bueno, el tipo de entrenamiento que nos ha 64 00:06:02,470 --> 00:06:11,589 recomendado la IA y también el valor nutricional que tenemos que tener. Vale, pues vamos a 65 00:06:11,589 --> 00:06:17,829 entrar en el detalle de entrenamiento. Como vemos la IA asigna un volumen avanzado al 66 00:06:17,829 --> 00:06:24,850 usuario y aquí tenemos la lista de ejercicios, donde están repartidos por distintas categorías 67 00:06:24,850 --> 00:06:31,709 de músculo. Tenemos aquí la serie, las repeticiones y el descanso recomendado y también tenemos 68 00:06:31,709 --> 00:06:38,529 un GIF para ver cómo se hace el ejercicio y no tener dudas sobre ello. Aquí tenemos 69 00:06:38,529 --> 00:06:49,829 bastantes ejercicios con distinto tipo. Bueno, aquí tenemos el plan nutricional, si pinchamos 70 00:06:49,829 --> 00:06:55,990 entramos al detalle, donde podemos ver aquí lo que nos ha recomendado la IA. En este caso 71 00:06:55,990 --> 00:07:02,790 tenemos el super hábit avanzado, donde nos calcula las calorías diarias y la proteína, 72 00:07:02,790 --> 00:07:11,310 los carbohidratos y las grasas. Tenemos aquí repartidas las comidas, tanto como desayuno, almuerzo, cena y merienda. 73 00:07:12,310 --> 00:07:21,550 En el almuerzo pues tenemos distintos tipos de comidas a comer, si no queremos arroz con pollo, pues también tenemos otro tipo de comida. 74 00:07:21,550 --> 00:07:29,769 Como podemos ver también aparecen las calorías junto con las grasas y la proteína 75 00:07:29,769 --> 00:07:34,649 Y este sería el detalle de comidas 76 00:07:34,649 --> 00:07:41,209 Vamos a pasar a otra funcionalidad de la aplicación donde tenemos el calendario 77 00:07:41,209 --> 00:07:47,790 Aquí podemos asignar en distinto día el tipo de entrenamiento que hemos tenido 78 00:07:47,790 --> 00:07:51,509 Por ejemplo, he entrenado el 1 de mayo pero se me olvidó apuntarlo 79 00:07:51,509 --> 00:07:53,990 Asignamos el 1 de mayo, le damos a añadir 80 00:07:53,990 --> 00:07:56,610 Tenemos aquí el registrar entrenamiento 81 00:07:56,610 --> 00:07:57,930 Donde podemos registrar 82 00:07:57,930 --> 00:07:59,310 Distinto tipo de ejercicio 83 00:07:59,310 --> 00:08:02,009 Vamos a poner que he hecho prensa de piernas 84 00:08:02,009 --> 00:08:03,430 Y he puesto 85 00:08:03,430 --> 00:08:05,290 100 kilos, venga va 86 00:08:05,290 --> 00:08:07,790 Añadimos otro ejercicio más 87 00:08:07,790 --> 00:08:10,230 Hemos hecho también remón polea baja 88 00:08:10,230 --> 00:08:12,170 Y le he puesto 89 00:08:12,170 --> 00:08:13,750 50 kilos 90 00:08:13,750 --> 00:08:14,850 Hoy estoy fuerte 91 00:08:14,850 --> 00:08:18,449 Ponemos aquí observaciones 92 00:08:18,449 --> 00:08:28,269 mucho peso. Por ejemplo, le damos a guardar entrenamiento, vemos que se ha guardado correctamente, 93 00:08:28,269 --> 00:08:36,509 vamos al calendario y aquí nos sale el día de entrenamiento con los ejercicios que hemos 94 00:08:36,509 --> 00:08:44,570 hecho, los pesos, las repeticiones y una observación. Por ejemplo, vamos a añadir este día. Bueno, 95 00:08:44,570 --> 00:09:05,309 Aquí también tenemos el contador de los días entrenados, vamos a decir que hoy hemos entrenado dominadas, con nada de peso, jalón al pecho, con 60 kilos y ¡ay! que me he equivocado, que este ejercicio no lo he hecho, pues nada, lo borro y ya está. 96 00:09:05,309 --> 00:09:28,669 No quiero poner ninguna observación, le damos a guardar, volvemos al calendario y vemos que también se ha guardado el día de hoy, los días entrenados, tenemos aquí otro apartado de registrar para ser más fácil y llevadero, si no queremos darle aquí, que es un clip, pero tenemos también aquí un apartado. 97 00:09:28,669 --> 00:09:38,909 Y por último tenemos el apartado de perfil, donde el usuario puede agregar una foto de su galería, en este caso como estoy en el emulador no tengo ninguna foto en la galería. 98 00:09:40,090 --> 00:09:45,230 Y también puede ver su nombre de usuario, su email y la rutina sin nada. 99 00:09:46,230 --> 00:09:55,669 Le damos a cerrar sesión y bueno, pues si queremos iniciar sesión otra vez, iniciamos y automáticamente se pone en el para ti. 100 00:09:55,669 --> 00:10:03,750 Vale, pues a continuación voy a explicar el modelo de la inteligencia artificial que entrené 101 00:10:03,750 --> 00:10:09,669 Voy a mostrar un poquito el código hecho con Python, el modelo de Random Forest 102 00:10:09,669 --> 00:10:16,269 Cómo fue entrenado con un dataset de 5.000 registros y vamos allá 103 00:10:16,269 --> 00:10:24,110 El problema que resuelve esta IA es que la mayoría de las aplicaciones fitness dan la misma rutina a todo el mundo 104 00:10:24,110 --> 00:10:34,990 Entonces PowerTrack lo que hace es que recibe el perfil básico del usuario y lo recomienda automáticamente a una rutina y dieta más adecuada para ese tipo de usuario. 105 00:10:35,490 --> 00:10:45,889 Como vemos aquí tenemos un modelo que recibe ocho variables y de las cuales se categoriza al usuario. 106 00:10:46,870 --> 00:10:56,750 Tenemos también 8 recomendaciones, de las cuales también dependiendo del objetivo del usuario y del estudio que hace la IA en ese usuario se recomienda. 107 00:10:57,470 --> 00:11:03,409 Bueno, vamos a una pregunta que os podéis preguntar y es cómo se genera el dataset. 108 00:11:03,409 --> 00:11:09,870 Como no tenía datos reales de usuarios, diseñé reglas expertas que imitan un entrenador profesional, por así decirlo. 109 00:11:09,870 --> 00:11:24,149 Por ejemplo, si el usuario tiene una lesión, siempre recibe el perfil 7. Si el usuario tiene más de 50 años y quiere definición, perfil 3. Esas reglas se generaron con 5.000 registros sintéticos. 110 00:11:24,149 --> 00:11:41,149 El punto más fuerte e importante a mencionar yo creo es que se añadió un 4% de ruido aleatorio del dataset, es decir, esto hace que el modelo no memorice las reglas sino que aprenda patrones generalizados. 111 00:11:41,149 --> 00:11:55,029 ¿Vale? Pues aquí tenemos el flujo, el usuario va a mandar una petición post donde el usuario va a ver el formulario, va a tener que rellenarlo y se lo manda directamente a Spring, al backend. 112 00:11:55,710 --> 00:12:05,049 Spring lo que hace es llamar al microservicio hecho desde FastAPI y recibe la recomendación, la guarda en la base de datos y se la devuelve al usuario otra vez. 113 00:12:05,049 --> 00:12:12,690 básicamente es llamar a un backend pero externo a Spring Boot que es el principal que tenemos 114 00:12:12,690 --> 00:12:22,409 aquí lo importante de todo esto es que el dataset de 5000 registros está generado con reglas científicas basadas en estudios 115 00:12:22,409 --> 00:12:34,529 es decir en organismos como la ACSM y la INSS que básicamente por eso el modelo alcanza una precisión del 96.10% 116 00:12:34,529 --> 00:12:41,649 y que la variable más importante resultó ser la lesión física con un 50% de importancia. 117 00:12:42,710 --> 00:12:48,950 Y por último me gustaría comentar unas mejoras a futuro que me hubiese gustado implementar, 118 00:12:49,029 --> 00:12:54,590 por ejemplo como la integración estable con Gemini para generar un contenido dinámico 119 00:12:54,590 --> 00:13:02,330 y una incorporación de peso exacto del usuario como una variable continua del modelo de la IA que he entrenado 120 00:13:02,330 --> 00:13:07,429 para que no sea todo cerrado a 5.000 registros y 8 recomendaciones. 121 00:13:08,110 --> 00:13:13,129 También me hubiese gustado implementar unas estadísticas de progreso a lo largo del tiempo 122 00:13:13,129 --> 00:13:21,909 para que el usuario vea cuál ha sido su progreso exacto en diferente ciclo de su vida, por ejemplo. 123 00:13:23,289 --> 00:13:25,570 Y esa sería mi aplicación de TFG.