6
Processamento de Imagem Distribuído e Orientado a Serviço usando JAVA Frank José Affonso 1,2 , Evandro Luis Linhari Rodrigues 2 1-Centro Universitário Central Paulista (UNICEP) 2-Escola de Engenharia de São Carlos (EESC-USP) ([email protected] / [email protected]) ([email protected]) Abstract This paper presents a methodology of distributed image processing that has the main objective to optimize the resource of machine available into network. To optimize the machine time to processing of image is introduced the concept of service orientation, which is responsible to find the available machine into network to help decrease the time of image processing. With the service oriented processing is possible the image processing to become dynamic, because depending of the algorithm or technique that is intended to apply, it is necessary the high number of machine to have a satisfactory processing time. To have a dynamic process were utilized two technologies, JINI and JavaSpace, which are complementary and work together to become the distributed processing more dynamic than traditional technology can offer actually. 1. Introdução A atividade de processar uma imagem requer, em alguns casos, alto poder de processamento de máquina. Em algumas aplicações pode-se observar um ou mais computador(es) dedicado(s) para realizar esta atividade. O volume de processamento pode ser determinado em função dos algoritmos (cálculos) que se pretende realizar e, nota-se também, em determinados casos, o processamento é subutilizado e em outros se torna insuficiente. Para aperfeiçoar a relação investimento versus processamento, apresenta-se neste artigo uma metodologia para processamento distribuído de imagens e orientado a serviços, cujo principal enfoque é otimizar o processamento em função dos recursos computacionais. Este artigo está organizado da seguinte maneira: na seção 2 são apresentados os trabalhos relacionados ao desenvolvimento deste; na seção 3 são apresentados os sistemas, local e orientado a serviços, de processamento de imagens com filtros e na seção 4 são apresentadas as conclusões finais. 2. Trabalhos Relacionados A linguagem de programação JAVA [2] é considerada uma das mais poderosas e mais abrangentes das existentes atualmente no mercado [1]. Ela pode ser caracterizada como uma linguagem orientada a objetos, robusta, interoperável, portável, multiplataforma e utilizada em vários ambientes de implementação computacional, devido à grande quantidade de APIs (Application Program Interface) existentes. Essas características levaram a Sun [3] investir num slogan que marcou a linguagem JAVA “compile uma vez e rode em qualquer lugar”. Neste artigo são abordadas APIs para Manipulação de Imagens (Image I/O) [4], para desenvolvimento de aplicações desktop (SwingJFC) [5] e para distribuição da aplicação na rede (RMI, JINI, JavaSpace) [6, 7 e 8]. A API Java Image I/O [4] oferece recursos para manipulação de imagens tanto em 2D quanto em 3D, para integração com aplicativos Swing [5] e para Web, para aplicativos que envolvem recursos OpenGL [4]. Apesar de oferecer suporte a grande quantidade de recursos, optou-se neste trabalho pela utilização de processamento de imagens em 2D com a aplicação de filtros, que são operações matemáticas capazes de realizar as mudanças nas imagens originais. Os detalhes da escolha deste tipo de imagem e filtros que serão aplicados serão detalhados na seção 3. Para realizar o processamento de imagens com a aplicação de filtros foi desenvolvido um software de execução local, também conhecido como aplicativo desktop. Esse software foi desenvolvido na ferramenta Netbeans [9] versão 5.5 pela integração direta com os componentes gráficos SwingsJFC [5] e pela facilidade de desenvolvimento. Para implementação da computação distribuída destaca-se a RMI, Remote Method Invocation, que permite que objetos JAVA [2], presentes no mesmo computador ou em um ambiente distribuído, se comuniquem entre si por meio de chamadas remotas aos métodos que implementam [10]. A RMI oferece a transferência de objetos complexos, tipos de dados complexos, através de um mecanismo de serialização, cujo propósito principal é viabilizar a comunicação entre os objetos remotos, codificando-os como um fluxo de bytes. Para isso, duas classes são fundamentais: a ObjectOutputStream, que converte qualquer objeto Serializable” em fluxo de bytes para transmissão na rede; e a ObjectInputStream, que reconstitui os

Processamento de Imagem Distribuído e Orientado a Serviço ... · Processamento de Imagem Distribuído e Orientado a Serviço usando JAVA Frank José Affonso 1,2, ... A linguagem

Embed Size (px)

Citation preview

