Documentación Image Processing APIs - cecilianomeibel/ProyectoI_DatosII GitHub Wiki

Breve descripción del problema

Imagine que se encuentra laborando para una empresa importante y se le ha asignado la tarea de desarrollar una aplicación capaz de colocar filtros a una serie de imágenes seleccionadas por un usuario. Para ello se debe hacer uso de un protocolo de comunicación cliente-servidor (sockets) donde el cliente será el encargado de recibir las imágenes y enviarlas al servidor para su respectivo procesamiento. Una vez han sido modificadas, el servidor envía al cliente el resultado final, con el objetivo de que este ultimo sea el que interactúe con el usuario y le muestre la imagen con uno de los filtros elegidos. Para este proyecto en particular se tendrá a disposición del usuario 4 filtros: escala de grises, gaussian blur, control de brillo y corrección gamma.

Además, se le comunica que hay un inconveniente en el sistema, el cual impide enviar la imagen de manera completa, pues el ancho de banda es limitado, una solución a este problema es segmentar la imagen y transmitirla en fragmentos a través del cliente al servidor o viceversa. Lo anterior es posible al emplear un algoritmo de paginación.

El emisor debe enviar la imagen fragmentada y el receptor debe reconstruirla, de forma que se tenga como un solo paquete. Por otro lado, con el fin de desacoplar y generalizar la interacción entre el cliente y el servidor, la comunicación entre ambos módulos se hará a través de APIs, estas interfaces de programación de aplicaciones son módulos de software con una firma definida y se encargan de llevar a cabo una tarea especifica. Finalmente, como garantía de que los APIs aplicados funcionan correctamente y su programación es de calidad, se vuelve necesario generar un conjunto de pruebas unitarias que contrasten los valores resultantes con los valores esperados.

Diagrama de Clases

Diagrama de Clases Server/Cliente

Descripción del funcionamiento del algoritmo de paginación

EL algoritmo de paginacion trabajara con formatos de imagen jpg,png,bmp,jpeg o jpg como input. Para la implementacion es necesario trabajar la imagen como un objeto mat que posteriormente se convertirá a string, esto para que sea posible enviar los segmentos del cliente hasta el servidor. Una vez el servidor cuenta con los segmentos se convierten nuevamente a mat para reconstruir la imagen y aplicarle los filtros con la clase ImageProccesing. La imagen con el filtro se fragmenta y los diferentes mat son pasados a string para que puedan ir del servidor al cliente, la cual vuelve a unificar la imagen y muestra el resultado en pantalla.

Protocolo de comunicación entre cliente y servidor

El protocolo a utilizar para este proyecto es el protocolo de control de transmisión TCP/IP, el cual funciona mediante una conexión mutua entre cliente y servidor, a través de la red permite que se envíen y reciban flujos de datos de forma simultánea entre ambas partes. Lo que resulta en una comunicación ideal, pues se necesita que el flujo de información sea lo más inmediato posible.

Se opera mediante sockets, de acuerdo con Crespo y Candelas (1998) cada segmento TCP contiene los números de puerto fuente y destino con el fin de identificar la aplicación emisora y la receptora. Estos dos valores, combinados con las direcciones IP fuente y destino, identifican cada conexión de forma única. La combinación de un número de puerto y una dirección IP se conoce como socket. Por tanto, el cuarteto compuesto por la dirección IP del Cliente, el número de puerto del Cliente, la dirección IP del Servidor y el número de puerto del Servidor; forma la pareja de sockets que identifican cada conexión TCP (p.57). Finalmente, se considera confiable, ya que en caso de pérdida de datos se detecta en el momento, permitiendo que la solución pueda realizarse más rápidamente.