Table of Contents

Flux de données AR

Cet article présente le flux de données dans EasyAR Sense. EasyAR Sense utilise une API modulaire, où les composants sont connectés via un flux de données.

Données d'entrée et de sortie

fundamentals dataflow input output

InputFrame : Trame d'entrée. Contient une image, les paramètres de la caméra, un horodatage, la transformation de la caméra par rapport au système de coordonnées mondial et l'état de suivi. Les paramètres de la caméra, l'horodatage, la transformation et l'état de suivi sont facultatifs, mais certains composants algorithmiques ont des exigences spécifiques pour les entrées.

OutputFrame : Trame de sortie. Contient la trame d'entrée et les résultats de traitement des composants synchrones.

FeedbackFrame : Trame de rétroaction. Contient une trame d'entrée et une trame de sortie historique, utilisée par des composants de traitement synchrone à rétroaction comme ImageTracker.

Composants de caméra

CameraDevice : Caméra par défaut sur Windows, Mac, iOS, Android.

ARKitCameraDevice : Implémentation par défaut d'ARKit sur iOS.

ARCoreCameraDevice : Implémentation par défaut d'ARCore sur Android.

MotionTrackerCameraDevice : Implémente le suivi de mouvement, calculant les coordonnées 6DoF du dispositif via la fusion de plusieurs capteurs. (Uniquement sur Android)

ThreeDofCameraDevice : Ajoute une orientation 3DoF à la caméra par défaut.

InertialCameraDevice : Ajoute une orientation 3DoF et une translation plane estimée inertiellement à la caméra par défaut.

custom camera device : Implémentation personnalisée de caméra.

Composants algorithmiques

Composants de traitement synchrone à rétroaction : Nécessitent de produire un résultat à chaque trame d'image de la caméra et utilisent le résultat de la trame précédente pour éviter les interférences mutuelles.

  • ImageTracker:Implémente la détection et le suivi d'images planes.
  • ObjectTracker:Implémente la détection et le suivi d'objets 3D.

Synchronisation des composants de traitement:Nécessite de produire des résultats à chaque image avec la sortie de la caméra.

  • SurfaceTracker:Implémente le suivi des surfaces de l'environnement.
  • SparseSpatialMap:Implémente une carte spatiale clairsemée, fournissant la capacité de numériser un espace physique tout en générant une carte de nuage de points et en effectuant une localisation en temps réel.
  • MegaTracker:Implémente la localisation spatiale Mega.

Composants de traitement asynchrones:Ne nécessitent pas de produire des résultats à chaque image avec la sortie de la caméra.

  • CloudRecognizer:Implémente la reconnaissance cloud.
  • DenseSpatialMap:Implémente une carte spatiale dense, qui peut être utilisée pour réaliser des effets tels que la collision et l'occlusion.

Vérification de disponibilité des composants

Tous les composants possèdent une fonction isAvailable, utilisable pour déterminer si le composant est disponible.

Un composant peut être indisponible dans les cas suivants :

  • Non implémenté sur le système d'exploitation actuel.

  • Dépendances manquantes, comme ARKit ou ARCore.

  • Absent dans la variante actuelle, par exemple dans certaines versions allégées.

  • Non disponible sous la licence actuelle.

Il est essentiel de vérifier la disponibilité avant d'utiliser un composant, et de prévoir une solution de repli ou un message d'information.

Flux de données

Les composants sont connectés comme illustré ci-dessous.

fundamentals dataflow

Il existe un cas d'utilisation spécial avec une entrée de trame de rétroaction, comme illustré ci-dessous.

fundamentals dataflow feedback

Classes auxiliaires de flux de données

Portes d'émission et de réception du flux de données. Chaque composant nécessite ces ports.

Bifurcation et fusion de flux de données

  • InputFrameFork : Divise un InputFrame en plusieurs émis en parallèle.
  • OutputFrameFork : Divise un OutputFrame en plusieurs émis en parallèle.
  • OutputFrameJoin : Fusionne plusieurs OutputFrame en un seul, et combine tous les résultats dans Results. Notez que la connexion de ses entrées multiples ne doit pas se faire pendant que des données affluent, sinon cela pourrait entraîner un blocage sans sortie. (Il est recommandé de terminer les connexions du flux de données avant de démarrer la caméra.)
  • FeedbackFrameFork : Divise un FeedbackFrame en plusieurs émis en parallèle.

Limitation et mise en mémoire tampon du flux de données

Transformation du flux de données

Limite du nombre d'InputFrame

CameraDevice peut définir bufferCapacity, c'est-à-dire le nombre maximal de InputFrame émises. La valeur par défaut actuelle est 8.

Une caméra personnalisée peut utiliser BufferPool pour l'implémenter.

Reportez-vous à la documentation API des composants pour le nombre de InputFrame requis par chacun.

Un nombre insuffisant de InputFrame peut bloquer le flux de données, entraînant un blocage du rendu.

Un nombre insuffisant peut aussi causer un blocage après un passage en arrière-plan ou une suspension/reprise des composants, même si le rendu initial fonctionnait. Les tests doivent couvrir ces scénarios.

Connexion et déconnexion

Il n'est pas recommandé de connecter ou déconnecter pendant le fonctionnement du flux de données.

Si nécessaire, assurez-vous de le faire uniquement sur des arêtes de coupe (dont la suppression sépare le flux en deux parties). Évitez les arêtes formant des cycles (dans le graphe non orienté du flux), les entrées de OutputFrameJoin ou le sideInput de InputFrameThrottler, sinon le flux risque de se bloquer sur ces nœuds.

Les composants algorithmiques ont des fonctions start/stop. À l'arrêt (stop), les trames ne sont pas traitées mais sont émises sans résultat.

Utilisations typiques

Voici une utilisation simple d'un ImageTracker pour la reconnaissance et le suivi d'images planes non répétitives.

fundamentals dataflow single ImageTracker

Voici une utilisation de plusieurs ImageTracker pour la reconnaissance et le suivi d'images planes répétitives.

fundamentals dataflow multiple ImageTracker

Voici l'utilisation de SparseSpatialMap pour la cartographie spatiale sparse, la localisation et le suivi.

fundamentals dataflow SparseSpatialMap

Voici l'utilisation simultanée de SparseSpatialMap et DenseSpatialMap pour la cartographie sparse, la localisation, le suivi et la génération de cartes spatiales denses.

fundamentals dataflow Sparse-DenseSpatialMap