Processamento de Imagem Distribuído e Orientado a Serviço usando JAVA

Frank José Affonso 1,2, Evandro Luis Linhari Rodrigues 2 1-Centro Universitário Central Paulista (UNICEP) 2-Escola de Engenharia de São Carlos (EESC-USP)

([email protected] / [email protected]) ([email protected])

Abstract

This paper presents a methodology of distributed image processing that has the main objective to optimize the resource of machine available into network. To optimize the machine time to processing of image is introduced the concept of service orientation, which is responsible to find the available machine into network to help decrease the time of image processing. With the service oriented processing is possible the image processing to become dynamic, because depending of the algorithm or technique that is intended to apply, it is necessary the high number of machine to have a satisfactory processing time. To have a dynamic process were utilized two technologies, JINI and JavaSpace, which are complementary and work together to become the distributed processing more dynamic than traditional technology can offer actually. 1. Introdução

A atividade de processar uma imagem requer, em alguns casos, alto poder de processamento de máquina. Em algumas aplicações pode-se observar um ou mais computador(es) dedicado(s) para realizar esta atividade. O volume de processamento pode ser determinado em função dos algoritmos (cálculos) que se pretende realizar e, nota-se também, em determinados casos, o processamento é subutilizado e em outros se torna insuficiente. Para aperfeiçoar a relação investimento versus processamento, apresenta-se neste artigo uma metodologia para processamento distribuído de imagens e orientado a serviços, cujo principal enfoque é otimizar o processamento em função dos recursos computacionais.

Este artigo está organizado da seguinte maneira: na seção 2 são apresentados os trabalhos relacionados ao desenvolvimento deste; na seção 3 são apresentados os sistemas, local e orientado a serviços, de processamento de imagens com filtros e na seção 4 são apresentadas as conclusões finais. 2. Trabalhos Relacionados

A linguagem de programação JAVA [2] é considerada uma das mais poderosas e mais abrangentes das existentes

atualmente no mercado [1]. Ela pode ser caracterizada como uma linguagem orientada a objetos, robusta, interoperável, portável, multiplataforma e utilizada em vários ambientes de implementação computacional, devido à grande quantidade de APIs (Application Program Interface) existentes. Essas características levaram a Sun [3] investir num slogan que marcou a linguagem JAVA “compile uma vez e rode em qualquer lugar”. Neste artigo são abordadas APIs para Manipulação de Imagens (Image I/O) [4], para desenvolvimento de aplicações desktop (SwingJFC) [5] e para distribuição da aplicação na rede (RMI, JINI, JavaSpace) [6, 7 e 8].

A API Java Image I/O [4] oferece recursos para manipulação de imagens tanto em 2D quanto em 3D, para integração com aplicativos Swing [5] e para Web, para aplicativos que envolvem recursos OpenGL [4]. Apesar de oferecer suporte a grande quantidade de recursos, optou-se neste trabalho pela utilização de processamento de imagens em 2D com a aplicação de filtros, que são operações matemáticas capazes de realizar as mudanças nas imagens originais. Os detalhes da escolha deste tipo de imagem e filtros que serão aplicados serão detalhados na seção 3.

Para realizar o processamento de imagens com a aplicação de filtros foi desenvolvido um software de execução local, também conhecido como aplicativo desktop. Esse software foi desenvolvido na ferramenta Netbeans [9] versão 5.5 pela integração direta com os componentes gráficos SwingsJFC [5] e pela facilidade de desenvolvimento.

Para implementação da computação distribuída destaca-se a RMI, Remote Method Invocation, que permite que objetos JAVA [2], presentes no mesmo computador ou em um ambiente distribuído, se comuniquem entre si por meio de chamadas remotas aos métodos que implementam [10]. A RMI oferece a transferência de objetos complexos, tipos de dados complexos, através de um mecanismo de serialização, cujo propósito principal é viabilizar a comunicação entre os objetos remotos, codificando-os como um fluxo de bytes. Para isso, duas classes são fundamentais: a ObjectOutputStream, que converte qualquer objeto “Serializable” em fluxo de bytes para transmissão na rede; e a ObjectInputStream, que reconstitui os

bytes em objetos [6 e 10]. A tecnologia de distribuição JINI permite a integração

