Table of Contents

AR data flow

Dieser Artikel stellt den data flow in EasyAR Sense vor. EasyAR Sense verwendet komponentisierte APIs, und Komponenten werden über data flow verbunden.

Eingabe- und Ausgabedaten

fundamentals dataflow input output

InputFrame: Input frame. Enthält image, camera parameters, timestamp, camera transform relativ zum world coordinate system und tracking status. Davon sind camera parameters, timestamp, camera transform relativ zum world coordinate system und tracking status optional, aber bestimmte algorithm components stellen spezifische Anforderungen an den input.

OutputFrame: Output frame. Enthält den input frame und die output results der synchronous processing components.

FeedbackFrame: Feedback frame. Enthält einen input frame und einen historical output frame und wird von feedback-style synchronous processing components wie ImageTracker verwendet.

Camera components

CameraDevice: Default camera unter Windows, Mac, iOS und Android.

ARKitCameraDevice: Default-Implementierung von ARKit unter iOS.

ARCoreCameraDevice: Default-Implementierung von ARCore unter Android.

MotionTrackerCameraDevice: Implementiert motion tracking und berechnet die 6DoF coordinates des Geräts durch multi-sensor fusion. (nur Android)

ThreeDofCameraDevice: Fügt 3DoF orientation zur default camera hinzu.

InertialCameraDevice: Fügt 3DoF orientation und plane translation basierend auf inertial estimation zur default camera hinzu.

custom camera device: Benutzerdefinierte Kameraimplementierung.

Algorithm components

Feedback-style synchronous processing component: muss results für jeden camera image frame ausgeben und benötigt das processing result des vorherigen frame, um gegenseitige Störungen zu vermeiden.

  • ImageTracker: implementiert die Erkennung und Verfolgung planarer Bilder.

  • ObjectTracker: implementiert die Erkennung und Verfolgung von 3D-Objekten.

Synchrone Verarbeitungskomponenten: müssen in jedem Frame Ergebnisse entsprechend dem Kamerabild ausgeben.

  • SurfaceTracker: implementiert die Verfolgung von Umgebungsoberflächen.

  • SparseSpatialMap: implementiert sparse spatial maps und bietet die Möglichkeit, physischen Raum zu scannen, dabei Punktwolkenkarten zu erzeugen und Echtzeitlokalisierung durchzuführen.

  • MegaTracker: implementiert Mega spatial localization.

Asynchrone Verarbeitungskomponenten: müssen nicht in jedem Frame Ergebnisse entsprechend dem Kamerabild ausgeben.

  • CloudRecognizer: implementiert cloud recognition.

  • DenseSpatialMap: implementiert dense spatial maps, die für Effekte wie collision und occlusion verwendet werden können.

Verfügbarkeitsprüfung von Komponenten

Alle Komponenten haben eine isAvailable-Funktion, mit der geprüft werden kann, ob die Komponente verfügbar ist.

Eine Komponente ist unter anderem in folgenden Fällen nicht verfügbar:

  • Sie ist im aktuellen operating system nicht implementiert.

  • Die für die Komponente erforderlichen dependencies fehlen, z. B. ARKit oder ARCore.

  • Die Komponente existiert in der aktuellen version (variant) nicht, z. B. wenn bestimmte Funktionen in reduzierten Versionen fehlen.

  • Die Komponente ist unter der aktuellen License nicht verfügbar.

Prüfen Sie vor Verwendung einer Komponente unbedingt, ob sie verfügbar ist, und führen Sie den entsprechenden fallback aus oder zeigen Sie einen prompt an.

Data flow

Die Verbindung der Komponenten ist in der folgenden Abbildung dargestellt.

fundamentals dataflow

Es gibt eine besondere Verwendung, bei der die Eingabe ein feedback frame ist, wie unten dargestellt.

fundamentals dataflow feedback

Data flow helper classes

Sende- und Empfangsports des data flow. Jede Komponente muss diese Ports enthalten.

Verzweigen und Zusammenführen von data flow

  • InputFrameFork: teilt ein InputFrame in mehrere parallele Ausgaben auf.

  • OutputFrameFork: teilt ein OutputFrame in mehrere parallele Ausgaben auf.

  • OutputFrameJoin: führt mehrere OutputFrame zu einem zusammen und führt alle Ergebnisse in Results zusammen. Beachten Sie, dass seine mehreren Eingänge nicht verbunden werden sollten, während Daten einfließen, da er sonst in einen Zustand geraten kann, in dem keine Ausgabe erzeugt wird. Es wird empfohlen, data flow-Verbindungen vor dem Start von Camera abzuschließen.

  • FeedbackFrameFork: teilt ein FeedbackFrame in mehrere parallele Ausgaben auf.

Drosselung und Pufferung von data flow

Konvertierung von data flow

Begrenzung der Anzahl von InputFrame

CameraDevice kann bufferCapacity setzen, also die maximale Anzahl von InputFrame, die ausgegeben wird. Der aktuelle Standardwert ist 8.

Custom cameras können BufferPool zur Implementierung verwenden.

Die Anzahl von InputFrame, die jede Komponente benötigt, finden Sie in der API documentation der jeweiligen Komponente.

Wenn die Anzahl von InputFrame nicht ausreicht, kann der data flow blockieren und das rendering zum Stillstand bringen.

Wenn die Anzahl von InputFrame nicht ausreicht, kann außerdem der Fall auftreten, dass rendering beim ersten Start nicht blockiert, aber nach dem Wechsel in den background oder nach pause/start von Komponenten blockiert. Tests sollten diese Situation abdecken.

Verbinden und Trennen

Es wird nicht empfohlen, während eines laufenden data flow Verbindungen herzustellen oder zu trennen.

Wenn während runtime verbunden oder getrennt werden muss, beachten Sie, dass dies nur auf einem cut edge erfolgen darf (nach Entfernen dieses edge wird der data flow in zwei Teile geteilt). Es darf nicht auf einem edge in einem cycle erfolgen (cycle bedeutet hier einen Zyklus, der von edges gebildet wird, wenn data flow als undirected graph betrachtet wird), nicht am input von OutputFrameJoin und nicht am sideInput von InputFrameThrottler. Andernfalls kann der data flow an nodes wie OutputFrameJoin und InputFrameThrottler hängen bleiben und keinen output erzeugen.

Alle algorithm components haben start/stop-Funktionen. Im stop-Zustand werden frames nicht verarbeitet, aber weiterhin aus der Komponente ausgegeben, nur ohne results.

Typische Verwendung

Im Folgenden wird die Verwendung eines einzelnen ImageTracker gezeigt, die zum Erkennen und tracking nicht wiederholter planar image targets verwendet werden kann.

fundamentals dataflow single ImageTracker

Im Folgenden wird die Verwendung eines einzelnen ImageTracker gezeigt, die zum Erkennen und tracking wiederholter planar image targets verwendet werden kann.

fundamentals dataflow multiple ImageTracker

Im Folgenden wird die Verwendung von SparseSpatialMap gezeigt, die für sparse spatial map building, localization und tracking verwendet werden kann.

fundamentals dataflow SparseSpatialMap

Im Folgenden wird die gemeinsame Verwendung von SparseSpatialMap und DenseSpatialMap gezeigt, die für sparse spatial map building, localization, tracking und dense spatial map generation verwendet werden kann.

fundamentals dataflow Sparse-DenseSpatialMap