“Explorando Modelos Virtuais 3D com Realidade Aumentada no SDK do iPhone” Jonathan Hess orientado por Dalton Solano dos Reis
Roteiro da Apresentação Introdução Fundamentação Desenvolvimento Operacionalidade Resultados obtidos Conclusão Demonstração
Introdução iPhone Augmented Reality API de realidade aumentada para iOS Marker-based tracking
Fundamentação Realidade aumentada Objetos virtuais em meio físico Marcações ou coordenadas do GPS (pontos de interesse)
Fundamentação Principais APIs OpenGL ES gráficos 3D OpenCV filtros de imagem ArUco detecção de marcações (depende do OpenCV)
Fundamentação Transformações 3D Matrizes de modelação-visualização e projeção Translação, rotação e escala
Fundamentação ArUco 0 – identificações Código de Hamming modificado Geração de matrizes de modelação-visualização
Fundamentação Calibragem da câmera Fatores de projeção e distorção da lente do dispositivo Arquivo YML carregado pela ArUco
Fundamentação NEON Operações paralelas em elementos semelhantes (SIMD) Cooprocessador da arquitetura ARMv7
Fundamentação Trabalho correlato: Parallel Tracking and Mapping Markless tracking
Fundamentação Trabalho correlato: ARhrrrr!!! Jogo de RA com templates de cenários
Fundamentação Trabalho correlato: Layar Registro de pontos de interesse por GPS
Requisitos ①Permitir a captura de imagens do mundo real através da câmera digital do dispositivo (RF); ②Permitir a calibragem da disposição dos objetos através de códigos de barras (RF); ③Sobrepor as imagens obtidas através da câmera digital com objetos virtuais 3D de modo a parecer que os objetos coexistam (RF); ④Alterar a perspectiva da visão do usuário de acordo a movimentação do alvo da câmera digital (RF); ⑤Implementar a movimentação dos objetos para as posições que lhe são ordenados pelo usuário através de toques na tela (RF); ⑥Ser implementando para a plataforma iOS (RNF); ⑦Possuir documentação completa (RNF).
Casos de uso
Diagrama de classes
Diagrama de sequência
Desenvolvimento Principais ferramentas Xcode IDE Enterprise Architect especificação XP-Dev repositório SVN doxygen documentação
Desenvolvimento - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { CGRect bounds = [[UIScreen mainScreen] bounds]; window = [[UIWindow alloc] initWithFrame:bounds]; main = [[iARViewController alloc] initWithFrame:bounds]; [window makeKeyAndVisible]; [window setRootViewController:main]; return YES; } Acoplando motor de RA
Desenvolvimento Rotina de detecção de marcações - (void)didCaptureBufferProcessingFinish:(NSNotification *)notification { … detector.detect([videoInput buffer], markers, cameraParams, info.markerSz); … for (int i=0; i < markers.size(); i++) { Object *obj; if (!(obj = objManager->objectWithID(markers[i].id))) { continue; } M3DMatrix44d tempMtx; markers[i].glGetModelViewMatrix(tempMtx); obj->copyModelview(tempMtx); } … [graphics refreshWithMarkers:markers]; … }
Desenvolvimento Adicionando novos objetos 3D … WavefrontParser *parser = [[WavefrontParser alloc] init]; Object *cube = objManager->addObject(0); [parser parseIntoObject:cube …
Operacionalidade
Compatibilidade com vídeo
Operacionalidade
Opções do iAR Seleção dos modos de visualização 3D Monitoramento do desempenho da aplicação
Operacionalidade
Resultados obtidos Quantidade de facesTempo de análise (ms) 129, , ,67 Tempo de análise arquivos obj
Resultados obtidos Quantidade de objetos Quantidade total de faces visíveis Quadros por segundo 11250, , ,3 FPS / quantidade objetos 3D
Resultados obtidos Quantidade de marcações Tempo de detecção (ms) FPS 1507,511, ,911, ,441, ,961, ,821, ,351,04 Tempo de detecção de marcações Quantidade de marcações Tempo de detecção (ms) FPS 1543,331, ,091, ,241, ,231, ,821, ,081,02 SIMD original
Resultados obtidos SIMD original
Conclusão iPhone Augmented Reality Realidade aumentada: a nova geração de jogos e aplicações API funcional de fácil acoplagem para o iOS Necessita de otimizações Base para trabalhos mais sofisticados Projeto open source
Extensões ①Desenvolver a texturização de objetos 3D, onde as imagens 2D são carregáveis através dos arquivos mtl vinculados aos arquivos obj; ②Disponibilizar mais opções de interação com os objetos 3D além da rotação, que já existe na API; ③Otimizar o funcionamento do motor de detecção, reescrevendo os algoritmos de tratamento de imagens do OpenCV em formato SIMD; ④Disponibilizar métodos para o desenvolvimento de aplicações de RA mais robustas, como por exemplo, implementar diferentes comportamentos para cada tipo de objeto 3D que compõe o cenário da aplicação; ⑤Desenvolver o tratamento de colisões 3D; ⑥Aplicar algoritmos de inteligência artificial nos objetos 3D, o que pode ser útil para jogos de RA; ⑦Implementar o reconhecimento de templates mais genéricos (QR code, tabuleiros, etc.), além das marcações em preto e branco atualmente utilizadas, como por exemplo, logotipos de marcas direcionadas à intenções publicitárias.
Demonstração
Pipeline do OpenGL
Parâmetros intrínsecos
Identificação de marcações
Erro ray picking
Nvidia HD phone Configurações Tela sensível ao toque: 800×600; Câmera com 5.0 megapixels; GPU Nvidia Tegra;