de serviços em um ambiente restrito, como uma rede local, ou amplo, como a Internet. Para permitir o acesso às funcionalidades por aplicações distintas, necessita-se que os serviços compartilhados possuam interfaces de Entrada/Saída bem definidas, pois podem, clientes e servidores, estar presentes em ambientes de execução heterogêneos, com diferentes protocolos de rede, sistemas operacionais, plataformas de hardware, entre outros [11].

Sobre os mecanismos de distribuição, a arquitetura JINI tem como base a RMI. Os clientes descobrem os serviços dinamicamente e fazem download das classes necessárias para utilização do serviço e depois fazem a utilização dos mesmos. Esse mecanismo de comunicação pode ter funcionamento semelhante ao plug-and-play, pois a aplicação que solicita um serviço não instala qualquer aplicativo adicional (driver) [11]. Basicamente, a arquitetura JINI [7] é composta por três itens: provedores de serviços (servidores), consumidores (clientes) e os localizadores de serviços (lookup).

O serviço JavaSpace faz parte da arquitetura JINI e contribui para o desenvolvimento de aplicações distribuídas viabilizando a comunicação entre objetos, o compartilhamento de objetos na rede e a coordenação de tarefas em áreas de memória compartilhadas. Seu objetivo principal é controlar áreas de memória escrevendo, entregando e lendo dados de maneira isolada, por apenas um objeto, ou transacional, por um conjunto de objetos [8 e 11]. Assim como no JINI, o localizador de serviços está presente no JavaSpace com a mesma finalidade.

Em [12 e 13] são abordados o processamento de imagens utilizando clusters. Os autores apresentam um sistema de recuperação de imagens por conteúdo, em que é fornecido ao sistema um conjunto de atributos que qualificam e quantificam determinadas características das imagens. Ao realizar o processamento de pesquisa, essas informações são encaminhadas a um cluster de processamento que executa a pesquisa e devolve o resultado para o diagnóstico. Esse tipo de sistema requer uma estrutura computacional pré-configurada para realização das operações, com isso, elevando o custo da implementação. 3. Processamento de Imagens Local e Orientado a Serviços

Esta seção apresenta, de maneira detalhada, a descrição dos sistemas de processamento de imagens. Inicialmente é descrito o sistema local para aplicação de filtros e, posteriormente, a distribuição desse sistema em um processamento distribuído e orientado a serviços.

Para o desenvolvimento de ambos os sistemas, diagramas da UML foram confeccionados, pois representam graficamente a troca de mensagens entre os objetos. As Figuras 1(a) e (b) mostram, respectivamente, a modelagem do sistema e sua implementação. A classe Java2DMain representa o programa principal, ou seja, ela é invocada pela JVM, Java Virtual Machine, e produz o programa visualizado na Figura 1 (b).

Figura 1 - Diagrama UML e Sistema de Processamento de Imagem (Aplicação de Filtros Simples)

(a)

(b)

A modelagem e implementação deste software seguem o padrão de projeto MVC [14], Model View Control. A classe Java2DMain representa a lógica do sistema, ou seja, o programa principal, pois executa chamada para as demais classes do sistema. A classe ImagePanelView representa a visão do sistema, a qual contém o componente responsável por exibir imagem original e as correspondentes alterações aplicadas pelos filtros. As classes SharpenFilter, InvertFilter, ColorFilter e BlurFilter implementam a

interface Java2DImageFilter, ou seja, assinam um contrato que devem implementar o método processImage(). Em cada uma das classes existe uma implementação (filtro) para este método. Sobre seu funcionamento pode-se dizer que recebe uma imagem presente na visão do usuário (ImagePanelView), realiza o processamento aplicando sobre ela o filtro que implementa e devolve para ser exibida novamente. A Figura 2 mostra a imagem original e a aplicação de todos os filtros que este programa implementa.

Figura 2 - Filtros aplicados na imagem

O sistema apresentado para processamento de imagem com a aplicação de filtros trata-se de uma aplicação exemplo para simular o processamento distribuído e orientado a serviço. O sistema proposto é uma aplicação stand-alone que executa de maneira síncrona consumindo todo tempo de máquina possível até o fim da realização da aplicação do filtro.

Quanto ao tipo de processamento pode-se dizer que exige equipamentos dedicados, que pode ser apenas uma unidade de processamento (microcomputador) ou várias

(cluster de microcomputadores). Em ambos os casos existem paradoxos a serem tratados, tais como:

