Table of Contents

AR data flow

이 문서는 EasyAR Sense 의 data flow 를 소개합니다. EasyAR Sense 는 컴포넌트화된 API 를 사용하며, 컴포넌트 사이를 data flow 로 연결합니다.

Input 및 output data

fundamentals dataflow input output

InputFrame: input frame. image, camera parameters, timestamp, world coordinate system 에 대한 camera transform, tracking status 를 포함합니다. 이 중 camera parameters, timestamp, world coordinate system 에 대한 camera transform, tracking status 는 optional 이지만, 특정 algorithm components 는 input 에 대한 특정 요구 사항이 있습니다.

OutputFrame: output frame. input frame 과 synchronous processing components 의 output results 를 포함합니다.

FeedbackFrame: feedback frame. 하나의 input frame 과 하나의 historical output frame 을 포함하며, ImageTracker 같은 feedback-style synchronous processing components 에 사용됩니다.

Camera components

CameraDevice: Windows, Mac, iOS, Android 의 default camera.

ARKitCameraDevice: iOS 의 ARKit default implementation.

ARCoreCameraDevice: Android 의 ARCore default implementation.

MotionTrackerCameraDevice: motion tracking 을 구현하고 multi-sensor fusion 으로 디바이스의 6DoF coordinates 를 계산합니다. (Android 만 지원)

ThreeDofCameraDevice: default camera 에 3DoF orientation 을 추가합니다.

InertialCameraDevice: default camera 에 3DoF orientation 과 inertial estimation 기반 plane translation 을 추가합니다.

custom camera device: custom camera 구현.

Algorithm components

Feedback-style synchronous processing component: 각 camera image frame 마다 result 를 출력해야 하며, 상호 간섭을 피하기 위해 이전 frame 의 processing result 가 필요합니다.

  • ImageTracker: 평면 이미지의 감지 및 추적을 구현합니다.

  • ObjectTracker: 3D 객체의 감지 및 추적을 구현합니다.

동기 처리 컴포넌트: 각 프레임마다 카메라 이미지를 따라 결과를 출력해야 합니다.

  • SurfaceTracker: 환경 표면 추적을 구현합니다.

  • SparseSpatialMap: sparse spatial map을 구현하여 물리 공간을 스캔하면서 point cloud map을 생성하고 실시간 로컬라이제이션을 수행하는 기능을 제공합니다.

  • MegaTracker: Mega 공간 로컬라이제이션을 구현합니다.

비동기 처리 컴포넌트: 각 프레임마다 카메라 이미지를 따라 결과를 출력할 필요가 없습니다.

  • CloudRecognizer: cloud recognition을 구현합니다.

  • DenseSpatialMap: dense spatial map을 구현하며, collision 및 occlusion과 같은 효과를 구현하는 데 사용할 수 있습니다.

컴포넌트 availability 확인

모든 컴포넌트에는 isAvailable 함수가 있으며, 해당 컴포넌트를 사용할 수 있는지 판단하는 데 사용할 수 있습니다.

컴포넌트를 사용할 수 없는 경우는 다음과 같습니다.

  • 현재 operating system 에 구현되어 있지 않습니다.

  • 컴포넌트에 필요한 dependencies 가 없습니다. 예: ARKit, ARCore.

  • 현재 version(variant)에 컴포넌트가 없습니다. 예를 들어 일부 경량 버전에는 특정 기능이 없습니다.

  • 현재 License 에서 컴포넌트를 사용할 수 없습니다.

컴포넌트를 사용하기 전에 반드시 사용 가능 여부를 판단하고, 해당 fallback 또는 prompt 를 수행하십시오.

Data flow

컴포넌트 연결 방식은 아래 그림과 같습니다.

fundamentals dataflow

input 이 feedback frame 인 특수한 사용 방식이 있으며, 아래 그림과 같습니다.

fundamentals dataflow feedback

Data flow helper classes

data flow 의 송신 및 수신 port 입니다. 각 컴포넌트는 이 port 들을 포함해야 합니다.

data flow의 분기와 병합

  • InputFrameFork: 하나의 InputFrame을 여러 병렬 출력으로 나눕니다.

  • OutputFrameFork: 하나의 OutputFrame을 여러 병렬 출력으로 나눕니다.

  • OutputFrameJoin: 여러 OutputFrame을 하나로 병합하고 모든 결과를 Results에 병합합니다. 여러 입력 연결은 데이터가 유입되는 동안 연결해서는 안 됩니다. 그렇지 않으면 출력을 생성할 수 없는 상태에 빠질 수 있습니다. Camera 시작 전에 data flow 연결을 완료하는 것이 좋습니다.

  • FeedbackFrameFork: 하나의 FeedbackFrame을 여러 병렬 출력으로 나눕니다.

data flow의 throttling 및 캐싱

data flow의 변환

InputFrame 수 제한

CameraDevice 는 bufferCapacity 를 설정할 수 있으며, 이는 출력하는 InputFrame 의 최대 수입니다. 현재 default 값은 8 입니다.

custom camera 는 BufferPool 을 사용하여 구현할 수 있습니다.

각 컴포넌트가 필요로 하는 InputFrame 수는 각 컴포넌트의 API documentation 을 참고하십시오.

InputFrame 수가 부족하면 data flow 가 막혀 rendering 이 멈출 수 있습니다.

InputFrame 수가 부족하면 첫 startup 에서는 rendering 이 멈추지 않지만 background 로 전환하거나 각 컴포넌트를 pause/start 한 뒤 rendering 이 멈추는 상황도 발생할 수 있습니다. 테스트 시 이 상황을 반드시 포함하십시오.

연결 및 연결 해제

data flow 실행 중에는 connect 및 disconnect 를 권장하지 않습니다.

runtime 중 connect 또는 disconnect 가 필요한 경우, cut edge(이 edge 를 제거하면 data flow 가 두 부분으로 나뉘는 edge)에서만 수행할 수 있다는 점에 유의하십시오. cycle 의 edge(여기서 cycle 은 data flow 를 undirected graph 로 볼 때 edge 로 구성되는 cycle), OutputFrameJoin 의 input 또는 InputFrameThrottler 의 sideInput 에서는 수행할 수 없습니다. 그렇지 않으면 data flow 가 OutputFrameJoinInputFrameThrottler 같은 nodes 에서 막혀 output 할 수 없는 상태가 될 수 있습니다.

모든 algorithm components 에는 start/stop 기능이 있습니다. stop 상태에서는 frames 가 처리되지 않지만, 결과가 없는 상태로 컴포넌트에서 계속 출력됩니다.

일반적인 사용법

다음은 단일 ImageTracker 의 사용법으로, 반복되지 않는 planar image targets 를 인식하고 tracking 하는 데 사용할 수 있습니다.

fundamentals dataflow single ImageTracker

다음은 단일 ImageTracker 의 사용법으로, 반복되는 planar image targets 를 인식하고 tracking 하는 데 사용할 수 있습니다.

fundamentals dataflow multiple ImageTracker

다음은 SparseSpatialMap 의 사용법으로, sparse spatial map building, localization, tracking 구현에 사용할 수 있습니다.

fundamentals dataflow SparseSpatialMap

다음은 SparseSpatialMapDenseSpatialMap 을 동시에 사용하는 방법으로, sparse spatial map building, localization, tracking 및 dense spatial map generation 구현에 사용할 수 있습니다.

fundamentals dataflow Sparse-DenseSpatialMap