Table of Contents

AR data flow

Este artigo apresenta o data flow no EasyAR Sense. O EasyAR Sense usa APIs componentizadas, e os componentes são conectados por data flow.

Dados de entrada e saída

fundamentals dataflow input output

InputFrame: Input frame. Contém a image, camera parameters, timestamp, camera transform relativo ao world coordinate system e tracking status. Entre eles, camera parameters, timestamp, camera transform relativo ao world coordinate system e tracking status são optional, mas algorithm components específicos têm requisitos específicos para o input.

OutputFrame: Output frame. Contém o input frame e os output results dos synchronous processing components.

FeedbackFrame: Feedback frame. Contém um input frame e um historical output frame, e é usado por feedback-style synchronous processing components como ImageTracker.

Camera components

CameraDevice: Default camera no Windows, Mac, iOS e Android.

ARKitCameraDevice: Implementação default do ARKit no iOS.

ARCoreCameraDevice: Implementação default do ARCore no Android.

MotionTrackerCameraDevice: Implementa motion tracking e calcula as 6DoF coordinates do dispositivo por multi-sensor fusion. (somente Android)

ThreeDofCameraDevice: Adiciona 3DoF orientation à default camera.

InertialCameraDevice: Adiciona 3DoF orientation e plane translation baseada em inertial estimation à default camera.

custom camera device: Implementação de custom camera.

Algorithm components

Feedback-style synchronous processing component: precisa emitir results para cada camera image frame e precisa do processing result do frame anterior para evitar interferência mútua.

  • ImageTracker: implementa a detecção e o rastreamento de imagens planas.

  • ObjectTracker: implementa a detecção e o rastreamento de objetos 3D.

Componentes de processamento síncrono: precisam gerar resultados acompanhando a imagem da câmera em cada frame.

  • SurfaceTracker: implementa o rastreamento de superfícies do ambiente.

  • SparseSpatialMap: implementa sparse spatial maps, fornecendo a capacidade de escanear o espaço físico enquanto gera mapas de nuvem de pontos e realiza localização em tempo real.

  • MegaTracker: implementa a localização espacial Mega.

Componentes de processamento assíncrono: não precisam gerar resultados acompanhando a imagem da câmera em cada frame.

  • CloudRecognizer: implementa cloud recognition.

  • DenseSpatialMap: implementa dense spatial maps, que podem ser usados para implementar efeitos como collision e occlusion.

Verificação de availability de componentes

Todos os componentes têm uma função isAvailable, que pode ser usada para determinar se o componente está disponível.

Casos em que um componente está indisponível incluem:

  • Não está implementado no operating system atual.

  • As dependencies exigidas pelo componente não existem, como ARKit ou ARCore.

  • O componente não existe na version (variant) atual, por exemplo quando alguns recursos não existem em certas versões reduzidas.

  • O componente está indisponível sob a License atual.

Antes de usar um componente, sempre verifique se ele está disponível e execute o fallback ou prompt correspondente.

Data flow

A forma de conexão dos componentes é mostrada na figura abaixo.

fundamentals dataflow

Existe um uso especial em que o input é um feedback frame, como mostrado abaixo.

fundamentals dataflow feedback

Data flow helper classes

Portas de envio e recebimento do data flow. Cada componente precisa incluir essas portas.

Ramificação e mesclagem do data flow

  • InputFrameFork: divide um InputFrame em várias saídas paralelas.

  • OutputFrameFork: divide um OutputFrame em várias saídas paralelas.

  • OutputFrameJoin: mescla vários OutputFrame em um e mescla todos os resultados em Results. Observe que suas múltiplas conexões de entrada não devem ser conectadas enquanto houver entrada de dados, caso contrário, ele pode entrar em um estado em que não consegue produzir saída. Recomenda-se concluir as conexões de data flow antes de Camera iniciar.

  • FeedbackFrameFork: divide um FeedbackFrame em várias saídas paralelas.

Throttling e cache do data flow

Conversão do data flow

Limite do número de InputFrame

CameraDevice pode definir bufferCapacity, que é o número máximo de InputFrame que ele emite. O valor default atual é 8.

Custom cameras podem usar BufferPool para implementação.

Para o número de InputFrame exigido por cada componente, consulte a API documentation de cada componente.

Se o número de InputFrame for insuficiente, o data flow pode travar e fazer o rendering travar.

Se o número de InputFrame for insuficiente, também pode ocorrer o caso em que o rendering não trava na primeira inicialização, mas trava depois de mudar para background ou depois de pause/start dos componentes. Garanta que os testes cubram essa situação.

Conectar e desconectar

Não é recomendado conectar e desconectar enquanto o data flow está em execução.

Se for necessário conectar ou desconectar durante runtime, observe que isso só pode ser feito em um cut edge (após remover esse edge, o data flow é dividido em duas partes). Não pode ser feito em um edge em um cycle (aqui, cycle significa um ciclo formado por edges quando o data flow é visto como um undirected graph), no input de OutputFrameJoin ou no sideInput de InputFrameThrottler. Caso contrário, o data flow pode ficar preso em nodes como OutputFrameJoin e InputFrameThrottler, impedindo output.

Todos os algorithm components têm funcionalidades start/stop. Quando estão em stop, os frames não são processados, mas ainda são emitidos pelo componente, apenas sem results.

Uso típico

Veja a seguir o uso de um único ImageTracker, que pode ser usado para reconhecer e fazer tracking de planar image targets não repetidos.

fundamentals dataflow single ImageTracker

Veja a seguir o uso de um único ImageTracker, que pode ser usado para reconhecer e fazer tracking de planar image targets repetidos.

fundamentals dataflow multiple ImageTracker

Veja a seguir o uso de SparseSpatialMap, que pode ser usado para implementar sparse spatial map building, localization e tracking.

fundamentals dataflow SparseSpatialMap

Veja a seguir o uso conjunto de SparseSpatialMap e DenseSpatialMap, que pode ser usado para implementar sparse spatial map building, localization, tracking e dense spatial map generation.

fundamentals dataflow Sparse-DenseSpatialMap