• Uma unidade de processamento: requer baixo investimento, mas pode ser insuficiente dependendo to tipo de processamento que se pretende realizar, acarretando em alto tipo de processamento;

• Várias unidades (cluster): requer maior investimento em equipamentos, tende a apresentar maior poder processamento,

Filtro: Inverte Cores Filtro: Enfatiza

Filtro: Mancha Filtro: Altera Cores

Imagem Original

conseqüentemente otimização de tempo. No entanto, em alguns casos a implementação pode ser subutilizada, ou seja, pode ocasionar ociosidade de processamento.

Em ambos os casos existem problemas quanto à

otimização de processamento. A solução ideal é a uma unidade de processamento reconfigurável capaz de incluir ou excluir processamento de máquina conforme a necessidade da aplicação.

Para viabilizar essa estrutura, um sistema distribuído e orientado a serviços foi desenvolvido. Sua estrutura também está relacionada a uma rede de computadores local ou distribuída, porém sem a dedicação exclusiva. A constituição de todos os nós de processamento é

centralizada na unidade principal de processamento, encarregada de reconhecer e encaminhar/receber o processamento/processado.

No sistema atual, a unidade principal de processamento possui N nós. Para aplicar um filtro a uma determinada imagem o usuário informa o nome do arquivo (imagem a ser processada) o número M de nós (sendo M <= N) que serão utilizados no processamento e o filtro que se pretende aplicar.

A aplicação central fragmenta a imagem em partes menores e encaminha para os demais nós para realizar o processamento. Ao terminar o processamento, cada nó, devolve para a aplicação central o que foi processado para que a imagem seja reconstituída e apresentada para o usuário, conforme mostra a Figura 3.

Figura 3 – Estrutura de Processamento Distribuído Orientado a Serviços Para implementar um sistema distribuído orientado a

serviços é necessário que cada nó processador seja identificado e localizado pela aplicação central. A tecnologia JINI assim como a JavaSpace trabalham com o conceito de nomes em URLs, Uniform Resource Locator. Uma URL é formada pela localização da unidade de processamento na rede por meio de seu endereço IP,

Internet Protocol, ou nome na rede, e pelo nome que lhe é atribuído pela aplicação servidora. Além disso, essas tecnologias requerem que um gerenciador de transação seja criado para interligar e facilitar o gerenciamento das aplicações na rede, recebimento do que processar, do processamento e da devolução daquilo que foi

Imagem Original

Imagem Processada

Processador de Imagens (Cliente)

JavaSpace

Fragmenta Processamento

Entrada de Imagem

Reconstitui Processada Saída de Imagem

Nodo Processado (1)

Nodo Processador (2)

Nodo Processador (3)

Nodo Processador (4)

Nodo Processador (N)

. . . .

Imagem Filtro Unidades de processamento

Imagem Modificada

Imagem Processada

Imagem Original

Imagem Processada

Imagem Original

processado. A Figura 4 mostra a composição de URL e gerenciador de transações. Figura 4 - Trecho de código para definição da URL e

do Gerenciador de Transação JINI/JavaSpace

Conforme apresentado nesta seção, o usuário ao realizar o processamento da imagem, faz a escolha de quantos nós serão utilizados. Isso torna o processamento estático e preserva problemas da aplicação stand-alone , subutilização de recurso ou lentidão no processamento. Para minimizar esses problemas o usuário pode utilizar um recurso adicional para o dimensionamento do tamanho da imagem quanto ao processamento a ser realizado, que corresponde a um detector do tamanho do arquivo.

Na fase inicial o usuário pode optar por uma sugestão do sistema quanto ao tempo de processamento e os nós necessários para melhor otimização. Para oferecer essa sugestão o sistema avalia as entradas fornecidas pelo usuário e compara com uma base de informações heurísticas. Estas são medições realizadas anteriormente e estabelecidas como estimativas para os processamentos futuros. 4. Conclusões

Este artigo mostra uma metodologia para o processamento de imagens realizado de maneira stand-alone, distribuído em cluster e distribuído orientado a serviço. Em todos os casos existe uma relação de custo financeiro na estrutura de processamento e no tempo para sua realização. Destaca-se na terceira opção a otimização que pode ser realizada em relação ao que deve ser processado. As tecnologias JINI e JavaSpace permitem o

desenvolvimento de unidades de processamento configuráveis e dinâmicas em tempo de execução.

