Ar data flow
Artikel ini memperkenalkan aliran data di EasyAR Sense. Di EasyAR Sense, API komponen digunakan, dan komponen dihubungkan melalui aliran data.
Input output data

InputFrame: Bingkai input. Berisi gambar, parameter kamera, stempel waktu, transformasi kamera relatif terhadap sistem koordinat dunia, dan status pelacakan. Di antaranya, parameter kamera, stempel waktu, transformasi kamera relatif terhadap sistem koordinat dunia, dan status pelacakan bersifat opsional, tetapi komponen algoritma tertentu memiliki persyaratan khusus untuk input.
OutputFrame: Bingkai keluaran. Berisi bingkai input dan hasil keluaran dari komponen pemrosesan sinkron.
FeedbackFrame: Bingkai umpan balik. Berisi satu bingkai input dan satu bingkai keluaran historis, digunakan untuk komponen pemrosesan sinkron umpan balik seperti ImageTracker.
Komponen kamera
CameraDevice: Kamera default di Windows, Mac, iOS, Android.
ARKitCameraDevice: Implementasi default ARKit di iOS.
ARCoreCameraDevice: Implementasi default ARCore di Android.
MotionTrackerCameraDevice: Mengimplementasikan pelacakan gerakan, menghitung koordinat 6DoF perangkat melalui fusi multi-sensor. (Hanya mendukung Android)
ThreeDofCameraDevice: Menambahkan orientasi 3DoF di atas kamera default.
InertialCameraDevice: Menambahkan orientasi 3DoF dan pergeseran berbasis estimasi inersia di atas kamera default.
Custom camera device: Implementasi kamera kustom.
Komponen algoritma
Komponen pemrosesan sinkron umpan balik: Membutuhkan hasil keluaran setiap bingkai mengikuti gambar kamera, dan membutuhkan hasil pemrosesan bingkai sebelumnya untuk menghindari interferensi timbal balik.
ImageTracker: Menerapkan deteksi dan pelacakan gambar planar.
ObjectTracker: Menerapkan deteksi dan pelacakan objek 3D.
Komponen pemrosesan sinkron: Membutuhkan hasil keluaran setiap frame mengikuti gambar kamera.
SurfaceTracker: Menerapkan pelacakan permukaan lingkungan.
SparseSpatialMap: Menerapkan peta ruang spasial jarang, menyediakan kemampuan untuk memindai ruang fisik sambil menghasilkan peta point cloud dan melakukan pelokalan real-time.
MegaTracker: Menerapkan pelacakan spasial Mega.
Komponen pemrosesan asinkron: Tidak memerlukan hasil keluaran setiap frame mengikuti gambar kamera.
CloudRecognizer: Menerapkan pengenalan awan.
DenseSpatialMap: Menerapkan peta ruang spasial padat, dapat digunakan untuk mencapai efek tabrakan, oklusi, dll.
Pemeriksaan ketersediaan komponen
Semua komponen memiliki fungsi isAvailable, yang dapat digunakan untuk menilai apakah komponen tersebut tersedia.
Situasi di mana komponen tidak tersedia:
Tidak diimplementasikan pada sistem operasi saat ini.
Ketergantungan yang diperlukan komponen tidak ada, seperti ARKit, ARCore.
Komponen tidak ada pada versi (variant) saat ini, misalnya beberapa fitur tidak ada dalam versi ringkas.
Komponen tidak tersedia di bawah Lisensi saat ini.
Sebelum menggunakan komponen, sangat penting untuk menilai ketersediaan komponen dan melakukan fallback atau pemberitahuan yang sesuai.
Aliran data
Cara komponen terhubung ditunjukkan pada gambar di bawah ini.

Ada penggunaan input khusus berupa bingkai umpan balik, seperti yang ditunjukkan pada gambar di bawah ini.

