iAR 2.0: API otimizada para aplicações de entretenimento em realidade aumentada na plataforma iOS Állan Milbratz de Camargo Orientador: Dalton Solano dos Reis FURB – Universidade Regional de Blumenau DSC – Departamento de Sistemas e Computação Grupo de Pesquisa em Computação Gráfica, Processamento de Imagens e Entretenimento Digital
Roteiro Introdução Fundamentação Desenvolvimento Operacionalidade Resultados Conclusões Demonstração
Introdução iPhone Augmented Reality 2.0 API de realidade aumentada para iOS Novas versões das bibliotecas e SO Processamento paralelo com SIMD
Fundamentação API de Realidade Aumentada Desenvolvida por Jonathan Hess em 2011/2 Objetos virtuais sobrepostos ao mundo real Plataforma iOS versão 4 Necessitava de otimizações
Fundamentação Novas versões Plataforma iOS versão 6 OpenCV versão ArUco versão Adicionada arquitetura Armv7s
Fundamentação Processamento paralelo Single Instruction Multiple Data Módulo NEON do processador ARM Extensão de 128 bits para a arquitetura ARM 32 registradores com 64 bits de largura Dados de 8, 16, 32 e 64 bits em ponto flutuante ou inteiros
Fundamentação Trabalho correlato: AR Defender
Fundamentação Trabalho correlato: Vuforia
Requisitos a)permitir a captura de imagens através da câmera digital do dispositivo móvel (RF); b)utilizar processamento paralelo em tarefas complexas e/ou extensas (RF); c)disponibilizar de forma paramétrica os algoritmos de RA necessários para se criar uma aplicação de entretenimento (RF); d)ser implementada para a plataforma iOS (RNF).
Casos de uso
Classes
Sequência RA
Desenvolvimento Ferramentas XCode Instruments Enterprise Architect SourceTree Bitbucket CMake
Desenvolvimento Primeiro passo: analisar o desempenho
Método de threshold adaptivo 1.Filtro da imagem para comparação com a original 2.Designar zero ou o valor máximo (255) para cada pixel Desenvolvimento
Box filter Média ponderada dos vizinhos de cada pixel Desenvolvimento 1 – definir kernel 2 – calcular denominador 3 – buscar o próximo vizinho, aplicar peso 4 – calcular média, gravar no endereço de saída
Conversão de rotinas para assembler C++
Execução paralela com SIMD Desenvolvimento 1.Definição dos índices de busca 2.Preparação dos registradores 3.Cáculo da média utilizando shift right accumulate 4.Gravar o resultado em memória Para cada 8 pixels:
Conversão de rotinas para assembler C++ e SIMD
Conversão de rotinas para assembler ASM e SIMD
Método de threshold adaptivo Filtro da imagem para comparação com a original 2.Designar zero ou o valor máximo (255) para cada pixel Desenvolvimento
Execução paralela com SIMD Desenvolvimento 1.Carga dos registradores constantes 2.Carga dos registradores que serão comparados 3.Realizar comparação dos valores e atribuir o valor 4.Gravar o resultado em memória Para cada 8 pixels:
Método de threshold
Operacionalidade
Opções de interface Alternar entre modelos 3D e arestas simples Visualizar informações de desempenho Visualizar detalhes de desempenho
Resultados Características dos testes Versão 1.0 compilada para iOS 6 Realizados com o dispositivo iPhone 4S ARM Cortex-A9, dois núcleos de 800 MHz 512 MB de memória DDR2
Resultados Número de marcadores Memória (Megabytes) iARiAR2 12,522,53 2 2,54 3 2,55 Consumo de memória
Resultados Número de marcadores Quadros por segundo Tempo de Detecção (milisegundos) iARiAR2iARiAR2 18,5013,00126,2075,15 27,4011,00140,3390,50 35,9110,13170,12100,53 Desempenho global
Resultados Etapa de RA Tempo de execução (milisegundos) iARiAR2 Escala de cinza2,35 Threshold40,331,30 Detectar retângulos40,1333,42 Identificação marcadores28,9324,12 Refinar cantos1,050,05 Remover duplicatas0,050,02 Calcular matriz de posição13,1511,72 Desempenho das etapas de RA
Resultados Tipo de codificação Tempo de execução (milisegundos) C++13,35 C++ e SIMD8,50 Assembler e SIMD1,30 Desempenho das versões do algoritmo de threshold
Conclusão iPhone Augmented Reality 2.0 Realidade aumentada com desempenho melhorado Manteve as características funcionais da versão 1.0 Rotinas otimizadas com SIMD e Assembler Ainda há espaço para otimizações Open source
Extensões Otimizar ainda mais o motor de detecção, utilizando threads; Explorar os recursos de marcadores compostos; Implementar o reconhecimento de marcadores criados pelo usuário; Desenvolver mais a parte de renderização dos objetos 3D; Tornar a API mais independente da plataform iOS, visando compilar para outras plataformas ARM.
Amostra de buffer: Box filter
Amostra de buffer: Threshold
Sequência Macro
Método de threshold