Subido por Angel Yaxem Reyes Lira

ReyesLira RojasCuapio

Anuncio
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/
Descargar