AR data flow
Este artículo presenta el data flow en EasyAR Sense. EasyAR Sense usa APIs componentizadas, y los componentes se conectan mediante data flow.
Datos de entrada y salida

InputFrame: Input frame. Contiene la image, camera parameters, timestamp, camera transform relativo al world coordinate system y tracking status. Entre ellos, camera parameters, timestamp, camera transform relativo al world coordinate system y tracking status son optional, pero ciertos algorithm components tienen requisitos específicos para el input.
OutputFrame: Output frame. Contiene el input frame y los output results de synchronous processing components.
FeedbackFrame: Feedback frame. Contiene un input frame y un historical output frame, y se usa para feedback-style synchronous processing components como ImageTracker.
Camera components
CameraDevice: Default camera en Windows, Mac, iOS y Android.
ARKitCameraDevice: Implementación default de ARKit en iOS.
ARCoreCameraDevice: Implementación default de ARCore en Android.
MotionTrackerCameraDevice: Implementa motion tracking y resuelve las 6DoF coordinates del dispositivo mediante multi-sensor fusion. (solo Android)
ThreeDofCameraDevice: Añade 3DoF orientation sobre la default camera.
InertialCameraDevice: Añade 3DoF orientation y plane translation basado en inertial estimation sobre la default camera.
custom camera device: Implementación de custom camera.
Algorithm components
Feedback-style synchronous processing component: necesita generar results para cada camera image frame y necesita el processing result del frame anterior para evitar interferencias mutuas.
ImageTracker: implementa la detección y el seguimiento de imágenes planas.
ObjectTracker: implementa la detección y el seguimiento de objetos 3D.
Componentes de procesamiento síncrono: necesitan generar resultados siguiendo la imagen de la cámara en cada frame.
SurfaceTracker: implementa el seguimiento de superficies del entorno.
SparseSpatialMap: implementa sparse spatial maps, proporcionando la capacidad de escanear el espacio físico mientras se generan mapas de nube de puntos y se realiza localización en tiempo real.
MegaTracker: implementa la localización espacial Mega.
Componentes de procesamiento asíncrono: no necesitan generar resultados siguiendo la imagen de la cámara en cada frame.
CloudRecognizer: implementa cloud recognition.
DenseSpatialMap: implementa dense spatial maps, que pueden utilizarse para implementar efectos como collision y occlusion.
Comprobación de disponibilidad de componentes
Todos los componentes tienen una función isAvailable, que puede usarse para determinar si el componente está disponible.
Los casos en los que un componente no está disponible incluyen:
No está implementado en el operating system actual.
No existen las dependencies requeridas por el componente, como ARKit o ARCore.
El componente no existe en la version (variant) actual, por ejemplo cuando algunas funciones no existen en ciertas versiones reducidas.
El componente no está disponible bajo la License actual.
Antes de usar un componente, asegúrese de comprobar si está disponible y realice el fallback o prompt correspondiente.
Data flow
La forma de conectar los componentes se muestra en la siguiente figura.

Existe un uso especial donde el input es un feedback frame, como se muestra a continuación.

Data flow helper classes
Puertos de envío y recepción de data flow. Cada componente debe incluir estos puertos.
SignalSink / SignalSource: recibe/envía una señal sin datos.
InputFrameSink / InputFrameSource: recibe/envía un InputFrame.
OutputFrameSink / OutputFrameSource: recibe/envía un OutputFrame.
FeedbackFrameSink / FeedbackFrameSource: recibe/envía un FeedbackFrame.
Ramificación y fusión de data flow
InputFrameFork: divide un InputFrame en varias salidas paralelas.
OutputFrameFork: divide un OutputFrame en varias salidas paralelas.
OutputFrameJoin: fusiona varios OutputFrame en uno y fusiona todos los resultados en Results. Tenga en cuenta que sus múltiples conexiones de entrada no deben conectarse mientras entran datos; de lo contrario, puede quedar en un estado sin salida. Se recomienda completar las conexiones de data flow antes de iniciar Camera.
FeedbackFrameFork: divide un FeedbackFrame en varias salidas paralelas.
Limitación y búfer de data flow
InputFrameThrottler: recibe y envía InputFrame, pero solo envía uno a la vez. Solo envía el siguiente InputFrame después de recibir una señal de activación. Cuando se reciben varios InputFrame, los InputFrame posteriores pueden sobrescribir los anteriores.
OutputFrameBuffer: recibe y almacena en búfer OutputFrame, espera el polling del usuario y puede enviar una señal cuando recibe un OutputFrame.
Conecte la señal enviada por OutputFrameBuffer a InputFrameThrottler para completar todo el proceso de throttling.
Conversión de data flow
InputFrameToOutputFrameAdapter: puede envolver directamente un InputFrame como OutputFrame para visualización de rendering.
InputFrameToFeedbackFrameAdapter: puede envolver un InputFrame y un FeedbackFrame como FeedbackFrame para componentes de procesamiento sincronizado por feedback.
Límite en el número de InputFrame
CameraDevice puede configurar bufferCapacity, que es el número máximo de InputFrame que emite. El valor default actual es 8.
Las custom cameras pueden usar BufferPool para su implementación.
Para el número de InputFrame requerido por cada componente, consulte la API documentation de cada componente.
Si el número de InputFrame es insuficiente, el data flow puede quedar bloqueado y hacer que el rendering se bloquee.
Si el número de InputFrame es insuficiente, también puede ocurrir que el rendering no se bloquee en el primer inicio, pero sí después de pasar a background o después de pause/start de componentes. Asegúrese de cubrir esta situación en las pruebas.
Conectar y desconectar
No se recomienda conectar y desconectar mientras el data flow está en ejecución.
Si necesita conectar o desconectar durante runtime, tenga en cuenta que solo puede hacerse sobre un cut edge (después de eliminar este edge, el data flow se divide en dos partes). No puede hacerse sobre un edge en un cycle (aquí cycle se refiere a un ciclo formado por edges cuando el data flow se considera un undirected graph), sobre el input de OutputFrameJoin o sobre el sideInput de InputFrameThrottler. De lo contrario, el data flow puede quedar bloqueado en nodes como OutputFrameJoin y InputFrameThrottler, impidiendo la salida.
Todos los algorithm components tienen funciones start/stop. Cuando están en stop, los frames no se procesan, pero siguen saliendo del componente, solo que sin results.
Uso típico
Lo siguiente muestra el uso de un único ImageTracker, que puede usarse para reconocer y hacer tracking de planar image targets no repetidos.
![]()
Lo siguiente muestra el uso de un único ImageTracker, que puede usarse para reconocer y hacer tracking de planar image targets repetidos.
![]()
Lo siguiente muestra el uso de SparseSpatialMap, que puede usarse para implementar sparse spatial map building, localization y tracking.

Lo siguiente muestra el uso conjunto de SparseSpatialMap y DenseSpatialMap, que puede usarse para implementar sparse spatial map building, localization, tracking y dense spatial map generation.
