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

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.

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

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.
- SignalSink / SignalSource : Reçoit / émet un signal (sans donnée).
- InputFrameSink / InputFrameSource : Reçoit / émet un InputFrame.
- OutputFrameSink / OutputFrameSource : Reçoit / émet un OutputFrame.
- FeedbackFrameSink / FeedbackFrameSource : Reçoit / émet un FeedbackFrame.
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
- InputFrameThrottler : Reçoit et émet des InputFrame, mais n'en émet qu'un seul à la fois. Il n'émet l'InputFrame suivant qu'après avoir reçu un signal de déclenchement. Lorsqu'il reçoit plusieurs InputFrame, les InputFrame suivants peuvent écraser les précédents.
- OutputFrameBuffer : Reçoit et met en mémoire tampon des OutputFrame, en attendant un interrogateur (utilisateur). Peut émettre un signal lors de la réception d'un OutputFrame.
- Connecter le signal émis par OutputFrameBuffer à InputFrameThrottler permet de terminer tout le processus de limitation.
Transformation du flux de données
- InputFrameToOutputFrameAdapter : Peut encapsuler directement un InputFrame en un OutputFrame, utilisé pour le rendu et l'affichage.
- InputFrameToFeedbackFrameAdapter : Peut encapsuler un InputFrame et un FeedbackFrame en un FeedbackFrame, utilisé pour les composants de traitement synchrone basée sur le retour.
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.
![]()
Voici une utilisation de plusieurs ImageTracker pour la reconnaissance et le suivi d'images planes répétitives.
![]()
Voici l'utilisation de SparseSpatialMap pour la cartographie spatiale sparse, la localisation et le suivi.

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.