O processamento dinâmico abordado neste artigo minimiza problemas de subutilização de recursos ou elevados tempos de processamento. Além disso, o usuário pode utilizar um apoio computacional que dimensione o número de nós necessários para que uma imagem seja processada em um determinado tempo.

O software desenvolvido permite que sejam aplicados filtros para exemplificar o processamento de imagem de maneira local e distribuída. O objetivo deste comparativo não é abordar o processamento realizado e sim enfatizar a distribuição que pode ser realizada e os aspectos dinâmicos abordados. No entanto, a estrutura distribuída apresenta melhor otimização à medida que a complexidade de processamento aumenta, pois apesar de haver divisão e reconstituição de tarefas para realização do processamento de imagens o resultado final tende a ser mais otimizado se comparado ao stand-alone.

Como atividade futura para continuidade deste trabalho pretende-se realizar a otimização de distribuição, pois determinados tipos de imagem podem passar por um processo de compactação e ter seu tempo de transmissão pela rede reduzido significativamente. Para isso, devem ser realizados vários testes para avaliar seu desempenho e formar um conjunto de medidas que servirão de referência para o usuário em processamentos futuros. 5. Referências Bibliográficas [1] H. M. Deitel & P. J. Deitel, “Java, como programar”, tradução Edson Furnankiewicz. 6a. ed. São Paulo: Pearson Prentice Hall. 2005; [2] SUN-JAVA. Site oficial da sun microsystem para o JAVASE. Disponível em: <http://java.sun.com/ javase/6/>. Acessado em: 01 de ago. 2007; [3] SUN. Site oficial da sun microsystem. Disponível em: < http://java.sun.com>. Acessado em: 01 de ago. 2007; [4] SUN-JAVA. Site oficial da sun microsystem para Image I/O. Disponível em: <http://java.sun.com/javase/6/ docs/technotes/guides/imageio/index.html>.Acessado em: 01 de ago. 2007; [5] SUN-JAVA. Site oficial da sun microsystem para Swing JFC. Disponível em: <http://java.sun.com/javase/ 6/docs/technotes/guides/swing/index.html>. Acessado em: 01 de ago. 2007; [6] SUN-JAVA. Site oficial da sun microsystem para RMI. Disponível em: <http://java.sun.com/javase/6/ docs/technotes/guides/rmi/index.html>. Acessado em: 01 de ago. 2007;

private JavaSpace space; ... //Trecho que define a URL String url = "jini://" + hostname; JavaSpaceFinder finder = new JavaSpaceFinder(url); space = finder.getJavaSpace(); // Trecho que define o Gerenciador de transação. TransactionManagerFinder findTransaction = new TransactionManagerFinder(url); manager = findTransaction.getTransactionManager(); ...

Nome do microcomputador na rede

[7] SUN-JAVA. Site oficial da sun microsystem para JINI. Disponível em: <http://www.sun.com/software/ jini/>. Acessado em: 01 de ago. 2007; [8] E. Freeman, S. Hupfer, K. Arnold, “JavaSpace Principles, Patterns, and Practice”, Ed. Addilson Wesley ISBN: 0-201-30955-6, 1999; [9] NETBEANS, Site oficial do netbeans. Disponível em: <http://www.netbeans.org>. Acessado em: 02 de ago. 2007; [10] H. M. Deitel & P. J. Deitel, “Java, como programar”, tradução Edson Furnankiewicz. 3a. ed. Porto Alegre : Bookman. 2001; [11] H. M. Deitel, P. J. Deitel, and S. E. Santry. “Advanced Java 2 Plataform, How to Program”. Ed.

Prentice Hall, ISBN: 0-13-089560-1, 2001; [12] M. Guld, B. Wein, D. Keysers, C. Thies, M. Kohnen, H. Schubert, and T. Lehmann, "A distributed architecture for content-based image retrieval in medical applications," in Proceedings of the 2nd International Workshop on Pattern Recognition in Information Systems, pp. 299--314, 2002; [13] Mark O. Güld, Christian Thies, Benedikt Fischer, Daniel Keysers, Berthold B. Wein, Thomas M. Lehmann. “A Platform for Distributed Image Processing and Image Retrieval”, Department of Medical Informatics, 2003; [14] E. Freeman, E. Freeman, K. Sierra, B. Bates. Head First Design Patterns. Ed. O’Relley, ISBN:0-596-00712-4, páginas 500 – 561;