Um Framework para Desenvolvimento de Aplicações de Realidade

Propaganda
Um Framework para Desenvolvimento de Aplicações de Realidade Aumentada de
Alto ível para Web
Maylson Lívio dos S. Gonçalves
Manoel Ribeiro Filho
Leonardo Santos de Aguiar
Waveit Technology
[email protected]
Universidade Federal do Pará
[email protected]
Centro Universitário do Pará
[email protected]
Abstract — This article presents the architecture of a
framework to develop high-end augmented reality web
applications using Ogre3D rendering engine and the marker
tracking library ARToolKitPlus. The framework uses the
game engine concept for the development of augmented
reality applications, which are compiled in native code and
executed into the browser through Java Plugins, using Java
ative Interfaces to access the native code, having a
considerable performance gain against the solutions
currently used.
Keywords: Web Augmented Reality, Ogre3D, ARToolKitPlus.
Resumo — Este artigo apresenta a arquitetura de um
framework para desenvolvimento de aplicações de realidade
aumentada de alto nível para a internet, utilizando o motor
de renderização Ogre3D e a biblioteca de rastreamento de
marcador ARToolkitPlus. O framework utiliza-se do
conceito de motor de jogos para o desenvolvimento das
aplicações de realidade aumentada, que são compiladas em
código nativo e executadas no browser via Java Plugins,
utilizando Java ative Interfaces para acessar o código
nativo, tendo um considerável ganho de desempenho em
relação às soluções atualmente utilizadas.
Palavras-chave:
ARToolKitPlus.
Realidade
I.
Aumentada
Web,
Ogre3D,
INTRODUÇÃO
A Realidade Aumentada (RA) é definida como uma
fusão entre o mundo real e objetos virtuais, criando um
cenário no qual as informações contidas no mundo real são
incrementadas com objetos virtuais gerados por
computador [1], utilizando-se um software adequado,
geralmente em conjunto com uma webcam e um marcador.
Essa tecnologia tem sido bastante utilizada na internet
nos últimos anos, como forma de promover produtos e/ou
marcas, apresentando-as de forma inovadora em um site
como parte uma campanha publicitária. Além de servir
como instrumento de veiculação publicitária, a RA na web
pode ainda ser utilizada em aplicativos de ensino à
distância, em jogos eletrônicos, ferramentas colaborativas
etc.
Dessa forma, é importante desenvolver tecnologias que
permitam a distribuição de aplicações de realidade
aumentada de alto nível na internet, que estejam alinhadas
com as tecnologias 3D disponíveis atualmente, de maneira
a tirar máximo proveito das potencialidades dessa
tecnologia.
Atualmente, pode-se destacar a veiculação de
aplicações de RA na web através do uso do FLARToolKit
em conjunto com ActionScript 3.0, rodando no Adobe
Flash Player [2].
Neste contexto, este trabalho tem como objetivo
apresentar uma proposta para o desenvolvimento de
aplicações de realidade aumentada de alto nível para a
web, utilizando um framework multiplataforma projetado
em cima de ferramentas comuns no desenvolvimento de
jogos eletrônicos, como a engine de renderização gráfica
Ogre3D [3] e a biblioteca de rastreamento de marcador
ARToolKitPlus [4]. Para captura de vídeo foi utilizada a
biblioteca OpenCV [5], a qual é bastante popular no
desenvolvimento de aplicação de visão computacional.
Todas as três bibliotecas utilizam C++ como linguagem de
programação, provendo um grande ganho de desempenho
em relação ao FLARToolKit e ActionScript 3.0.
O framework proposto neste trabalho utiliza a
tecnologia Java Plugin [6] para a publicação do aplicativo
na web, usufruindo da tecnologia Java Native Interfaces
(JNI) [7], a qual permite que a uma aplicação Java acesse
código nativo de outra aplicação. A grande vantagem na
utilização de Java Plugins decorre do fato de que o Java
Runtime (ambiente de execução do Java) tem grande
penetração nos computadores atuais [8].
Este artigo está dividido da seguinte forma: a seção II
trata dos trabalhos relacionados. A seção III faz um breve
resumo das ferramentas utilizadas no desenvolvimento do
framework proposto. A seção IV mostra as definições da
arquitetura proposta. A seção V exemplifica como o
aplicativo desenvolvido é publicado na web. A seção VI
mostra alguns estudos de caso e, por fim, são feitas as
conclusões e perspectivas para trabalhos futuros.
II.
TRABALHOS RELACIONADOS
Os trabalhos relacionados encontrados na literatura
científica enquadram-se basicamente em dois campos
distintos: “aplicações de RA de alto nível” e “aplicações
de RA para web”. Para o primeiro item, pode-se citar o
trabalho de [9], que apresenta o OGREAR, um framework
de RA desenvolvido no GRVM (Grupo de Pesquisa em
Realidade Virtual e Multimídia do CIn UFPE). É
considerado por seus autores um framework genérico,
podendo ser utilizado para desenvolver aplicações de RA
tanto para desktop como para handheld.
Como visto em [9], a biblioteca OGREAR é
responsável por fazer uma interface entre a captura da
imagem e o tratamento desses valores. Este framework
permite calcular as características geométricas dos
marcadores presentes no frame para utilizá-los no mundo
virtual. A aquisição de imagens pode ser implementada
usando qualquer biblioteca de acesso à câmera e o
rastreamento de marcadores é independente de qualquer
biblioteca de detecção.
Pode-se citar ainda o Studierstube [10], que tem o seu
foco em aplicações multiplataforma, sendo composto de
bibliotecas para renderização, gerenciamento de mídia
(áudio, vídeo e câmera), distribuição em rede, além de
realizar rastreamento de marcadores com um wrapper
sobre o ARToolKitPlus.
Para o segundo item, os trabalhos encontrados na
literatura utilizam alguma arquitetura de sistema
distribuído, de forma que a aplicação de RA roda em um
servidor, de onde é distribuída aos clientes. Em [2] é
apresentado um middleware para distribuição de RA na
web, na qual o apresentador interage com o aplicativo que
então envia as saídas para os clientes. Em [11] é
apresentada uma ferramenta de distribuição de ambientes
virtuais para apoio a projetos multidisciplinares de ensino,
de modo que foram desenvolvidos dois protótipos: um na
área biológica e outro na área de química. Para a
distribuição foi utilizado o CORBA, utilizando arquitetura
cliente/servidor.
O framework apresentado neste trabalho difere dos
outros por se concentrar em RA de alto nível com foco em
distribuição fácil e acessível do aplicativo na internet, de
forma descentralizada, onde cada usuário carrega, executa
e interage com o aplicativo de RA no próprio browser.
III.
tempo-real. A biblioteca tem mais de 500 algoritmos
otimizados para essa função. Suas aplicações variam de
arte interativa à navegação robótica. Seu grupo de usuários
tem mais de 40 mil inscritos [5].
D. Java Plugins e Java )ative Interfaces
A tecnologia Java Plug-in, incluída como parte do Java
Runtime Environment Standard Edition, estabelece a
conexão entre o browser e a plataforma Java. Essa
conexão permite que Applets Java rodem no desktop, com
ou sem o browser. [6]
A tecnologia Java Native Interface é uma poderosa
ferramenta da plataforma Java. Aplicações que usam JNI
podem incorporar código nativo escrito em linguagens de
programação como C e C++, bem como código escrito em
Java. [7]
.
IV.
ARQUITETURA DO SISTEMA
A arquitetura do framework preza pela simplicidade e
pela modularidade, sendo sua compreensão bastante
simples. A Figura 1 mostra a arquitetura do framework em
suas diversas camadas.
No nível mais baixo, são encontradas suas bibliotecas
base, responsáveis pela renderização, captura de vídeo e
rastreamento de marcador. Logo acima, tem início a
camada de abstração do framework, responsável por
ocultar do usuário detalhes de acesso às bibliotecas do
nível anterior. Neste nível o usuário não precisa fazer
qualquer alteração, pois este deve trabalhar na camada
mais acima, a camada de aplicação. É na camada de
aplicação que o usuário pode desenvolver seu aplicativo,
podendo carregar uma cena com modelos 3D, luzes,
texturas etc. utilizando o módulo Scene Loader.
FERRAMENTAS
A. Ogre3D
O Ogre3D (Object-Oriented Graphics Rendering
Engine) é uma engine de renderização 3D desenvolvida
em C++, orientado a objetos, multiplataforma e open
source, muito utilizado no desenvolvimento de jogos
eletrônicos. Os recursos gráficos do Ogre3D incluem
suporte a OpenGL, OpenGL ES e DirectX [3].
B. ARToolKitPlus
ARToolKitPlus é uma versão estendida e orientada a
objetos da popular biblioteca de rastreamento de marcador
ARToolKit [4], no entanto, diferente desta, o
ARToolKitPlus foca apenas nos algoritmos de
rastreamento, sem prover qualquer meio de acessar a
webcam ou efetuar qualquer renderização.
C. OpenCV
OpenCV (Open Source Computer Vision) é uma
biblioteca para programação de visão computacional em
Figura 1. Arquitetura do framework proposto.
Cada módulo do framework tem uma função específica
e bem definida que auxiliam o programador a desenvolver
o aplicativo rapidamente. Juntos, estes módulos
praticamente eliminam a preocupação com a parte de RA
do aplicativo.
Os módulos do framework são:
A. Manager
O Manager é uma das partes mais importantes do
framework, embora deva ficar oculto ao usuário. Este
módulo é responsável por gerenciar todo o ciclo de vida do
aplicativo, desde sua inicialização até o controle do game
loop.
mesma forma, para gerar o arquivo JAR que conterá os
binários do aplicativo, é necessário colocar na mesma
pasta o binário do Launcher (Launcher.class) e a DLL
gerada pelo framework (framework.dll).
B. Game State Manager
Este módulo faz a interface entre o Manager e a
aplicação do usuário. Cada aplicação do usuário é um
Game State, ficando o Game State Manager responsável
pelo gerenciamento de todos os Game States.
Sendo gerado o arquivo “bin.jar”. O próximo passo é
assinar os arquivos JAR.
C. Scene Loader
Este módulo é responsável por inicializar os recursos
do Ogre3D, recebendo como parâmetro um arquivo XML
contendo toda a descrição da cena, como posição dos
modelos, escala, rotação, luz ambiente etc.
D. Java Callbacks
O módulo Java Callbacks é responsável pela
implementação da interface de comunicação com o Java,
expondo alguns métodos do Manager para que a aplicação
possa ser inicializada, atualizada e encerrada através do
Java. Além disso, esse módulo também implementa
alguns métodos responsáveis por injetar input recebido do
Java para o framework.
Uma vez que a aplicação tenha sido desenvolvida,
utiliza-se o Launcher, um simples Java Applet responsável
por enviar os comandos de input para o framework e
receber a renderização realizada por este a cada frame.
V.
jar.exe cfv bin.jar framework.dll Launcher.class
B. Assinatura digital dos arquivos JAR
Por fazer uso da tecnologia JNI, o Launcher priva-se
do ambiente seguro e gerenciado do Java e quebra, a
princípio, a portabilidade do aplicativo, uma vez que o
código nativo só poderá ser executado na plataforma para
a qual foi compilado. Desse modo, como forma de impor
uma maior segurança aos Applets, é necessário assinar
digitalmente os arquivos JAR, de forma que o usuário será
alertado sobre a execução do aplicativo e lhe será
perguntado se deseja executá-lo no browser.
É possível criar uma assinatura digital para os arquivos
JAR utilizando ferramentas disponibilizadas pelo próprio
Java, como o keytool e o jarsigner.
C. Arquivo J)LP
Aplicações desenvolvidas com o Java Plugin são
inicializadas utilizando Java Network Launch Protocol
(JNLP), o que implica na criação de um arquivo JNLP
que contém instruções para o Java baixar os arquivos JAR
requeridos e inicializar o aplicativo, além de passar outros
parâmetros úteis ao Launcher, como as dimensões do
Applet, por exemplo.
DISTRIBUINDO O APLICATIVO NA WEB
Disponibilizar o aplicativo na internet torna-se bastante
simples. É necessário apenas colocar os pacotes JAR no
servidor web, assinados digitalmente, definir alguns
parâmetros no arquivo JNLP e colocar o pequeno código
JavaScript no site, responsável por carregar o Applet Java.
Todo esse processo é descrito a seguir.
A. Pacotes JAR
A tecnologia Java Plugin requer que todos os arquivos
necessários à execução do aplicativo estejam compactados
no formato JAR. Dessa forma, é necessário compactar
toda a media da aplicação, bem como todos os binários
necessários.
Por exemplo, se uma determinada aplicação utiliza os
arquivos “Modelos.zip” e “Texturas.zip” como fonte de
media, basta colocá-los na mesma pasta, abrir o terminal e
executar o comando:
jar.exe cfv media.jar Modelos.zip Texturas.zip
Assim é gerado o arquivo “media.jar”, contendo toda a
media necessária à correta execução do aplicativo. Da
D. Website
Para publicar o aplicativo num website, é necessário
colocar os arquivos JAR no servidor e carregar o Applet
utilizando JavaScript, como o exemplo abaixo.
<script
src="http://www.java.com/js/deployJava.js">
</script>
<script>
var attributes = {code: 'Launcher.class',
width: 1024,
height: 480,
archive: 'bin.jar'};
var params = {jnlp_href: aplicativo.jnlp',
separate_jvm: 'true'} ;
deployJava.runApplet(attributes, params, '1.6');
</script>
VI.
ESTUDOS DE CASO
Como forma de avaliar as potencialidades deste
framework, foram desenvolvidas algumas aplicações de
RA e disponibilizadas na web. Os exemplos desenvolvidos
incluem técnicas como skeleton animation, shaders e
modelos 3D high-poly.
Nos testes realizados, o aplicativo mostrou-se bastante
robusto, rodando sem problemas no Windows XP, Vista e
Seven, nos browsers Internet Explorer, Firefox, Opera,
Safari e Chrome, em um computador Intel Pentium 4, com
2 GB de RAM, placa de vídeo GeForce 8400.
A Figura 2 mostra um aplicativo de RA que exibe uma
cena com vários modelos, somando mais de 50 mil
polígonos. Adicionalmente, é aplicado um shader
responsável por gerar o efeito de Ambient Occlusion em
tempo-real. Nesse aplicativo específico, o computador do
usuário precisa ter uma placa de vídeo com suporte a
Vertex Shaders. Caso não tenha, uma mensagem é exibida
indicando que o computador não cumpre a configuração
mínima requerida.
VII. CONCLUSÕES
Nos testes realizados o aplicativo mostrou-se bastante
eficiente, atingindo valores na faixa de 60 FPS. Este
trabalho permite que aplicações de alta qualidade sejam
distribuídas na internet de maneira simples, utilizando toda
a capacidade gráfica do Ogre3D, tal como acesso à GPU,
Shaders, Skeletal Animations, scene graph, etc.
Como trabalho futuro, pretende-se expandir o
framework adicionando outras bibliotecas que realizem
funções específicas, como renderização de vídeo in-game,
simulação de física e reprodução de áudio 3D posicional.
Além disso, o Launcher precisa ainda ser melhorado para
que fique completamente independente da aplicação que
está sendo desenvolvida, de forma que os atributos
necessários sejam passados como parâmetros no arquivo
JNLP, evitando ter de alterá-los via código. O framework
precisa ser portado para outras plataformas como Linux e
Mac, pois o uso de Java com JNI depende da plataformaalvo. É necessário ainda fazer uma comparação entre dois
aplicativos de realidade aumentada semelhantes, sendo um
desenvolvido com FLARToolKit e ActionScript 3.0 e
outro desenvolvido com o framework proposto neste
artigo. Um exemplo de aplicação está acessível em
www.waveit.com.br/svr2011.
REFERÊNCIAS
[1]
Figura 2. Cena com mais de 50 mil polígonos utilizando shaders.
A Figura 3 mostra um exemplo de RA desenvolvido
com o framework, que faz uso de Skeletal Animation e
Hardware/Software Skinning.
Figura 3. RA com Skeleton Animation e Hardware Skinning.
R. T. Azuma. “Recent advances in augmented reality,” IEEE
Computer Graphics and Applications, 21:34–47, 2001.
[2] M. D. Silva, E. S. Santos, W. V. Arantes, L. V. de O. Lima, A.
Cardoso, E. Lamounier, “Uma proposta de um middleware para
distribuição de realidade aumentada pela web como ferramenta de
apoio para educação a distância,” VI Workshop de Realidade
Virtual e Aumentada, 2009.
[3] G. Junker, Pro Ogre 3D Programming, Apress, USA, 2006.
[4] D. Wagner, D. Schmalstieg, “ARToolKitPlus for Pose Tracking on
Mobile Devices,” Proceedings of XII Computer Vision Winter
Workshop, 2007.
[5] G. Bradski, A. Kaehler, Learning OpenCV: Computer Vision with
the OpenCV Library, O’Reilly Media, USA, 2008.
[6] Java
Plugin
Technology,
Disponível
em:
http://www.oracle.com/technetwork/java/index-jsp-141438.html.
Acesso em 11 de março de 2011.
[7] G. Bradski, A. Kaehler, Java Native Interface: Programmer's
Guide and Specification, Prentice Hall, USA, 1999.
[8] Flash
Player
Penetration,
Disponível
em:
http://www.adobe.com/products/player_census/flashplayer/.
Acesso em 11 de março de 2011.
[9] T. Farias, J. Lima, V. Teichrieb, J. Kelner. “Construção de
Aplicações de Realidade Aumentada Utilizando Bibliotecas de
Alto Nível,” Workshop de Aplicações de Realidade Virtual,
Recife, pp. 1-4, 2006.
[10] D. Schmalstieg, A. Fuhrmann, G. Hesina, Z. Szalavari, L.
Encarnação, M. Gervautz, W. Purgathofer. “The Studierstube
augmented reality project,” Teleoperators and Virtual
Environments, vol. 11, issue 1, pp 32-45, 2002.
[11] M. W. de S. Ribeiro. Arquitetura para distribuição de ambientes
vituais multidisciplinares. PhD thesis, Universidade Federal de
Uberlândia, 2006.
[12] Deploying a Java Web Start Application, Disponível em:
http://download.oracle.com/javase/tutorial/deployment/webstart/de
ploying.html. Acesso em 11 de março de 2011.
Download