INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO Unidad de aprendizaje: Ingeniería de Software Práctica 1 Alumnos: Reyes Lira Angel Yaxen Rojas Cuapio Antonio Baruc Grupo: 6BV2 Profesor: Marco Antonio Ortiz Castillo Práctica 1. 1. Identifique un problema de cualquier índole con la intención de crear el software para resolverlo. (Pregunta de planeación) Las personas con discapacidad visual, más en específico y como lo menciona [1] serían personas con ceguera total o ceguera parcial, luchan por comprender qué hay a su alrededor y retener información acerca de los objetos o situaciones con los que entran en contacto. Esto se traduce en una capacidad reducida de vivir una vida cotidiana autónoma, activa y plena. Aunque actualmente hay diversas herramientas para usar la tecnología [2], no proporcionan descripciones precisas de lo que está sucediendo en las fotos o en la vida real. Esto constituye una alta carga para la interacción significativa con el mundo. 2. Redacte el problema con el mayor detalle posible (¿Se puede fraccionar?) (Pregunta de planeación) El problema de la accesibilidad para las personas con discapacidad visual es altamente crítico hoy en día. Alrededor del mundo, millones de personas experimentan dificultades para interactuar con su entorno debido a la falta de herramientas que les permitan “ver” el mundo que los rodea de una manera visual. Si bien, se han creado dispositivos y tecnologías de asistencia [2], la mayoría de ellos no abordan completamente el problema y al mismo tiempo carecen de una solución intuitiva a la hora de interactuar con estas herramientas. Las personas con discapacidad visual dependen en gran medida de otros individuos o tecnologías para informarse sobre los objetos o situaciones o lugares que no pueden ver por sí mismos. Esto no solo limita su autonomía, sino que también crea obstáculos significativos en su vida diaria. Más específicamente, les es difícil saber qué objetos se encuentran delante de ellos en un momento dado, entender lo que está sucediendo de forma más amplia en una situación de la calle, o incluso participar plenamente en actividades que involucren a otras personas, como visitas a museos o eventos. Aunque se han hecho avances tecnológicos, muchas soluciones posibles no abarcan una descripción precisa en tiempo real de lo que hay en una imagen o en el entorno visual en general. Como resultado, las personas con discapacidad visual no cuentan con una herramienta que simplemente describa una imagen que ven en términos comprensibles y prácticos para que puedan interactuar de manera más efectiva con el mundo en el que viven. Como ya se ha señalado, esto afecta en gran medida su independencia, así como su capacidad para realizar tareas diarias y su felicidad. 3. Identifique todas las posibles variables controlar/modificar para resolver el problema. (Pregunta de planeación) que puede Entiéndase por variables a todos los elementos y circunstancias de las cuales va a depender un supuesto software desarrollado. Considerando las variables puesto que estas determinarán en gran medida el cómo se abordará el problema. Bajo estas consideraciones se definirán las herramientas y tecnologías a utilizar para ofrecer una solución. - - - - Luz: Porque dependiendo del grado de intensidad de la luz se puede obtener mayor o menor información de una imagen. Capacidad de audición: Puesto que el sujeto debería ser capaz de escuchar instrucciones que le dicten una descripción y/o instrucciones Familiarización con la tecnología: Si hablamos de una herramienta tecnológica que pueda ayudar a personas con discapacidad visual a conocer su entorno podemos asumir que el sujeto ha estado en contacto con herramientas como computadoras, celulares inteligentes o cualquier otro dispositivo digital. Ejecución diferentes dispositivos: Independientemente del software que se desarrolle, este tendrá que ser ejecutado en una computadora, ya sea celular o laptop. Tipo Cámara: Dado que el software estará enfocado a la descripción de entornos para personas con discapacidades visuales, por tanto, se necesitará un hardware capaz de detectar por medio de sensores una imagen. Independientemente del equipo que se utilice una cámara será necesaria. Bocinas: Igualmente que con el ejemplo de la cámara, se necesitará de un dispositivo para la reproducción de sonido, es decir una bocina. Esto debido a que el usuario objetivo son personas con discapacidad visual y la forma en que se realizará la comunicación con el usuario será por medio del sonido. Acceso a internet: Para el desarrollo del proyecto podrían utilizarse herramientas las cuales necesitan de conexión a internet para su realización. Por lo cual que el dispositivo del usuario tenga acceso a internet será una cualidad importante para el completo desarrollo del sistema. 4. Considere su solución debe de aplicar algún algoritmo de IA anteriormente visto (Pregunta de modelado) Se tenían en mente dos posibilidades, utilizar una API proporcionada por OpenIA la cuál permite identificar todo lo necesario en las fotografías ya previamente procesadas. La otra posibilidad es realizar un modelo pequeño y que requiera poca capacidad de procesamiento y/o potencia, algunos ejemplos de estos modelos pueden ser MobileNet, Efficient Net-Lite, Squeeze Net, Tensor Flow Lite Model Marker. En cuanto a la utilización de las herramientas, el plan es integrar la API de OpenAI en nuestra aplicación para que, cuando el usuario capture una imagen con su dispositivo, ésta se envíe a la API. La API procesa la imagen y devolverá una descripción clara y concisa de lo que contiene, que será leída en voz alta para el usuario [3]. Alternativamente, si el proyecto se encamina por uno de los modelos ligeros, la implementación será directamente en la aplicación. Esto permitirá que el reconocimiento de objetos se realice en el propio dispositivo, lo que significa que los usuarios no necesitarán estar conectados a internet para obtener las descripciones. Así, el proyecto busca que ambas opciones ofrezcan a las personas con discapacidad visual una forma más efectiva de interactuar con su entorno, brindándoles información instantánea y útil sobre lo que les rodea. 5. Escoja una metodología para hacer el diseño (SCRUM, ÁGIL, SIGMA). (Pregunta de modelado) Se decidió utilizar la metodología SCRUM, ya que al tratarse de una solución para un público específico (personas con ceguera total o ceguera parcial), es vital obtener retroalimentación temprana y frecuente para asegurarnos de que la solución realmente aborda sus necesidades, además de que SCRUM ofrece flexibilidad, entregas incrementales y la posibilidad de ajustar los requerimientos cambiantes. Se descartaron otras metodologías como el modelo en Espiral y Kanban por diferentes razones. El modelo en espiral fue descartado debido a su complejidad y a los altos costos que implica su implementación, ya que requiere una constante evaluación de riesgos y la repetición de múltiples fases de manera cíclica, lo cual puede alargar los tiempos de desarrollo. Aunque Kanban ofrece flexibilidad y una visualización clara del flujo de trabajo, no proporciona la estructura de sprints ni las revisiones periódicas que son características de Scrum. Se consideró la metodología scrumban, que es la combinación de estas dos metodologías ágiles sin embargo fue descartada esta combinación puesto que para el modelo de trabajo, el cual no abarcara un largo periodo de tiempo, no será necesario reemplazar constantemente nuestros módulos. La naturaleza iterativa y centrada en la retroalimentación de Scrum es más adecuada para manejar la complejidad del desarrollo de la aplicación, asegurando que los problemas o mejoras puedan abordarse de manera ágil y rápida. 6. Haga un bosquejo/diagrama de flujo y redacte su solución (Pregunta de modelado) Se realizarán 3 iteraciones en las cuales cada una hará una mejora con respecto a la anterior. En la primera iteración se realizará un software funcional en el cual no se le dará prioridad a la parte de la interfaz gráfica, ni de la relación con el usuario con discapacidad visual. Solo se cumplirá con los requerimientos técnicos básicos. Posteriormente, en la segunda iteración, se tendrá como objetivo mejorar la parte gráfica del software a la vez que se adaptaran elementos de la iteración anterior con base en la retroalimentación obtenida. La finalidad de esta iteración es tener una parte gráfica aceptable y una parte técnica completa. Finalmente la tercera iteración será la iteración final, donde se buscó dejar listos los pequeños detalles de la interfaz gráfica y eficientar el proceso técnico. Así como dar por terminado con las últimas sugerencias/ retroalimentación. De esta forma se asegura entregar un software completo y funcional 7. ¿Ha visto y/o resuelto problemas similares? (Pregunta de planeación) En el pasado miembros de nuestro equipo han trabajado en la creación de un sistema que genera música dado un prompt determinado. Para la creación de este sistema se utilizó la API de un modelo de inteligencia artificial previamente entrenado. Se utilizó un modelo de Hugging Face. Para la creación del sistema se llevó a cabo el proceso de diseño para lo cual se realizaron todo tipo de diagramas de flujo necesarios. El sistema contaba con una base de datos de usuarios, donde se tenían que registrar correos y contraseñas para poder tener acceso al sistema. Incluía una parte en la que podía el usuario aspirar a una mejor versión del software si se realizaba un pago. Finalmente la generación de música se llevaba a cabo desde la selección de características deseadas por el usuario, las cuales eran mandadas como parámetros hacia la API de Hugging Face, la cual retornaba un archivo de audio que era posteriormente descargado o no por el usuario. 8. ¿Cómo se asegurará la calidad durante todo el proceso? (Pregunta de construcción) Asegurar la calidad durante el proceso de creación de un software implica implementar una serie de prácticas y enfoques que garantizan que el producto final cumpla con los requisitos del cliente, sea confiable y esté libre de errores . 1. Definición Clara de Requisitos [4]: ● ● Entender las Necesidades del Cliente: Reunirse con el cliente para definir de manera clara y completa los requisitos del software. Esto ayuda a evitar malentendidos y asegura que el software final cumpla con las expectativas. Requisitos Detallados: Documentar requisitos funcionales y no funcionales de manera detallada. Tener criterios de aceptación definidos facilita la verificación de la calidad. 2. Documentación Clara [4]: ● ● Documentación del Código: Mantener el código bien documentado para que otros desarrolladores puedan entender y mantener el software. Documentación del Usuario: Crear manuales y guías de usuario que faciliten el uso y la comprensión del software. 3. Gestión de Configuración [4]: ● ● Control de versiones: Usar sistemas de control de versiones (como Git) para rastrear cambios en el código, lo que ayuda a identificar cuándo y dónde se introducen problemas. Entornos de Desarrollo: Definir entornos de desarrollo, pruebas y producción para asegurar que las pruebas se realicen en condiciones similares a las del entorno final. 4. Retroalimentación Continua [4]: ● ● Feedback: Involucrar a los usuarios y clientes durante todo el proceso de desarrollo para obtener retroalimentación continua y ajustar el software según sus necesidades. Retrospectivas: Al final de cada ciclo de desarrollo, realizar retrospectivas para evaluar qué funcionó bien y qué se puede mejorar en los procesos. 9. ¿Qué definición de Software embona su propuesta? (Pregunta de planeación) La definición que más encaja con la propuesta es: Conjunto de instrucciones que cuando se ejecutan proporcionan las características, función y desempeño buscados. Ya que se está desarrollando una aplicación que, al ejecutarse, debe cumplir funciones específicas: capturar imágenes y ofrecer descripciones claras por voz para personas con discapacidad visual. Estas instrucciones no son simples líneas de código, sino procesos bien diseñados que, al ser ejecutados, permiten que el usuario reciba exactamente lo que necesita de manera rápida, precisa y accesible. Además, dado que la aplicación se ejecutará en dispositivos móviles, el desempeño es crucial. La definición destaca que el software debe ofrecer no solo funciones claras, sino también el rendimiento adecuado, algo esencial para optimizar recursos limitados como la batería y el procesamiento en estos dispositivos. Así, esta visión del software como un conjunto de instrucciones que entrega resultados concretos, eficaces y enfocados a mejorar la vida de los usuarios, representa fielmente lo que esperamos lograr con nuestro proyecto. 10. ¿Cuáles problemas cree que enfrentará su software que podría provocar deterioro? (Pregunta de planeación) - - - Falta de familiarización con herramientas tecnológicas. Puesto que no hay mucha tecnología que esté enfocada a personas con discapacidad visual es posible que el usuario no tenga experiencia previa al usar la solución propuesta. Falta de Dispositivos Digitales. Dado que se trabaja a nivel de software es 100% necesario que la solución sea ejecutada en un dispositivo capaz de computarlo, dispositivo que, puede no tener acceso la mayoría de población con discapacidad visual por la falta de herramientas adaptadas a su situación Falta de conexión a internet: Si se opta por la opción de utilizar un modelo de inteligencia artificial previamente entrenado, la conexión se realiza por medio de un API, la cual necesitará conexión a internet. En caso de no tenerla se pondría en duda que tan útil podría resultar a una persona con discapacidad visual el software. En cuanto a la parte del deterioro del software, podría haber varios factores que afecten a este, algunos de los pensados es la aparición de nuevos modelos de IA más precisos y con menos necesidad de procesamiento, lo cuál pueda dejar obsoleta la solución propuesta. El avance inminente de las versiones del sistema operativo Android el cuál puede provocar incompatibilidades con nuestro software. Y dependiendo de cuál de los dos caminos se desee tomar para el proyecto puede causar dos tipos diferentes de deterioro, el primero viene por la parte del uso de software dependiente de APIs, ya que la interrupción o modificación de dichos servicios podría afectar el desempeño del software, o algún tipo de cambio en las políticas de uso podría limitar la funcionalidad del software; y por otra parte si esta el camino de usar un modelo de IA el cuál el deterioro viene al no actualizar o entrenar periódicamente el software con datos recientes, así que la capacidad de ofrecer resultados precisos sería menor. 11. ¿En qué categoría vista cree que estaría su software? (Pregunta de planeación) Un software destinado a ayudar a personas con discapacidad visual a conocer su entorno se puede clasificar como un software de aplicación porque está diseñado con un propósito específico: facilitar la percepción visual a quienes tienen alguna discapacidad. Esta finalidad se alinea con las características de un software de aplicación, ya que se enfoca en brindar una funcionalidad concreta para mejorar la calidad de vida de los usuarios. Además implica una interacción directa con las personas, lo cual es una característica esencial de este tipo de software [5]. Al estar pensado para ser utilizado por los usuarios en su vida diaria, el software se asemeja a aplicaciones de productividad o herramientas de apoyo que buscan satisfacer necesidades continuas y específicas. 12. ¿Se puede usar software heredado? ¿Por qué? (Pregunta de planeación) No, puesto que usar software heredado en la creación de este proyecto limitaría la flexibilidad y adaptabilidad. Puesto que el software heredado puede tener restricciones en la adaptación de necesidades de una aplicación moderna. Además de que los sistemas heredados suelen ser menos eficientes y más pesados debido a su arquitectura antigua. Los sistemas heredados generalmente presentan dificultades para ser mantenidos y actualizados. La necesidad de mantener el software seguro y libre de vulnerabilidades puede verse afectada si se usa tecnología obsoleta, lo que podría generar problemas de seguridad y estabilidad. Referencias. [1] Ó. S. Pedro, «Déficit o deficiencia visual, tipos, limitaciones y tratamiento», Óptica San Pedro, 13 de noviembre de https://opticasanpedro.com/deficit-o-deficiencia-visual-tipos-limitaciones-y-tratamiento/ 2018. [2] Telefónica, «La tecnología impulsa la igualdad de las personas ciegas», Telefónica, 28 de abril de 2022. https://www.telefonica.com/es/sala-comunicacion/blog/la-tecnologia-impulsa-la-igualdad-de-laspersonas-ciegas/ [3] Danieldls-Exe, “Aprende a usar la API de ChatGPT,” CORE Code School · Academia De Programación, Jun. 02, 2023. https://www.corecode.school/blog/chat-gpt-api [4] Sentrio, “Cómo construir software de calidad,” https://sentrio.io/blog/como-construir-software-de-calidad/ Sentrio, Aug. 17, 2022. [5] “Categorías de software libre y software que no es libre - Proyecto GNU - Free Software Foundation.” https://www.gnu.org/philosophy/categories.es.html INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO Unidad de aprendizaje: Ingeniería de Software para Sistemas Inteligentes Práctica 2. Propuesta de Solución Alumnos: Reyes Lira Angel Yaxen Rojas Cuapio Antonio Baruc Grupo: 6BV2 Profesor: Marco Antonio Ortiz Castillo Práctica 2. 1. Problema planteado El problema de la accesibilidad para las personas con discapacidad visual es altamente crítico hoy en día. Alrededor del mundo, millones de personas experimentan dificultades para interactuar con su entorno debido a la falta de herramientas que les permitan “ver” el mundo que los rodea de una manera visual. Si bien, se han creado dispositivos y tecnologías de asistencia, la mayoría de ellos no abordan completamente el problema y al mismo tiempo carecen de una solución intuitiva a la hora de interactuar con estas herramientas. Las personas con discapacidad visual dependen en gran medida de otros individuos o tecnologías para informarse sobre los objetos o situaciones o lugares que no pueden ver por sí mismos. Esto no solo limita su autonomía, sino que también crea obstáculos significativos en su vida diaria. Más específicamente, les es difícil saber qué objetos se encuentran delante de ellos en un momento dado, entender lo que está sucediendo de forma más amplia en una situación de la calle, o incluso participar plenamente en actividades que involucren a otras personas, como visitas a museos o eventos. Aunque se han hecho avances tecnológicos, muchas soluciones posibles no abarcan una descripción precisa en tiempo real de lo que hay en una imagen o en el entorno visual en general. Como resultado, las personas con discapacidad visual no cuentan con una herramienta que simplemente describa una imagen que ven en términos comprensibles y prácticos para que puedan interactuar de manera más efectiva con el mundo en el que viven. Como ya se ha señalado, esto afecta en gran medida su independencia, así como su capacidad para realizar tareas diarias y su felicidad. 2. Comunicación La comunicación se implementa siguiendo la metodología Scrum: 1. Reuniones continuas: Realizamos reuniones breves cada cierto tiempo para revisar el progreso, planificar el trabajo y resolver problemas rápidamente. 2. Planificación de Sprints: Al inicio de cada sprint, el equipo se reúne para definir objetivos, priorizar tareas y asignar responsabilidades. 3. Revisiones y Retrospectivas: Al finalizar cada sprint, evaluamos avances y discutimos mejoras en los procesos de comunicación y desarrollo. 4. Herramientas de Comunicación: Usamos Whatsapp para comunicación rápida. La documentación se comparte en Google Drive para asegurar acceso centralizado. Por otro lado para la comunicación de código se propone usar Github Estas actividades garantizan una comunicación continua y efectiva, alineando al equipo con los objetivos del proyecto. 3. Propuesta de solución La solución propuesta es desarrollar una aplicación móvil que permita a las personas con discapacidad visual tomar una fotografía con su dispositivo. La aplicación utilizará inteligencia artificial para detectar y analizar los objetos presentes en la imagen y, mediante una voz artificial, le dictará al usuario lo que aparece en la foto. Esto brindará una herramienta accesible para la navegación y comprensión del entorno, promoviendo una mayor independencia y calidad de vida para los usuarios. Las tecnologías necesarias se desarrollan en lenguaje kotlin en Android Studio. 4. Modelo de calidad Para este proyecto, se utilizará un modelo Ágil. Este modelo es adecuado porque la naturaleza de la aplicación implica una complejidad inherente debido a la integración de inteligencia artificial para la detección de objetos y la implementación de voz artificial. El enfoque Ágil permitirá realizar entregas incrementales y continuas, adaptándose a los posibles cambios de requisitos y necesidades que puedan surgir durante las fases de desarrollo. Además, las metodologías Ágiles facilitan la colaboración constante con los usuarios finales, lo que es fundamental para crear una aplicación verdaderamente útil y efectiva para personas con discapacidad visual. 5. Metodología Para la implementación de esta aplicación, se utilizará la metodología Scrum. Scrum es una excelente opción porque permite dividir el desarrollo en sprints cortos, facilitando la entrega de incrementos funcionales del producto de manera constante. Esto es particularmente útil para este proyecto, ya que la integración de inteligencia artificial para la detección de objetos y el sistema de voz artificial puede requerir iteraciones frecuentes y ajustes basados en la retroalimentación de los usuarios finales. Se descartaron otras metodologías como el modelo en Espiral y Kanban por diferentes razones. El modelo en espiral fue descartado debido a su complejidad y a los altos costos que implica su implementación, ya que requiere una constante evaluación de riesgos y la repetición de múltiples fases de manera cíclica, lo cual puede alargar los tiempos de desarrollo. Aunque Kanban ofrece flexibilidad y una visualización clara del flujo de trabajo, no proporciona la estructura de sprints ni las revisiones periódicas que son características de Scrum. Se consideró la metodología scrumban, que es la combinación de estas dos metodologías ágiles sin embargo fue descartada esta combinación puesto que para el modelo de trabajo, el cual no abarcara un largo periodo de tiempo, no será necesario reemplazar constantemente nuestros módulos. La naturaleza iterativa y centrada en la retroalimentación de Scrum es más adecuada para manejar la complejidad del desarrollo de la aplicación, asegurando que los problemas o mejoras puedan abordarse de manera ágil y rápida. Mediante la implementación de Scrum, se pueden definir roles claros (Product Owner ,Scrum Master) y establecer un backlog con las funcionalidades a desarrollar, priorizándolas según las necesidades del usuario. Las revisiones y retrospectivas al final de cada sprint permitirán evaluar el progreso del proyecto y ajustar las estrategias para mejorar continuamente la aplicación, garantizando que cumpla con los requisitos y expectativas de las personas con discapacidad visual, más en específico, personas con ceguera total o ceguera parcial. Referencias. [1] J. Sutherland, Scrum: The Art of Doing Twice the Work in Half the Time. New York, NY, USA: Crown Business, 2014. [2] Scrum Training Series, "What is Scrum?" YouTube, Jan. 5, 2015. [Online]. Available: https://www.youtube.com/watch?v=2Vt7Ik8Ublw [3] Edureka!, "What is Agile? Agile Methodology | Agile Frameworks – Scrum, Kanban, Lean, XP, Crystal," YouTube, Aug. 9, 2018. [Online]. Available: https://www.youtube.com/watch?v=WjwEh15M5Rw&t=386s INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO Unidad de aprendizaje: Ingeniería de Software para Sistemas Inteligentes Práctica 3 Principios fundamentales. Alumnos: Reyes Lira Angel Yaxen Rojas Cuapio Antonio Baruc Grupo: 6BV2 Profesor: Marco Antonio Ortiz Castillo Práctica 3. 1) Divide y vencerás: Separación de entidades (de preferencia con posibilidad de validaciones individuales) Para la realización del proyecto se tiene pensado dividirlo en módulos, los cuales a grandes rasgos serían: ● ● ● ● Captura de imágenes: Módulo que gestione la interacción con la cámara del dispositivo. Procesamiento y análisis de imágenes: Interfaz que se comunique con la API de OpenAI o implemente el modelo ligero en el dispositivo. Generación de voz artificial: Módulo encargado de convertir la descripción en texto a instrucciones de voz mediante un motor TTS (Text-to-Speech). Interfaz de usuario: Módulo sencillo de interacción que permita activar o desactivar funciones (por ejemplo, una app móvil con menús básicos). Validación independiente: Cada uno de estos módulos podrán probarse de forma individual, así como no probar si alguno de ellos tiene bugs o cosas que resolver (por ejemplo, probar el audio sin depender de la cámara), y aunque este no sea como tal un módulo es importante tener en cuenta para el desarrollo del proyecto. 2) Uso de abstracción: Mediante el uso de elementos simplificados comunicar ideas 3) Coherencia: No tener elementos innecesarios y los que estan que tengan relación entre sí Se planea tener cierta coherencia al mantener una interfaz accesible y coherente, es decir con menús simples con navegación por voz, además de mantener la interacción centrada en la captura de imágenes y a la descripción de las mismas. Es decir todos los componentes dentro del proyecto tienen que tener como finalidad: facilitar la percepción visual a través de audio. 4) Transferencia de información: Atención información entre diferentes etapas en el flujo de Para el proyecto es necesario que nuestra información fluya sin pérdidas, para lograr esto creemos que lo fundamental es que: ● Las imágenes capturadas se envíen a la API o se puedan procesar de manera correcta esto para que se devuelvan las descripciones con el mínimo retardo posible. ● Manquear errores como la falta de conexión a internet o imágenes borrosas con notificaciones y mensajes claros para el usuario. ● Otra buena opción es mantener un formato estándar para los datos, un ejemplo puede ser mantener JSON para el intercambio de información con la API. 5) Construir software con modularidad eficaz En el caso de este proyecto lo mejor sería que cada una de las funciones; captura, procesamiento, descripción, que lo componen sean independientes de probar y utilizar, esto para que se facilite la actualización y mantenimiento. Y pensando más en futuro algunos de los módulos desarrollados para este proyecto pueden ser reutilizados para otro tipo de proyectos, por ejemplo el módulo de audio, o el modelo de IA, así como la API, pueden ser de gran ayuda para otro tipo de proyectos. 6) Buscar patrones Se tiene pensado que para el caso de este proyecto podríamos usar dos posibles patrones de diseño: ● ● Modelo-Vista-Controlador (MVC): Para el caso de este proyecto una forma de aplicar este modelo sería separar la lógica del negocio (procesamiento de imágenes), la vista (interfaz) y el control (gestión del flujo). Observer dada la información de [1], observer es un patrón de diseño utilizado para definir una relación de dependencia uno-a-muchos, este patrón de diseño se divide en un sujeto, observadores, y desacoplamiento. Y el uso del patrón para el caso del proyecto quedaría de la siguiente manera: ○ Sujeto: El módulo de captura de imágenes. ○ Observadores: ■ Módulo de procesamiento que espera la imagen para generar la descripción. ■ Módulo de audio que espera el texto generado para convertirlo a voz. ○ Flujo: ■ 1. La cámara captura una imagen y notifica a los módulos interesados. ■ 2. El módulo de procesamiento genera la descripción y notifica al módulo de audio. ■ 3. El módulo de audio convierte la descripción en voz y la reproduce para el usuario. 7) Representación del problema desde varias perspectivas (si es posible) Desde la perspectiva del usuario, la experiencia con la aplicación debe ser accesible y fácil de usar. Este usuario espera que la interfaz sea intuitiva, permitiendo la navegación a través de comandos de voz o gestos. Al interactuar con la aplicación, busca descripciones precisas y detalladas de las imágenes, no solo información básica como la presencia de objetos, sino también características como color, forma y ubicación. Sin embargo, se enfrenta a desafíos en diferentes escenarios, como condiciones de luz baja o la identificación de objetos abstractos, lo que podría generar frustración si la app no cumple con sus expectativas. Además, la dependencia de esta tecnología para reconocer entornos nuevos puede hacer que se sienta vulnerable si la aplicación no ofrece la información necesaria. Por otro lado, desde la perspectiva del desarrollador, la responsabilidad principal radica en mantener la funcionalidad de la aplicación en diversas condiciones. Esto incluye actualizaciones constantes para adaptarse a posibles cambios en la API del modelo de inteligencia artificial que se utiliza. Para asegurar que el modelo sea efectivo, es esencial entrenarlo con un conjunto diverso de imágenes que refleje una amplia gama de situaciones. Esto presenta el desafío de recopilar datos representativos, especialmente en contextos donde la luz, el ruido y los objetos abstractos pueden afectar la calidad de las descripciones. Además, llevar a cabo pruebas piloto con usuarios ciegos es crucial para obtener retroalimentación valiosa, aunque esto puede ser complicado por cuestiones logísticas y éticas. La comunicación constante con los usuarios es vital para entender sus necesidades y ajustar la aplicación en consecuencia. 8) Aplicar elementos necesarios para dar mantenimiento Lo principal para este proyecto, es cuidar la parte de la documentación, desde lo principal y lo ya realizado como el planteamiento del problema, la propuesta de solución, etc. Hasta los documentos más importantes como los requerimientos funcionales, así como manuales de usuario, entre otros documentos importantes para que sirvan como guía para el desarrollo, así como facilitar su mantenimiento, además de una parte importante que es que cualquier miembro del equipo pueda comprenderlo y modificarlo en caso de ser necesario. Otra parte importante es la gestión eficiente del código, mediante herramientas como Git que permite rastrear cambios realizados, y asegurar que los errores puedan identificarse y corregirse de forma rápida. Y por último pero no menos importante se planea que para el proyecto cuente con un software capaz de permitir inclusión de nuevas funcionalidades sin afectar las existentes. Referencias. [1] A. Casero, «¿Qué es el patrón Observer y cómo se usa?», KeepCoding Bootcamps, 15 de marzo de 2024. https://keepcoding.io/blog/patron-observer-y-como-se-usa/