AR data flow
Artikel ini memperkenalkan data flow dalam EasyAR Sense. EasyAR Sense menggunakan API berbasis komponen, dan komponen-komponen dihubungkan melalui data flow.
Input dan output data

InputFrame: Input frame. Berisi image, camera parameters, timestamp, camera transform relatif terhadap world coordinate system, dan tracking status. Di antaranya, camera parameters, timestamp, camera transform relatif terhadap world coordinate system, dan tracking status bersifat optional, tetapi algorithm components tertentu memiliki persyaratan khusus terhadap input.
OutputFrame: Output frame. Berisi input frame dan output results dari synchronous processing components.
FeedbackFrame: Feedback frame. Berisi satu input frame dan satu historical output frame, digunakan oleh feedback-style synchronous processing components seperti ImageTracker.
Camera components
CameraDevice: Default camera pada Windows, Mac, iOS, dan Android.
ARKitCameraDevice: Implementasi default ARKit pada iOS.
ARCoreCameraDevice: Implementasi default ARCore pada Android.
MotionTrackerCameraDevice: Mengimplementasikan motion tracking dan menghitung 6DoF coordinates device melalui multi-sensor fusion. (hanya Android)
ThreeDofCameraDevice: Menambahkan 3DoF orientation di atas default camera.
InertialCameraDevice: Menambahkan 3DoF orientation dan plane translation berbasis inertial estimation di atas default camera.
custom camera device: Implementasi custom camera.
Algorithm components
Feedback-style synchronous processing component: perlu mengeluarkan result untuk setiap camera image frame dan memerlukan processing result frame sebelumnya untuk menghindari saling ganggu.
ImageTracker: mengimplementasikan deteksi dan pelacakan gambar planar.
ObjectTracker: mengimplementasikan deteksi dan pelacakan objek 3D.
Komponen pemrosesan sinkron: perlu menghasilkan hasil mengikuti gambar kamera pada setiap frame.
SurfaceTracker: mengimplementasikan pelacakan permukaan lingkungan.
SparseSpatialMap: mengimplementasikan sparse spatial map, menyediakan kemampuan untuk memindai ruang fisik sambil menghasilkan peta point cloud dan melakukan lokalisasi waktu nyata.
MegaTracker: mengimplementasikan lokalisasi spasial Mega.
Komponen pemrosesan asinkron: tidak perlu menghasilkan hasil mengikuti gambar kamera pada setiap frame.
CloudRecognizer: mengimplementasikan cloud recognition.
DenseSpatialMap: mengimplementasikan dense spatial map, yang dapat digunakan untuk mewujudkan efek seperti collision dan occlusion.
Pemeriksaan availability komponen
Semua komponen memiliki fungsi isAvailable, yang dapat digunakan untuk menentukan apakah komponen tersedia.
Kondisi ketika komponen tidak tersedia meliputi:
Tidak diimplementasikan pada operating system saat ini.
Dependency yang dibutuhkan komponen tidak ada, seperti ARKit atau ARCore.
Komponen tidak ada pada version (variant) saat ini, misalnya beberapa fitur tidak ada dalam versi yang dipangkas.
Komponen tidak tersedia di bawah License saat ini.
Sebelum menggunakan komponen, pastikan untuk memeriksa apakah komponen tersedia dan lakukan fallback atau prompt yang sesuai.
Data flow
Cara koneksi komponen ditunjukkan pada gambar berikut.

Ada penggunaan khusus dengan input berupa feedback frame, seperti ditunjukkan di bawah ini.

