Table of Contents

Ar data flow

Questo articolo introduce il flusso di dati in EasyAR Sense. EasyAR Sense utilizza API componentizzate, con i componenti connessi tramite flussi di dati.

Input e output di dati

fundamentals dataflow input output

InputFrame: Frame di input. Contiene immagini, parametri della fotocamera, timestamp, trasformazione della fotocamera rispetto al sistema di coordinate mondiale e stato del tracking. I parametri della fotocamera, il timestamp, la trasformazione e lo stato del tracking sono opzionali, ma specifici componenti algoritmici potrebbero avere requisiti particolari per l'input.

OutputFrame: Frame di output. Contiene il frame di input e i risultati dell'elaborazione sincrona dei componenti.

FeedbackFrame: Frame di feedback. Contiene un frame di input e un frame di output storico, utilizzato per componenti di elaborazione sincrona con feedback come ImageTracker.

Componenti fotocamera

CameraDevice: Fotocamera predefinita su Windows, Mac, iOS, Android.

ARKitCameraDevice: Implementazione predefinita ARKit su iOS.

ARCoreCameraDevice: Implementazione predefinita ARCore su Android.

MotionTrackerCameraDevice: Implementa il motion tracking, calcolando le coordinate 6DoF del dispositivo tramite fusione di più sensori. (Supporta solo Android)

ThreeDofCameraDevice: Aggiunge orientamento 3DoF alla fotocamera predefinita.

InertialCameraDevice: Aggiunge orientamento 3DoF e traslazione planare basata su stime inerziali alla fotocamera predefinita.

Custom camera device: Implementazione personalizzata della fotocamera.

Componenti algoritmici

Componenti di elaborazione sincrona con feedback: Richiedono di emettere risultati per ogni frame insieme all'immagine della fotocamera e necessitano dei risultati dell'elaborazione del frame precedente per evitare interferenze reciproche.

  • ImageTracker: Implementa il rilevamento e il tracciamento di immagini piane.

  • ObjectTracker: Implementa il rilevamento e il tracciamento di oggetti 3D.

Componenti di elaborazione sincrona: Richiedono l'output dei risultati ogni fotogramma insieme all'immagine della fotocamera.

  • SurfaceTracker: Implementa il tracciamento delle superfici ambientali.

  • SparseSpatialMap: Implementa una mappa spaziale sparsa, fornendo la capacità di scansionare lo spazio fisico generando contemporaneamente una mappa di point cloud e di localizzarsi in tempo reale.

  • MegaTracker: Implementa il posizionamento spaziale Mega.

Componenti di elaborazione asincrona: Non richiedono l'output dei risultati ogni fotogramma insieme all'immagine della fotocamera.

  • CloudRecognizer: Implementa il riconoscimento cloud.

  • DenseSpatialMap: Implementa una mappa spaziale densa, utilizzabile per realizzare effetti come collisioni e occlusione.

Controllo disponibilità componenti

Tutti i componenti hanno una funzione isAvailable, utilizzabile per determinare se il componente è disponibile.

I componenti potrebbero non essere disponibili per

  • Mancanza di implementazione sul sistema operativo corrente.

  • Dipendenze mancanti (es. ARKit, ARCore).

  • Assenza del componente nella versione corrente (variant), ad esempio in versioni semplificate.

  • Componente non disponibile con la licenza corrente.

Prima di utilizzare un componente, è essenziale verificare la sua disponibilità e implementare soluzioni alternative o avvisi opportuni.

Flusso di dati

I componenti si connettono come mostrato di seguito.

fundamentals dataflow

Esiste un utilizzo speciale dell'input tramite frame di feedback, come illustrato:

fundamentals dataflow feedback

Classi ausiliarie per il flusso di dati

Porte di emissione e ricezione del flusso di dati; ogni componente deve includere queste porte

Divisione e unione del flusso di dati

  • InputFrameFork: Divide un InputFrame e lo emette in più flussi paralleli.

  • OutputFrameFork: Divide un OutputFrame e lo emette in più flussi paralleli.

  • OutputFrameJoin: Unisce più OutputFrame in uno solo, combinando tutti i risultati in Results. È importante notare che le connessioni ai suoi ingressi multipli non dovrebbero essere stabilite mentre scorrono dati, altrimenti potrebbe rimanere bloccato nell'impossibilità di produrre output. (Si consiglia di completare il collegamento del flusso di dati prima di avviare la Camera).

  • FeedbackFrameFork: Divide un FeedbackFrame e lo emette in più flussi paralleli.

Limitazione e bufferizzazione del flusso di dati

Trasformazione del flusso di dati

Limite numero InputFrame

CameraDevice può impostare bufferCapacity, il numero massimo di InputFrame emessi. Il valore predefinito corrente è 8.

Le fotocamere personalizzate possono utilizzare BufferPool.

Per il numero di InputFrame richiesti da ciascun componente, consultare la documentazione API del rispettivo componente.

Se il numero di InputFrame è insufficiente, potrebbe causare un blocco del flusso di dati, portando a un blocco del rendering.

Un numero insufficiente di InputFrame potrebbe anche manifestarsi come un rendering fluido al primo avvio, ma bloccarsi dopo il passaggio in background o la pausa/riavvio dei componenti. È importante testare questi scenari.

Connessione e disconnessione

Sconsigliato connettere e disconnettere durante l'esecuzione del flusso di dati.

Se necessario, assicurarsi di operare solo su "spigoli di taglio" (rimuovendo i quali il flusso si divide in due parti), mai su spigoli che formano anelli (considerando il flusso come grafo non orientato), sugli input di OutputFrameJoin o sul sideInput di InputFrameThrottler. Altrimenti, si rischia di bloccare il flusso su nodi come OutputFrameJoin e InputFrameThrottler.

I componenti algoritmici hanno funzioni start/stop. Quando sono in stop, i frame non vengono elaborati ma vengono comunque emessi, semplicemente senza risultati.

Utilizzi tipici

Di seguito, l'utilizzo di un singolo ImageTracker, per il riconoscimento e tracking di target planari non ripetuti.

fundamentals dataflow single ImageTracker

Di seguito, l'utilizzo di un singolo ImageTracker, per il riconoscimento e tracking di target planari ripetuti.

fundamentals dataflow multiple ImageTracker

Di seguito, l'utilizzo di SparseSpatialMap, per la creazione di mappe spaziali sparse, localizzazione e tracking.

fundamentals dataflow SparseSpatialMap

Di seguito, l'utilizzo combinato di SparseSpatialMap e DenseSpatialMap, per creazione di mappe sparse, localizzazione, tracking e generazione di mappe spaziali dense.

fundamentals dataflow Sparse-DenseSpatialMap