Documentacion - AllanChen03/ProyectoI-DatosII GitHub Wiki

Documentación Proyecto I Algoritmo y Estructura de Datos II


Descripción del Problema

Para el presente proyecto, se implementa una arquitectura cliente-servidor mediante sockets, en la cual el cliente puede enviar una imagen y pedir un filtro al servidor para que la procese y le agregue el filtro, luego el cliente recibirá la imagen con los cambios solicitados y los podrá ver desde una interfaz. El usuario podrá elegir entre 4 filtros, los cuales son gaussian Blur(Desenfoque), escala de Grises, control del brillo y corrección gamma.

Se desarrolla el proyecto con el lenguaje C++, ya que es un lenguaje orientado a objetos y nos permite el manejo de memoria. Además, para el almacenamiento de datos y manejo de memoria se implementan estructuras de datos como matrices y punteros. Se utiliza GitHub para el control de versiones de código y Azure DevOps para tener una mejor organización y una mayor facilidad a la hora de trabajar en grupo.

En el proceso de desarrollo del proyecto, se ponen a prueba cada API para cambiar el filtro por separado, se utilizan las pruebas unitarias para probar cada método y poder asegurarnos que el código funciona perfectamente y retorna los valores deseados. Para implementar las pruebas unitarias se utiliza la librería de Google test.

Los filtros se implementaron en base a formulas brindadas por el profesor, se utilizan las librerías opencv y cmake para segmentar las imágenes, además que nos permite manipular y acceder a la información la imagen. Esto ultimo es muy importante, ya que para modificar las imágenes tenemos que utilizar cada pixel de la imagen y sus valores RGB.


Diagrama de Clases

El diagrama de clases, precenta un cliente, servidor, y la clase que realizara las funciones del API para el trato de las imagenes, y el tipo de paginación esta incluido en el servidor y el cliente.


Descripción del funcionamiento del algoritmo de paginación

FIFO

Este algoritmo es sencillo de implementar, ya que se implementa según van llegando los procesos a una cola de espera en la cual se ejecutaran. Cuando es necesario de elejir se escoge el que lleva mas tiempo en listo. Este algoritmo es facil de implementar y solo se necesita de una cola para mantener los procesos ordenados, una vez que pasa de ser usado se coloca al final de la cola.

Algunos conceptos que se usan para lal implementación son Bit de validez-Invalidez y Fallo de página.


Protocolo de comunicación entre cliente y servidor

Para la conexión entre el Cliente-Servidor, se utilizan funciones que nos brinda la librería sockets para el lenguaje de C++. Primero se define un puerto y se utiliza la función bind para vincular el puerto con la dirección IP, luego se usa la función listen para que el servidor este escuchando a un cliente, por ultimo el servidor acepta al cliente e inicia la conexión.

Para el protocolo de comunicación, el servidor una vez iniciado va a escuchar hasta que el cliente le envié la imagen y el filtro que se desea, luego va a leer la información para comunicarse con los APIS y poder cambiarle el filtro a la imagen. Mientras este proceso se lleva a cabo, el cliente va a escuchar al servidor hasta que le devuelvan la imagen con el filtro aplicado. Únicamente se van a enviar valores como strings, enteros o matrices.


Azure DevOps

DatosII, Sprint I


Referencias