Data flow helper classes
Port pengiriman dan penerimaan data flow. Setiap komponen perlu menyertakan port ini.
SignalSink / SignalSource: menerima/mengirim sinyal tanpa data.
InputFrameSink / InputFrameSource: menerima/mengirim InputFrame.
OutputFrameSink / OutputFrameSource: menerima/mengirim OutputFrame.
FeedbackFrameSink / FeedbackFrameSource: menerima/mengirim FeedbackFrame.
Percabangan dan penggabungan data flow
InputFrameFork: membagi satu InputFrame menjadi beberapa output paralel.
OutputFrameFork: membagi satu OutputFrame menjadi beberapa output paralel.
OutputFrameJoin: menggabungkan beberapa OutputFrame menjadi satu dan menggabungkan semua hasil ke dalam Results. Perhatikan bahwa beberapa koneksi inputnya tidak boleh dihubungkan saat ada data yang mengalir masuk, jika tidak, komponen dapat masuk ke keadaan tidak dapat menghasilkan output. Disarankan menyelesaikan koneksi data flow sebelum Camera dimulai.
FeedbackFrameFork: membagi satu FeedbackFrame menjadi beberapa output paralel.
Throttling dan buffering data flow
InputFrameThrottler: menerima dan mengirim InputFrame, tetapi hanya mengirim satu pada satu waktu. Komponen ini hanya mengirim InputFrame berikutnya setelah menerima sinyal pemicu. Saat beberapa InputFrame diterima, InputFrame berikutnya dapat menimpa InputFrame sebelumnya.
OutputFrameBuffer: menerima dan menyimpan buffer OutputFrame, menunggu polling pengguna, dan dapat mengirim sinyal saat menerima OutputFrame.
Hubungkan sinyal yang dikirim oleh OutputFrameBuffer ke InputFrameThrottler untuk menyelesaikan seluruh proses throttling.
Konversi data flow
InputFrameToOutputFrameAdapter: dapat langsung membungkus InputFrame menjadi OutputFrame untuk tampilan rendering.
InputFrameToFeedbackFrameAdapter: dapat membungkus InputFrame dan FeedbackFrame menjadi FeedbackFrame untuk komponen pemrosesan tersinkron gaya feedback.
Batas jumlah InputFrame
CameraDevice dapat mengatur bufferCapacity, yaitu jumlah maksimum InputFrame yang dikeluarkan. Nilai default saat ini adalah 8.
Custom camera dapat menggunakan BufferPool untuk implementasi.
Untuk jumlah InputFrame yang dibutuhkan tiap komponen, rujuk dokumentasi API masing-masing komponen.
Jika jumlah InputFrame tidak cukup, data flow mungkin macet dan menyebabkan rendering macet.
Jika jumlah InputFrame tidak cukup, bisa juga terjadi kondisi rendering tidak macet saat startup pertama, tetapi macet setelah berpindah ke background atau setelah pause/start komponen. Pastikan test mencakup kondisi ini.
Menghubungkan dan memutus koneksi
Tidak disarankan melakukan connect dan disconnect saat data flow sedang berjalan.
Jika perlu connect atau disconnect saat runtime, perhatikan bahwa ini hanya boleh dilakukan pada cut edge (setelah edge ini dihapus, data flow terbagi menjadi dua bagian). Tidak boleh dilakukan pada edge dalam cycle (cycle di sini berarti cycle yang dibentuk oleh edge ketika data flow dilihat sebagai undirected graph), pada input OutputFrameJoin, atau pada sideInput InputFrameThrottler. Jika tidak, data flow dapat macet pada node seperti OutputFrameJoin dan InputFrameThrottler sehingga tidak dapat menghasilkan output.
Semua algorithm components memiliki fungsi start/stop. Saat stop, frame tidak akan diproses, tetapi tetap dikeluarkan dari komponen, hanya tanpa result.
Penggunaan tipikal
Berikut adalah penggunaan satu ImageTracker, yang dapat digunakan untuk mengenali dan melacak planar image target yang tidak berulang.
![]()
Berikut adalah penggunaan satu ImageTracker, yang dapat digunakan untuk mengenali dan melacak planar image target yang berulang.
![]()
Berikut adalah penggunaan SparseSpatialMap, yang dapat digunakan untuk implementasi sparse spatial map building, localization, dan tracking.

Berikut adalah penggunaan SparseSpatialMap dan DenseSpatialMap secara bersamaan, yang dapat digunakan untuk implementasi sparse spatial map building, localization, tracking, dan dense spatial map generation.