Kelas bantu aliran data
Port pengiriman dan penerimaan aliran data, setiap komponen perlu menyertakan port ini
SignalSink / SignalSource: Menerima/mengeluarkan sebuah sinyal (tanpa data).
InputFrameSink / InputFrameSource: Menerima/mengeluarkan sebuah InputFrame.
OutputFrameSink / OutputFrameSource: Menerima/mengeluarkan sebuah OutputFrame.
FeedbackFrameSink / FeedbackFrameSource: Menerima/mengeluarkan sebuah FeedbackFrame.
Percabangan dan penggabungan aliran data
InputFrameFork: Membagi satu InputFrame menjadi beberapa yang dikeluarkan secara paralel.
OutputFrameFork: Membagi satu OutputFrame menjadi beberapa yang dikeluarkan secara paralel.
OutputFrameJoin: Menggabungkan beberapa OutputFrame menjadi satu, dan menggabungkan semua hasil ke dalam Results. Perlu diperhatikan bahwa koneksi beberapa inputnya tidak boleh dilakukan bersamaan saat ada aliran data, karena dapat menyebabkan status tidak dapat mengeluarkan output. (Direkomendasikan menyelesaikan koneksi aliran data sebelum Camera diaktifkan.)
FeedbackFrameFork: Membagi satu FeedbackFrame menjadi beberapa yang dikeluarkan secara paralel.
Pembatasan dan penyanggaan aliran data
InputFrameThrottler: Menerima dan mengeluarkan InputFrame, tetapi hanya mengeluarkan satu per satu. Hanya akan mengeluarkan InputFrame berikutnya setelah menerima sinyal pemicu. Saat menerima beberapa InputFrame, InputFrame berikutnya dapat menimpa yang sebelumnya.
OutputFrameBuffer: Menerima OutputFrame dan menyangganya, menunggu pengguna melakukan polling. Dapat mengeluarkan sinyal saat menerima OutputFrame.
Menghubungkan sinyal yang dikeluarkan OutputFrameBuffer ke InputFrameThrottler akan menyelesaikan seluruh proses pembatasan.
Transformasi aliran data
InputFrameToOutputFrameAdapter: Dapat membungkus langsung sebuah InputFrame menjadi OutputFrame, digunakan untuk rendering tampilan.
InputFrameToFeedbackFrameAdapter: Dapat membungkus sebuah InputFrame dan sebuah FeedbackFrame menjadi FeedbackFrame, digunakan untuk komponen pemrosesan sinkronisasi berbasis umpan balik.
Batasan jumlah InputFrame
CameraDevice dapat mengatur bufferCapacity, yaitu jumlah maksimum InputFrame yang dikeluarkan, nilai default saat ini adalah 8.
Kamera kustom dapat mengimplementasikan menggunakan BufferPool.
Jumlah InputFrame yang dibutuhkan oleh setiap komponen, lihat dokumentasi API masing-masing komponen.
Jika jumlah InputFrame tidak mencukupi, dapat menyebabkan aliran data macet, yang mengakibatkan rendering macet.
Jika jumlah InputFrame tidak mencukupi, juga dapat muncul situasi di mana rendering pertama kali dimulai tidak macet tetapi setelah beralih ke latar belakang atau menjeda/memulai komponen, rendering macet. Perlu diperhatikan untuk mencakup pengujian ini.
Menghubungkan dan memutuskan sambungan
Tidak disarankan untuk menghubungkan dan memutuskan sambungan selama aliran data berjalan.
Jika perlu menghubungkan dan memutuskan sambungan selama berjalan, perhatikan bahwa hanya dapat dilakukan pada tepi potong (menghapus tepi ini akan membagi aliran data menjadi dua bagian), tidak dapat dilakukan pada tepi loop (di sini loop mengacu pada siklus yang dibentuk oleh tepi ketika aliran data dilihat sebagai graf tidak berarah), input OutputFrameJoin atau sideInput InputFrameThrottler, jika tidak dapat menyebabkan aliran data macet di node seperti OutputFrameJoin dan InputFrameThrottler sehingga tidak dapat mengeluarkan output.
Komponen algoritma memiliki fungsi start/stop, saat di-stop, bingkai tidak akan diproses, tetapi masih akan dikeluarkan dari komponen, hanya saja tanpa hasil.
Penggunaan khas
Berikut adalah penggunaan ImageTracker tunggal, yang dapat digunakan untuk mengenali dan melacak gambar target planar yang tidak berulang.
![]()
Berikut adalah penggunaan ImageTracker tunggal, yang dapat digunakan untuk mengenali dan melacak gambar target planar yang berulang.
![]()
Berikut adalah penggunaan SparseSpatialMap, yang dapat digunakan untuk mengimplementasikan pemetaan ruang jarang, pelokalan, dan pelacakan.

Berikut adalah penggunaan SparseSpatialMap dan DenseSpatialMap secara bersamaan, yang dapat digunakan untuk mengimplementasikan pemetaan ruang jarang, pelokalan, pelacakan, dan pembuatan peta ruang padat.
