scieee AI-readable full text Open interactive document viewer

Plataforma para el análisis de la densidad de carros de la compra en un supermercado

Caballero Sandoval, Javier

Abstract

Trabajo de Fin de Grado. Grado en Ingeniería Informática. Curso académico 2022-2023.

Full text

Memoria del Proyecto PLATAFORMA PARA EL ANÁLISIS DE LA DENSIDAD DE CARROS DE LA COMPRA EN UN SUPERMERCADO Trabajo de Fin de Grado INGENIERÍA INFORMÁTICA Julio 2023 AUTOR Javier Caballero Sandoval TUTORES Héctor Sánchez San Blas Gabriel Villarrubia González Certificado de los Tutores D. Héctor Sánchez San Blas y D. Gabriel Villarrubia González, profesores del Departamento de Informática y Automática de la Universidad de Salamanca. HACEN CONSTAR: Que el trabajo titulado “Plataforma para el análisis de la densidad de carros de la compra en un supermercado” ha sido realizado por D. Javier Caballero Sandoval, con el número de documento ****7295S y constituye la memoria del trabajo realizado para la superación de la asignatura Trabajo Fin de Grado de la Titulación Grado de Ingeniería Informática en esta Universidad. Y para que así conste a todos los efectos oportunos. En Salamanca, a 28 de junio de 2023 D. Héctor Sánchez San Blas D. Gabriel Villarrubia Sánchez VILLARRUBIA GONZALEZ GABRIEL - 71932845T Firmado digitalmente por VILLARRUBIA GONZALEZ GABRIEL - 71932845T Fecha: 2023.07.05 12:02:50 +02'00' SANCHEZ SAN BLAS HECTOR - 70901148Z Firmado digitalmente por SANCHEZ SAN BLAS HECTOR - 70901148Z Fecha: 2023.07.05 12:24:38 +02'00' Resumen En la actualidad, los supermercados ofrecen una gran oferta de productos y disponibilidad de horarios. Esto provoca, como consecuencia, el aumento de personas que realizan la compra asiduamente en un supermercado. Por ello, la organización y control de un supermercado es más complejo en la actualidad. Para mejorar diversos factores como la eficiencia, eficacia, experiencia de los clientes o seguridad es necesario recoger información de diferentes aspectos relativos al flujo de las clientes a lo largo del supermercado, entre ellos los carros de la compra. El principal objetivo de este proyecto es el diseño y desarrollo de un sistema de detección y trackeo de los carros de la compra a través de diferentes zonas de un supermercado sin la necesidad de incluir un dispositivo en cada uno de los carros. Además, se desarrolla una aplicación web que permite observar de manera gráfica los datos recogidos acerca de los carros permitiendo su posterior tratamiento para mejorar los diferentes aspectos del supermercado, así como la visualización en tiempo real de las cámaras instaladas para tener la capacidad de observar si se ha producido una incidencia de manera rápida. Por otra parte, la aplicación permite la personalización para cada uno de los supermercados que adopte el sistema ya que posee la capacidad de personalizar las zonas del supermercado, las cámaras instaladas y los avisos deseados de detectar. Palabras claves: detección de objetos, carro de la compra, trackeo, YOLO, compra inteligente. Summary Nowadays, supermarkets offer a wide range of products and opening hours. As a result, more and more people shop regularly in supermarkets. The organisation and control of a supermarket is therefore more complex nowadays. In order to improve various factors such as efficiency, effectiveness, customer experience or safety, it is necessary to collect information on different aspects of customer flow throughout the supermarket, including shopping trolleys. The main objective of this project is the design and development of a system for detecting and tracking shopping trolleys through different areas of a supermarket without the need to include a device in each of the trolleys. In addition, a web application is developed that allows the data collected about the trolleys to be observed graphically, allowing its subsequent processing to improve the different aspects of the supermarket, as well as the real-time visualisation of the cameras installed to be able to observe if an incident has occurred quickly. Moreover, the application allows customisation for each of the supermarkets that adopt the system as it has the ability to customise the areas of the supermarket, the cameras installed and the desired warnings to be detected. Keywords: object detection, shopping trolley, tracking, YOLO, smart shopping. Tabla de Contenido 1. Introducción ......................................................................................................................... 1 2. Estudio del Estado del Arte ................................................................................................ 3 2.1. Investigación .................................................................................................................. 3 2.2. Soluciones Comerciales ................................................................................................ 3 3. Objetivos .............................................................................................................................. 6 3.1. Objetivos del Sistema .................................................................................................... 6 3.2. Objetivos Personales..................................................................................................... 6 4. Conceptos Teóricos ............................................................................................................ 8 4.1. Detección de Objetos .................................................................................................... 8 4.2. Trackeo de Objetos ....................................................................................................... 8 4.3. Rest ............................................................................................................................... 8 5. Técnicas y Herramientas .................................................................................................... 9 5.1. Tracker .......................................................................................................................... 9 5.1.1. YOLO v5 ................................................................................................................ 9 5.1.2. Roboflow ................................................................................................................ 9 5.1.3. Google Colab ....................................................................................................... 10 5.1.4. Python.................................................................................................................. 10 5.1.5. Flask .................................................................................................................... 10 5.1.6. OpenCV ............................................................................................................... 10 5.1.7. NumPy ................................................................................................................. 10 5.1.8. Dlib....................................................................................................................... 11 5.2. Aplicación Web ............................................................................................................ 11 5.2.1. JavaScript ............................................................................................................ 11 5.2.2. HTML ................................................................................................................... 11 5.2.3. CSS ..................................................................................................................... 11 5.2.4. Vue.js ................................................................................................................... 11 5.2.5. Vuetify .................................................................................................................. 12 5.2.6. PrimeVue ............................................................................................................. 12 5.2.7. Axios .................................................................................................................... 12 5.2.8. Vue-chartjs .......................................................................................................... 12 5.3. Servidor ....................................................................................................................... 12 5.3.1. NodeJS ................................................................................................................ 12 5.3.2. NPM ..................................................................................................................... 13 5.3.3. Express ................................................................................................................ 13 5.3.4. MySQL ................................................................................................................. 13 5.3.5. Sequelize ............................................................................................................. 13 5.4. Editor de Texto ............................................................................................................ 13 5.4.1. Visual Studio Code .............................................................................................. 13 5.5. Herramientas Case...................................................................................................... 14 5.5.1. Microsoft Project .................................................................................................. 14 5.5.2. Visual Paradigm .................................................................................................. 14 5.5.3. EZestimate .......................................................................................................... 14 5.6. Herramientas de Generación de Documentación ....................................................... 14 5.6.1. Sphinx .................................................................................................................. 14 5.6.2. JSDoc .................................................................................................................. 14 5.6.3. Vue Styleguidist ................................................................................................... 14 6. Aspectos Relevantes del Desarrollo ............................................................................... 15 6.1. Marco de Trabajo ........................................................................................................ 15 6.2. Estimación de la Duración del Proyecto...................................................................... 16 6.3. Planificación Temporal ................................................................................................ 18 6.4. Especificación de Requisitos ....................................................................................... 19 6.4.1. Participantes ........................................................................................................ 19 6.4.2. Objetivos del Sistema .......................................................................................... 19 6.4.3. Requisitos de Información ................................................................................... 20 6.4.4. Requisitos Funcionales ....................................................................................... 21 6.4.5. Requisitos No Funcionales .................................................................................. 23 6.5. Análisis de Requisitos ................................................................................................. 24 6.5.1. Modelo de Dominio .............................................................................................. 24 6.5.2. Realización de Casos de Uso Análisis ................................................................ 25 6.5.3. Clases de Análisis y Propuesta de Arquitectura ................................................. 25 6.6. Diseño del Sistema...................................................................................................... 26 6.6.1. Patrones Arquitectónicos y de Diseño ................................................................ 26 6.6.2. Patrón Modelo -VistaModelo de Vista (MVVM) ................................................ 26 6.6.3. Patrón DAO ......................................................................................................... 27 6.6.4. Subsistemas de Diseño ....................................................................................... 27 6.6.5. Clases de Diseño ................................................................................................ 28 6.6.6. Realización de Casos de Uso Diseño ................................................................. 32 6.6.7. Diseño de la Base de Datos ................................................................................ 34 6.6.8. Modelo de Despliegue ......................................................................................... 34 6.7. Implementación ........................................................................................................... 35 6.8. Pruebas ....................................................................................................................... 35 6.9. Funcionalidad del Sistema .......................................................................................... 36 6.9.1. Usuario No Logueado.......................................................................................... 36 6.9.2. Usuario ................................................................................................................ 39 6.9.3. Administrador ...................................................................................................... 44 7. Resultados Entrenamiento Modelo ................................................................................. 53 8. Limitaciones del Sistema ................................................................................................. 55 9. Conclusiones y Líneas de Trabajo Futuras .................................................................... 56 9.1. Conclusiones ............................................................................................................... 56 9.2. Líneas de Trabajo Futuras .......................................................................................... 56 10. Bibliografía ......................................................................................................................... 57 Memoria del Proyecto 4 El uso del análisis de los datos permite conocer el estado del supermercado en tiempo real lo que ayuda a tomar decisiones empresariales respecto al stock, promociones o precios de los productos permitiendo una mayor ganancia económica para el supermercado y mejora en la experiencia del cliente. Existen numerosos ejemplos de softwares que implementan la funcionalidad de Business Intelelligence que permiten la recogida y el tratamiento de los datos obtenidos en un supermercado. Un ejemplo es la aplicación, enfocada en los supermercados, desarrollada por Distrito K, además de proporcionar funcionalidad relativa a la gestión de un supermercado como la compra y venta de productos, gestión de fidelización del cliente o gestión de tesorería aporta la funcionalidad de Business Intelelligence que permite visualizar los datos recogidos del supermercado para el posterior análisis [6]. Figura 1: Distrito K [6] Otro ejemplo es el software desarrollado por Wyn Enterprise para el sector retail. De la misma manera que el software mencionado anteriormente proporciona diferentes servicios para gestionar las diferentes secciones que forman un supermercado y adicionalmente una funcionalidad para la visualización y análisis de los datos recogidos [7]. Memoria del Proyecto 5 Figura 2: Wyn Enterprise [7] Memoria del Proyecto 6 3. Objetivos En esta sección se definen los objetivos que debe tener el sistema a desarrollar en el Trabajo Fin de Grado. Se diferencian los objetivos del sistema y los personales. 3.1. Objetivos del Sistema El objetivo principal del sistema es la localización y trackeo de carros de la compra a partir de las imágenes proporcionadas por una cámara y posteriormente visualizar los datos recogidos. Los objetivos definidos son: • Gestión de usuarios. El sistema debe permitir crear, modificar, visualizar y eliminar usuarios del sistema. • Gestión de carros. El sistema tiene la capacidad de reconocer carros de la compra a través de imágenes y trackearlos. Además, debe almacenar información acerca de estos. • Gestión de zonas. El sistema debe permitir crear, modificar, visualizar y eliminar zonas del sistema. • Gestión de cámaras. El sistema debe permitir crear, modificar, visualizar y eliminar cámaras del sistema. • Gestión de avisos. El sistema debe permitir crear, modificar, visualizar y eliminar avisos del sistema. Además, debe mostrar los avisos detectados por las cámaras. • Gestión de estadísticas. El sistema debe mostrar diferentes estadísticas sobre los carros para visualizar de manera gráfica distintos comportamientos sobre los carros en el supermercado. 3.2. Objetivos Personales En este apartado se exponen los objetivos personales que se intentan cumplir tras realizar el proyecto y los motivos a realizarlo. Los últimos años, debido al aumento de avances en la inteligencia artificial, tenía curiosidad acerca de este campo, en concreto en la detección de objetos en tiempo real y el Trabajo Fin de Grado era una oportunidad para llevar a cabo un proyecto sobre este tema. El campo de la inteligencia artificial está asociado al avance de la sociedad y personalmente quiero realizar un proyecto de este tema para conocerlo más a fondo para que en el futuro tenga más conocimientos y pueda desarrollar otros sistemas más avanzados para facilitar o ayudar en algunas tareas a la sociedad. Además, este proyecto abarca conocimientos abordados en el grado, pero también ha sido necesaria una amplia investigación para conocer los detalles de los conceptos que desconocía lo que ha generado un gran interés en el campo de la investigación tras no haberla tratada previamente. Memoria del Proyecto 7 Por otro lado, desde el comienzo del proyecto he presentado una gran motivación debido a tener la posibilidad de llevar a cabo la realización de un sistema capaz de ser utilizado en el ámbito comercial en numerosos establecimientos facilitando la capacidad de recopilar información acerca de los carros de la compra. Por último, es un objetivo personal verificar la capacidad personal a la hora de realizar un proyecto completo por primera vez tras realizar numerosos trabajos simples de aprendizaje durante los cursos del grado. Memoria del Proyecto 8 4. Conceptos Teóricos En esta sección se detallan los conceptos teóricos utilizados en el desarrollo del sistema para poder comprenderlo mejor. 4.1. Detección de Objetos La detección de objetos es una técnica de visión computacional que permite la localización de objetos a partir de imágenes o videos. Los algoritmos de detección de objetos utilizan machine learning o deep learning para generar resultados satisfactorios. La detección de objetos se utiliza, en la actualidad, en números ámbitos como por ejemplo la conducción automática o el médico. 4.2. Trackeo de Objetos El trackeo de objetos es una aplicación de la visión computacional en el que, previamente localizado el objeto, se sigue los movimientos de dicho objeto en el espacio observado o en diferentes ángulos de la cámara. El trackeo de objetos permite seguir a diferentes objetos en una imagen. Una de las utilidades en la actualidad es la estimación de la posición en tiempo real para los objetos en movimiento en el campo de la realidad aumentada. 4.3. Rest Es una arquitectura utilizada para crear aplicar aplicaciones web. Aporta una serie de restricciones para crearlas. Tiene las siguientes características: • Se basa en una arquitectura cliente-servidor que se comunica a través del protocolo HTTP. • Comunicación sin estado, el servidor no almacena información del estado del cliente. • Peticiones cacheables, evitando de esta manera repetir conexiones entre cliente y servidor. • Interfaz uniforme entre los diferentes componentes. • Sistema de capas organizadas [8]. Memoria del Proyecto 9 5. Técnicas y Herramientas En esta sección se detallan las técnicas, herramientas, bibliotecas y módulos software utilizados a lo largo del ciclo de vida del proyecto. Se dividen en: • Tracker • Aplicación Web. • Servidor. • Editor de Texto. • Herramientas CASE. 5.1. Tracker 5.1.1. YOLO v5 Es un modelo de la familia de visión computacional YOLO (You Only Look Once). Es un algoritmo que emplea una única red neuronal convolucional (CNN) que permite detectar objetos en tiempo real a partir de imágenes. YOLO es más rápido que otros sistemas de detección de objetos debido a que analiza la imagen entera en vez de píxel a píxel. Esto lo lleva a cabo dividiendo la imagen en un grid y cada sección del grid clasifica y localiza los objetos en ella. Las predicciones se llevan a cabo a través de un algoritmo basado en regresión en vez de en un algoritmo basado en la clasificación, que realizan dos pasos [9]. 5.1.2. Roboflow Es una herramienta utilizada en aplicaciones de visión computacional. Tiene diferentes utilidades como etiquetar los objetos en una imagen, preprocesar imágenes, redimensionar, cambiar orientación, ajustar contraste, entrenar modelos u obtener o publicar datasets [10]. En este proyecto se ha utilizado para etiquetar los carros de la compra en diferentes imágenes, como se muestra en la Figura 3, generando el dataset que permite entrenar al modelo YOLO v5. Figura 3: Roboflow Memoria del Proyecto 10 5.1.3. Google Colab Es un producto de Google que permite escribir y ejecutar código Python en el navegador. Es un servicio de notebooks de Jupyter y permite utilizar recursos computacionales como CPU o GPU de manera gratuita [11]. 5.1.4. Python Python es un lenguaje de programación orientado a objetos de propósito general que tiene numerosas aplicaciones en diferentes aspectos del software. Su semántica dinámica, sus estructuras de datos de alto nivel, su tipado y su vinculación dinámicos lo convierten en uno de los lenguajes más útiles para el desarrollo rápido de aplicaciones. Python es normalmente usado en análisis de datos, visualización de los datos y desarrollo web. Lleva a cabo un papel muy importante en la ciencia de datos debido a que es utilizado para ejecutar cálculos complejos y crear algoritmos de inteligencia artificial. Se emplea Python para estas tareas debido a que es más potente que otros lenguajes de programación porque es un lenguaje de programación interpretado, es decir, las instrucciones se ejecutan sin necesidad de ser compiladas previamente [12]. 5.1.5. Flask Flask es un framework web, un módulo de Python que permite desarrollar aplicaciones web de manera sencilla. Posee un núcleo sencillo y fácil de extender. Flask está basado en la herramienta Werkzeg WSGI y en el motor de plantillas Jinja2 [13]. 5.1.6. OpenCV Es una librería software libre de visión computacional y machine learning. OpenCV fue construida para crear una infraestructura común en el campo de la visión computacional y de esta manera acelerar la percepción de las máquinas en los productos comerciales [14]. 5.1.7. NumPy Es una librería de Python que provee objectos multidimensionales y numerosos métodos para operar de manera eficiente con matrices. Es utilizada principalmente en ciencia de datos debido a su rendimiento [15]. Memoria del Proyecto 11 5.1.8. Dlib Es una librería de propósito general multiplataforma escrita en C++ que contiene algoritmos de machine learning y herramientas para crear software complejo para resolver problemas. Es utilizado en la industria en campos como la robótica, teléfonos móviles y entornos de alto rendimiento [16]. 5.2. Aplicación Web 5.2.1. JavaScript JavaScript es un lenguaje de alto nivel basado en el estándar ECMAScript. Es utilizado en el desarrollo web aportando la funcionalidad. Presenta las siguientes características: débilmente tipado y dinámico, programación orientada a objetos, interpretado, multiparadigma, programación dirigida por eventos e imperativa [17]. 5.2.2. HTML HTML (HypertText Markup Language) es el lenguaje de marcado para la creación de páginas web. Es un estándar que sirve de referencia del software que conecta con la elaboración de páginas web en sus diferentes versiones, define una estructura básica y un código para la definición de contenido de una página web [18]. 5.2.3. CSS CSS (Cascading Style Sheets) es un lenguaje de estilo utilizado para proporcionar la presentación de un documento escrito en un lenguaje de marcado. Se utiliza en el diseño visual de las interfaces de las páginas web, normalmente escritas en HTML [19]. 5.2.4. Vue.js Vue.js es un framework de JavaScript que permite crear interfaces de usuario de manera sencilla. Utiliza HTML, CSS y JavaScript y proporciona un modelo de programación declarativo y basado en componentes lo que permite reutilizarlos y desarrollar las interfaces de usuario de la aplicación de manera más eficiente. Un componente está divido en tres partes: • <template></template>. Se implementa el código que proporciona la estructura del componente. Utiliza HTML. • <script></ script>. En esta etiqueta se implementa la funcionalidad del componente a través del lenguaje de programación JavaScript. Memoria del Proyecto 12 • <style></style>. Se encuentra el diseño del componente utilizando CSS [20]. 5.2.5. Vuetify Vuetify es una librería que contiene una colección de componentes de interfaz de usuario ya construidos para el framework Vue.js permitiendo la creación de una aplicación web de manera sencilla y rápida [21]. 5.2.6. PrimeVue Es una librería que permite utilizar componentes ya creados de interfaz gráfica de manera sencilla en el framework Vue.js [22]. 5.2.7. Axios Axios es un módulo que permite enviar y recibir peticiones basadas en promesas desde el navegador y el servidor. En el servidor utiliza el módulo http nativo de Node.js y en el navegador utiliza XMLHttpRequests [23]. 5.2.8. Vue-chartjs Es un módulo que permite crear diferentes tipos de gráficos y es una adaptación de la librería Chart.js para ser utilizada en Vue.js. Además, permite crear componentes de gráficos reutilizables [24]. 5.3. Servidor 5.3.1. NodeJS Node.js es un entorno de ejecución de ejecución multiplataforma, del lenguaje de programación JavaScript, orientado a eventos asíncronos. Funciona como un modelo de evaluación de un único hilo de ejecución con entradas y salidas asíncronas, que se pueden ejecutar en paralelo sin el coste de cambiar el contexto, siendo una ventaja significativa respecto a los entornos de ejecución basados en hilos [25]. Se ha decidido utilizar este entorno de ejecución debido a que Node.js ofrece numerosos módulos cuya funcionalidad está probada y su rendimiento debido a que se realizan un número significativo de llamadas si el número de usuarios simultáneos es elevado. Memoria del Proyecto 13 5.3.2. NPM NPM (Node Package Manager) es un repositorio de herramientas libre usado para desarrollar aplicaciones y sitios web. Es el sistema de gestión de paquetes por defecto para Node.js. Permite interactuar de manera sencilla con el repositorio a través de la terminal [26]. 5.3.3. Express Express es un framework que permite crear aplicaciones web y APIs mediante Node.js. Es una capa construida sobre Node.js que permite manejar servidores y rutas de manera sencilla y rápida [27]. 5.3.4. MySQL MySQL es un sistema de gestión de base de datos, permite acceder a los datos de una base datos. Las bases de datos de MySQL son relacionales, es decir, almacena la información en diferentes tablas relacionadas entre sí en vez de incluir toda la información en una única tabla. El software que ofrece MySQL es libre lo que permite que cualquier desarrollador pueda usar y modificarlo [28]. 5.3.5. Sequelize Sequelize es un ORM (Object Relational Mapper) para Node.js. Un ORM es un modelo de programación que convierte los datos de una base de datos relacional en objetos de programación que pueden ser manipulados en un lenguaje de programación orientado a objetos [29]. 5.4. Editor de Texto 5.4.1. Visual Studio Code Es un editor de texto de código fuente desarrollado por Microsoft. Incluye soporte para la depuración, control integrado de Git, resaltado de sintaxis y finalización inteligente de código. Además, es posible utilizar módulos de terceros para facilitar alguna de las tareas a realizar. Da soporte a una gran cantidad de lenguajes de programación, entre ellos Python y JavaScript por lo que se ha utilizado como editor de texto en el proceso de implementación en todas las partes del sistema [30]. Memoria del Proyecto 20 Un ejemplo de la especificación de objetivos es: OBJ-001 Gestión de Usuarios Versión 1.0 (03/07/2023) Autores • Javier Caballero Sandoval Fuentes • Gabriel Villarrubia González • Héctor Sánchez San Blas Descripción El sistema debe administrar la creación de nuevos usuarios, la visualización de los datos personales, la modificación de estos y la eliminación del usuario. En el sistema existen dos roles de usuarios: - Usuario: Puede visualizar los datos registrados relativos a los carros y los avisos y ver las cámaras en directo. - Administrador: Además, puede gestionar al resto de usuarios, zonas, cámaras y avisos. Importancia Alta Urgencia Alta Comentarios Ninguno Tabla 2: Objetivo Gestión de Usuarios 6.4.3. Requisitos de Información Los requisitos de información son la información que el sistema debe almacenar para cumplir las necesidades. Los requisitos de información identificados son: • Información sobre Usuarios. • Información sobre Carros. • Información sobre Zonas. • Información sobre Cámaras. • Información sobre Avisos. Un ejemplo de la especificación de requisitos de información es: IRQ-001 Información sobre Usuarios Versión 1.0 (03/07/2023) Autores • Javier Caballero Sandoval Fuentes • Gabriel Villarrubia González • Héctor Sánchez San Blas Dependencias [OBJ-001] Gestión de Usuarios Descripción El sistema debe almacenar la información acerca de los usuarios registrados en el sistema. Datos específicos • Nombre • Apellidos • Nombre de usuario Memoria del Proyecto 21 • Email • Contraseña • Verificado • Rol Importancia Alta Urgencia Alta Estado Validado Estabilidad Alta Comentarios Ninguno Tabla 3: Requisito de Información sobre Usuarios 6.4.4. Requisitos Funcionales El sistema se divide en diferentes paquetes, mostrados en la Figura 9, modulando el sistema. Figura 9: Diagrama de Paquetes A continuación, se definen los actores que participan en el sistema y su jerarquía. Figura 10: Actores del Sistema Memoria del Proyecto 22 Un ejemplo de la especificación de los actores es: ACT-001 Usuario No Logueado Versión 1.0 (03/07/2023) Autores • Javier Caballero Sandoval Fuentes • Gabriel Villarrubia González • Héctor Sánchez San Blas Descripción Este actor representa a un usuario antes de iniciar sesión. Comentarios Ninguno Finalmente, se definen y detallan los casos de uso, que muestran como se comporta el sistema. Los diagramas de casos de uso se han realizado individualmente respecto a los paquetes indicados previamente. Un ejemplo de diagrama de uso es: Figura 11: Diagrama de Casos de Uso Autenticación de Usuarios Los casos de uso se han especificado individualmente como se muestra en el siguiente ejemplo. UC-001 Registrar Usuario Versión 1.0 (03/07/2023) Autores • Javier Caballero Sandoval Fuentes • Gabriel Villarrubia González • Héctor Sánchez San Blas Dependencias [OBJ-001] Gestión de Usuarios [IRQ-001] Información sobre Usuarios Descripción El sistema solicita al usuario que introduzca sus datos personales y posteriormente se crea su cuenta. Precondición El usuario no ha iniciado sesión. Memoria del Proyecto 23 Secuencia Normal Paso Acción 1 El actor Usuario No Logueado (ACT-001) solicita el registro de su cuenta. 2 El sistema solicita al usuario que introduzca sus datos personales. 3 El actor Usuario No Logueado (ACT-001) introduce los datos requeridos. 4 El sistema comprueba que los datos introducidos son correctos, manda un email para la verificación de la cuenta y notifica al actor Usuario No Logueado (ACT-001) que debe verificar su usuario a través del correo electrónico introducido. Postcondición El usuario se crea en el sistema con los datos introducidos. Excepciones Paso Acción 3 El actor Usuario No Logueado (ACT-001) cancela el registro, este caso de uso queda sin efecto. 4 Los datos introducidos son incorrectos o los campos nombre de usuario y/o correo electrónico ya están registrados en el sistema, el sistema devuelve un mensaje de error y el caso de uso queda sin efecto. Importancia Alta Urgencia Alta Estabilidad Alta Comentarios Ninguno. Tabla 4: Caso de Uso Registrar Usuario 6.4.5. Requisitos No Funcionales Los requisitos de no funcionales imponen restricciones en el diseño e implementación del sistema, así como estándares de calidad. Los requisitos no funcionales identificados son: • Usabilidad. • Compatibilidad. • Fiabilidad. • Implementación. • Privacidad. Un ejemplo de la especificación de requisitos de no funcionales es: NFR-001 Usabilidad Versión 1.0 (03/07/2023) Autores Javier Caballero Sandoval Fuentes • Gabriel Villarrubia González • Héctor Sánchez San Blas Dependencias Ninguna Descripción El sistema debe presentar una aplicación web con una interfaz intuitiva y sencilla para que cualquier usuario pueda llevar a cabo sus necesidades fácilmente. Memoria del Proyecto 24 Importancia Alta Urgencia Alta Estabilidad Alta Comentarios Ninguno Tabla 5: Requisito No Funcional Usabilidad 6.5. Análisis de Requisitos En esta sección se presenta el análisis orientado a objetos del sistema planteado. Este análisis consiste en una serie de técnicas y actividades mediante las que los requisitos identificados son analizados, refinados y estructurados. Permite comprender de manera más precisa los requisitos. Para obtener más información acerca de la estimación del análisis de requistios puede consultar el Anexo III Análisis de Requisitos. 6.5.1. Modelo de Dominio El modelo de dominio muestra las clases significativas identificadas del sistema a desarrollar, así como sus atributos y relaciones. Para realizarlo se ha utilizado un diagrama de clases mostrado en la siguiente figura. Figura 12: Modelo del Dominio Memoria del Proyecto 25 6.5.2. Realización de Casos de Uso Análisis En la realización de los casos de uso se muestran a través de diagramas de secuencia las interacciones y mensajes de los objetos del sistema. Se muestra un ejemplo de diagrama de secuencia realizado, Registrar Usuario, en la siguiente figura. Figura 13: Diagrama de Secuencia Análisis Registrar Usuario 6.5.3. Clases de Análisis y Propuesta de Arquitectura En la Figura 14 se muestran las clases de análisis identificadas, así como la propuesta de arquitectura que presentará el sistema. Figura 14: Propuesta de Arquitectura Memoria del Proyecto 26 6.6. Diseño del Sistema En esta sección se presenta el diseño orientado a objetos del sistema planteado. Es un modelo de objetos que describe la realización física de los casos de uso. Debido a que es una aproximación a la implementación, el nombre de las clases, métodos, y atributos serán un acercamiento a los que se utiliza en la implementación. Para obtener más información acerca del diseño del sistema puede consultar el Anexo IV Diseño del Sistema Software. 6.6.1. Patrones Arquitectónicos y de Diseño En esta sección se detallan los patrones arquitectónicos y de diseño que se utilizarán en el desarrollo del sistema facilitando el mismo teniendo en cuenta las características del sistema. 6.6.2. Patrón Modelo -VistaModelo de Vista (MVVM) La aplicación web permite mediante una interfaz recoger y modificar la información del sistema a través de una interfaz. El sistema debe controlar el flujo de la información de manera adecuada, para ello se utiliza el patrón MVVM. La aplicación web se desarrollará utilizando el framework Vue.js que permite crear una aplicación de manera eficiente y sencilla reutilizando componentes. Este framework se basa en el patrón MVVM que permite unir la vista y el modelo de manera bidireccional a través del modelo de vista. El sistema se divide en tres partes: • Modelo. Representa a los datos del sistema. • Modelo de Vista. Aloja el control de la interacción de la vista y conecta los datos del modelo con la vista. • Vista. Presenta los elementos visuales al usuario [33]. Figura 15: Modelo-Vista-ModeloVista [33] Memoria del Proyecto 27 6.6.3. Patrón DAO El patrón DAO (Data Access Object) es utilizado para desacoplar la lógica de negocio de la lógica de acceso a datos. En el servidor se lleva a cabo el acceso a los datos de la base de datos, para facilitar su tratamiento se crearán modelos de las entidades a almacenar. Para ello, se utilizará el módulo Sequelize que para cada una de las instancias de los modelos previamente creados crea un DAO. Figura 16: DAO [34] 6.6.4. Subsistemas de Diseño El sistema se ha dividido en diferentes subsistemas facilitando su manejo. • Server. Es el servidor en el que se encuentran los datos persistentes almacenados situados en el paquete Model. Además, se encuentra la especificación del patrón DAO en el paquete DAOApi. En el paquete ControllerApi se implementa la lógica de control de los datos. • Web. Representa la aplicación web con la que interactúa el usuario. Como se ha comentado anteriormente se utilizará el framework Vue.js lo que permite diferenciar los componentes que se reutilizan en diferentes vistas. El Router implementa el cambio de las vistas. • Collector. Representa a los procesos encargados de detectar y trackear los carros de la compra en segundo plano. El servidor de este subsistema permite recuperar las imágenes de las cámaras con el reconocimiento de los carros de la compra. Memoria del Proyecto 28 Figura 17: Subsistemas de Diseño 6.6.5. Clases de Diseño En este apartado se especifican las clases de diseño del sistema junto a sus métodos. El servidor presenta un subsistema controlador, un DAOApi y un modelo. Sus clases de diseño se observan en la siguiente figura. Memoria del Proyecto 29 Figura 18: ControllerApi Figura 19: DAOApi Memoria del Proyecto 36 6.9. Funcionalidad del Sistema En esta sección se muestra el recorrido a través de la aplicación web del sistema propuesto para facilitar y dar a conocer al usuario la misma. Se detallan las funcionalidades más importantes del sistema que puede llevar a cabo el usuario. Debido a que el sistema contempla tres roles y cada uno de ellos tiene diferentes opciones, la sección se divide según estos: • Usuario No Logueado. • Usuario. • Administrador. Para obtener más información acerca de la funcionalidad del sistema puede consultar el Anexo VI Manual de Usuario. 6.9.1. Usuario No Logueado Este usuario realiza las tareas de registro de usuario, activar usuario, iniciar sesión y recuperar contraseña. Tras iniciar sesión se transforma en usuario o administrador dependiendo de su rol dentro del sistema. 6.9.1.1. Iniciar Sesión El sistema cuando el usuario no logueado abre la aplicación web le muestra la página de iniciar sesión, en ella también se muestran las opciones de registrar usuario o recuperar la contraseña. La imagen del logo de la aplicación de la barra superior se mantiene en las diferentes pantallas previas al ingreso al sistema y permite direccionar al usuario no logueado a la pantalla de inicio de sesión. Memoria del Proyecto 37 Figura 28: Pantalla Iniciar Sesión 6.9.1.2. Registrar Usuario El usuario si no está registrado en el sistema debe hacerlo para acceder a él. Para ello, debe pulsar el botón ¿No tienes cuenta? Regístrate en la pantalla de inicio de sesión. En esta opción se muestra un formulario con los datos que debe introducir: nombre, apellidos, nombre de usuario, correo electrónico, contraseña y de nuevo la contraseña para confirmarla. Además, se encuentra el botón Iniciar Sesión que devuelve al usuario a la pantalla de inicio de sesión. Figura 29: Pantalla Registrar Usuario Memoria del Proyecto 38 6.9.1.3. Recuperar Contraseña Para recuperar la contraseña, el usuario pulsa el enlace ¿Has olvidado la contraseña? de la pantalla de inicio de sesión. Se muestra un formulario en el que es necesario introducir el correo electrónico del usuario. Figura 30: Pantalla Correo Electrónico Recuperar Contraseña En el caso de que se mande el correo electrónico se muestra un mensaje de información. Figura 31: Envío Correo Electrónico Recuperar Contraseña En el correo electrónico enviado se encuentra un enlace que al pulsarlo redirige a la pantalla para restaurar la contraseña. Memoria del Proyecto 39 Figura 32: Correo Electrónico Recuperar Contraseña En esta pantalla se muestra un formulario en el que es necesario introducir la contraseña y su confirmación. Figura 33: Pantalla Introducir Contraseña Recuperar Contraseña 6.9.2. Usuario Todos los usuarios que tienen acceso al sistema pueden visualizar diferentes estadísticas de los carros detectados, los avisos detectados y las cámaras en directo. Además, pueden ver sus datos personales, modificarlos, modificar su contraseña y eliminar permanentemente su cuenta del sistema. 6.9.2.1. Inicio En la pantalla de inicio del sistema se muestran dos gráficos: en el primero se muestran los carros actuales en cada una de las zonas que se actualiza en tiempo real, el segundo muestra un resumen de los últimos 7 días contabilizando el número de carros por día de la semana. Memoria del Proyecto 40 Figura 34: Pantalla Inicio 6.9.2.2. Estadísticas Carros En la parte superior de la pantalla se muestra dos tarjetas, la primera permite seleccionar el tipo de gráficos, barras o líneas. La segunda selecciona el intervalo en el que se realiza la búsqueda de los datos. Figura 35: Elección Tipo Gráfico y Fecha El usuario al pulsar uno de los calendarios, este se despliega y permite al usuario elegir el día deseado. Tras elegir los días, el usuario al pulsar el botón Actualizar se el sistema muestra los diferentes gráficos correspondientes a dicho intervalo. Los gráficos son los mismos tanto para los de barras y de líneas, únicamente varía el tipo de representación. En la siguiente figura se muestra un ejemplo de un gráfico. Memoria del Proyecto 41 Figura 36: Gráfico Número de Carros por Día 6.9.2.3. Estadísticas Avisos En la parte superior se muestra la misma tarjeta que en la pantalla de estadísticas para elegir el intervalo de fechas. Para elegir los días y actualizar los datos se realiza de la misma manera que en el caso de los gráficos de los carros. En esta pantalla se muestran los avisos detectados en el intervalo elegido y sus datos. Se observa el identificador del aviso, la zona en la que se ha detectado, la cámara que lo ha detectado, el estado del aviso y la fecha de inicio y fin. En el caso de que el aviso no esté resuelto la fecha de inicio y fin es la misma, tras resolverse el aviso se actualiza la fecha de fin a la fecha en la que se ha resuelto. Además, los campos se pueden ordenar de manera ascendente o descendente pulsando los títulos de las columnas. Por otra parte, se puede buscar a través de la caja de texto que muestra Buscar. Figura 37: Pantalla Avisos Memoria del Proyecto 42 6.9.2.4. Cámaras en Directo En esta pantalla se muestran las imágenes en tiempo real de las cámaras mostrando las zonas de la cámara y los carros detectados. El usuario puede elegir la cámara a visualizar entre las cámaras registradas en el sistema en el selector de la parte izquierda. Figura 38: Pantalla Cámaras en Directo 6.9.2.5. Perfil En esta pantalla se muestran los datos personales del usuario y su rol. Figura 39: Pantalla Perfil Memoria del Proyecto 43 Al pulsar el botón Editar, el sistema muestra un cuadro de diálogo con los campos modificables y su contenido son los datos actuales del usuario. Al pulsar el botón Editar Perfil se actualizan los datos del usuario con los datos introducidos, en el caso de pulsar el botón Cerrar, los datos no se modifican. Figura 40: Pantalla Editar Perfil 6.9.2.6. Modificar Contraseña Se muestra un formulario en el que es necesario introducir la contraseña actual y posteriormente la nueva contraseña. Tras pulsar el botón Guardar Contraseña se modifica la contraseña del usuario. Figura 41: Pantalla Modificar Contraseña Memoria del Proyecto 44 6.9.2.7. Eliminar Cuenta El sistema muestra un mensaje de confirmación que el usuario debe aceptar para eliminar permanentemente su cuenta. Si el usuario pulsa el botón Aceptar el usuario es eliminado del sistema y devuelve al usuario a la pantalla de inicio de sesión, en caso de pulsar el botón Cancelar se cierra el cuadro diálogo y el usuario no es eliminado. Figura 42: Pantalla Eliminar Cuenta 6.9.3. Administrador El administrador puede realizar todas las tareas que puede el usuario. Además, tiene la capacidad de la gestión de usuarios, zonas, cámaras y avisos. 6.9.3.1. Gestión de Usuarios El administrador en la pantalla de gestión de usuarios puede visualizar los usuarios registrados en el sistema junto a sus datos. Figura 43: Pantalla Gestión de Usuarios Memoria del Proyecto 45 En cada fila del usuario se muestran dos botones para la modificación o eliminación de dicho usuario. El botón de modificación está representado por un lápiz y color amarillo mientras que el de eliminación está representado por una papelera y color rojo. El administrador al pulsar el botón de editar usuario se muestra un cuadro de diálogo en el que se muestra el nombre de usuario a modificar y su rol. Solo es modificable el campo de rol. Al pulsar el botón Editar Usuario se actualiza el rol del usuario, en el caso de pulsar el botón Cancelar, el rol no se modifica. Figura 44: Pantalla Editar Usuario El administrador al pulsar el botón de eliminar usuario se muestra un cuadro de diálogo en el que se pide la confirmación para eliminar definitivamente al usuario del sistema. Si el administrador pulsa el botón Aceptar, el usuario es eliminado del sistema, en el caso de pulsar Cancelar el usuario no es eliminado. Figura 45: Pantalla Eliminar Usuario 6.9.3.2. Gestión de Zonas El administrador en la pantalla de gestión de zonas puede visualizar las zonas registradas en el sistema junto a sus datos, el identificador y el nombre de la zona. Memoria del Proyecto 52 Si al pulsar el botón Añadir Aviso no se cumplen los siguientes requisitos se muestra un error indicando el motivo: alguno de los campos no está rellenado, el límite de carros debe ser un número entero positivo, se introducen zonas duplicadas o no se introduce ninguna zona. El administrador al pulsar el botón de editar aviso se muestra un cuadro de diálogo en el que se muestra los datos del aviso. Son modificables todos los campos excepto el identificador del aviso. Además, se pueden añadir o eliminar zonas asociadas. Figura 58: Pantalla Editar Aviso El administrador al pulsar el botón de eliminar aviso se muestra un cuadro de diálogo en el que se pide la confirmación para eliminar definitivamente al aviso del sistema. Al pulsar el botón Aceptar se elimina el aviso del sistema. En el caso de pulsar Cancelar el cuadro de diálogo se cierra sin realizar ninguna acción. Figura 59: Pantalla Eliminar Aviso Memoria del Proyecto 53 7. Resultados Entrenamiento Modelo Para tener la capacidad de detectar un objeto en una imagen es necesario utilizar un modelo y entrenarlo con un dataset, conjunto de imágenes en el que se etiquetan los objetos a detectar, determinado para los objetos a localizar. Este dataset debe ser suficientemente grande y variado para conseguir resultados correctos. El conjunto de imágenes que se han utilizado para etiquetar los carros lo componen 283 imágenes en las que se han etiquetado 1006 carros. Para generar un dataset más completo, con la ayuda de la herramienta Roboflow, se ha modificado la saturación, brillo de las imágenes y variado el brillo y la exposición de los cuadrados delimitadores generando un dataset de 677 imágenes. Se han utilizado 591 imágenes para el entrenamiento del modelo, 55 para la validación y 31 para la comprobación del modelo. Para determinar si una predicción es correcta o no se utiliza el término IoU (Intersection over Union) que mide el solapamiento entre la caja de la predicción y el objeto. Se considera que una predicción es correcta si este valor es mayor a 0.5. 𝐼𝑜𝑈 = 𝑎𝑟𝑒𝑎 𝑜𝑓 𝑜𝑣𝑒𝑟𝑙𝑎𝑝 𝑎𝑟𝑒𝑎 𝑜𝑓 𝑢𝑛𝑖𝑜𝑛 [35] Existen diferentes métricas obtenidas como resultado tras el entrenamiento del modelo. Algunas de ellas son: • Precisión. Mide cómo de correctas son las predicciones. Permite conocer el porcentaje de acierto de los objetos a localizar. Si este valor es alto, indica que los objetos localizados son los buscados, pero no tiene en cuenta los objetos a localizar no encontrados. 𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 = 𝑇𝑃 𝑇𝑃 +𝐹𝑃 [35] • Recall. Esta métrica mide como de bien localiza los objetos que se buscan. Si este valor es alto, indica que el modelo reconoce un gran porcentaje de los objetos a buscar, pero no tiene en cuenta los objetos de predicciones erróneas. 𝑅𝑒𝑐𝑎𝑙𝑙 = 𝑇𝑃 𝑇𝑃 +𝐹𝑁 [35] TP = Positivo verdadero, TN = Negativo verdadero, FN = Falso negativo. • mAp_0.5 y mAp_0.5:0.95. La métrica Average Precision (AP) es el área debajo de la curva precisión-recall. Memoria del Proyecto 54 Figura 60: Curva Precisión-Recall [36] Para calcular la métrica Mean Average Precision (mAP), en el proyecto se utiliza COCO mAP, que usa un rango de valores límte de IoU para cada uno de los objetos y posteriormente realiza la media. COCO utiliza 101 valores de recall [0:.01:1]. Para la métrica mAp_0.5:0.95 se utilizan los valores de 0.5 a 0.95 con intervalos de 0.05. El valor obtenido para el valor 0.5 de IoU se denomina mAp_0.5. El modelo YOLO v5 utilizado tras entrenarlo 200 epochs con el dataset creado ha obtenido los siguientes resultados: • Precisión = 0.982. • Recall = 0. 969. • mAp_0.5 = 0. 983. • mAp_0.5:0.95 = 0. 697. Memoria del Proyecto 55 8. Limitaciones del Sistema La limitación principal encontrada en el sistema desarrollado se encuentra en la detección y trackeo de los carros de la compra. Para realizar estas tareas es necesario tener grandes recursos de computación debido a que es un proceso continuo y pesado computacionalmente. Además, a medida que aumenta el número de cámaras con las que se localizan los carros es necesario aumentar la capacidad computacional para que el rendimiento y la calidad no sea perjudicada. Para resolver o reducir dicho problema no se lleva a cabo la detección de los carros, computacionalmente más pesado que el trackeo, todos los frames recogidos por la cámara sino cada 10 frames a costa de perder ligeramente la calidad del trackeo. Memoria del Proyecto 56 9. Conclusiones y Líneas de Trabajo Futuras En esta sección se exponen las conclusiones obtenidas tras realizar todas las fases del proyecto. Por otra parte, se explican posibles líneas de trabajo en el futuro para mejorar el sistema. 9.1. Conclusiones Tras finalizar el sistema se puede comprobar que se han cumplido completar los objetivos y necesidades planteadas al inicio del ciclo de vida del sistema. Los logros conseguidos son: • Se ha creado un dataset válido, así como entrenado al modelo YOLO v5 que permite desarrollar un sistema capaz de localizar y trackear carros de la compra a través de las imágenes de una cámara. • La aplicación web implementada permite visualizar los datos, organizados a través de diferentes gráficos, recogidos por el Tracker permitiendo mejorar la calidad del servicio que proporciona un supermercado a sus clientes a través de analizar dichos datos. Además, es posible visualizar en tiempo real las cámaras facilitando la detección de posibles problemas en una zona del supermercado. • Por otra parte, la aplicación web permite la gestión del perfil de los usuarios y para los usuarios administradores permite gestionar las zonas, cámaras y avisos dando la posibilidad de personalizar el sistema para las necesidades de cada supermercado. • A lo largo del desarrollo se ha comprobado cuál es el esfuerzo necesario para realizar un proyecto de forma individual. • Por último, se ha logrado poner en práctica los conocimientos y habilidades adquiridas a lo largo de los cursos del grado, así como ampliar el conocimiento en fases del ciclo de vida de un proyecto como el diseño o la implementación. 9.2. Líneas de Trabajo Futuras Existen diferentes aspectos del sistema a mejorar en el futuro. Respecto a la localización y trackeo de los carros, uno de ellos sería tener la capacidad de trackear un carro cuando cambia de cámara para tener el conocimiento del recorrido completo en el supermercado de cada carro. Otro posible aspecto para mejorar sería la capacidad de localizar otros objetos como cestas de la compra o personas. Por otra parte, la aplicación web se puede mejorar con el feedback recibido de los supermercados que incorporen el sistema tanto en el aspecto UX como en el funcional. Memoria del Proyecto 57 10. Bibliografía [1] Mark P. Melegrito, Alvin Sarraga Alon, Sammy V. Militante, Yolanda D. Austria, Myriam J. Polinar, and Maria Concepcion A. Mirabueno. Abandoned-cart-vision: Abandoned cart detection using a deep object detection approach in a shopping parking space. In 2021 IEEE International Conference on Artificial Intelligence in Engineering and Technology (IICAIET), pages 1–5, 2021. [2] I. Haritaoglu and M. Flickner. Detection and tracking of shopping groups in stores. In Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. CVPR 2001, volume 1, pages I–I, 2001. [3] André Sales Mendes, Gabriel Villarrubia, Javier Caridad, Daniel H. De La Iglesia, and Juan F. De Paz. Automatic wireless mapping and tracking system for indoor location. Neurocomputing, 338:372–380, 2019. [4] Girshick, R., Donahue, J., Darrell, T., & Malik, J. (2014). Rich feature hierarchies for accurate object detection and semantic segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 580-587). [5] Redmon, J., Divvala, S., Girshick, R., & Farhadi, A. (2016). You only look once: Unified, realtime object detection. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 779-788). [6] Distrito K. https://www.distritok.com/ [7] Wyn Enterprise. https://wyn.grapecity.com/ [8] Rest. https://www.redhat.com/en/topics/api/what-is-a-rest-api [9] YOLO v5. https://wandb.ai/onlineinference/YOLO/reports/YOLOv5-Object-Detection-onWindows-Step-By-Step-Tutorial---VmlldzoxMDQwNzk4 [10] Roboflow. https://docs.roboflow.com/ [11] Google Colab. https://research.google.com/colaboratory/faq.html#:~:text=Colaboratory%2C%20or%20%E2%8 0%9CColab%E2%80%9D%20for,learning%2C%20data%20analysis%20and%20education. [12] Pyhton. https://builtin.com/software-engineering-perspectives/python [13] Flask. https://pythonbasics.org/what-is-flask-python/ [14] OpenCV. https://opencv.org/about/ [15] NumPy. https://numpy.org/doc/stable/user/whatisnumpy.html [16] Dlib. http://dlib.net/ [17] JavaScript. https://en.wikipedia.org/wiki/JavaScript [18] HTML. https://es.wikipedia.org/wiki/HTML [19] CSS. https://en.wikipedia.org/wiki/CSS [20] Vue.js. https://vuejs.org/ [21] Vuetify. https://vuetifyjs.com/ Memoria del Proyecto 58 [22] PrimeVue. https://primevue.org/ [23] Axios. https://axios-http.com/ [24] Vue-chartjs. https://vue-chartjs.org/ [25] NodeJS. https://nodejs.org/en/about [26] NPM. https://www.uxpin.com/studio/blog/what-is-npm/ [27] Express. https://www.simplilearn.com/tutorials/nodejs-tutorial/what-is-express-js [28] MySQL. https://dev.mysql.com/doc/refman/8.0/en/what-is-mysql.html [29] Sequelize. https://medium.com/the-javascript-dojo/introduction-to-sequelize-1cbfc2d2d1bf [30] Visual Studio Code. https://code.visualstudio.com/docs/editor/whyvscode [31] Microsoft Project. https://www.projectmanager.com/blog/what-is-microsoft-project [32] Moreno García M. N. Transparencias de Gestión de Proyectos, Práctica 2 – Planificación temporal. [33] Patrón Modelo-Vista-VistaModelo. https://www.techtarget.com/whatis/definition/ModelView-ViewModel [34] Patrón DAO. https://www.oscarblancarteblog.com/2018/12/10/data-access-object-daopattern/ [35] Detección de Objetos. https://kharshit.github.io/blog/2019/09/20/evaluation-metrics-forobject-detection-and-segmentation [36] Detección de Objetos. https://jonathan-hui.medium.com/map-mean-average-precision-forobject-detection-45c121a31173