Table of Contents

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

fundamentals dataflow input output

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.

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.

fundamentals dataflow

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

fundamentals dataflow feedback

Kelas bantu aliran data

Port pengiriman dan penerimaan aliran data, setiap komponen perlu menyertakan port ini

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

Transformasi aliran data

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.

fundamentals dataflow single ImageTracker

Berikut adalah penggunaan ImageTracker tunggal, yang dapat digunakan untuk mengenali dan melacak gambar target planar yang berulang.

fundamentals dataflow multiple ImageTracker

Berikut adalah penggunaan SparseSpatialMap, yang dapat digunakan untuk mengimplementasikan pemetaan ruang jarang, pelokalan, dan pelacakan.

fundamentals dataflow SparseSpatialMap

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

fundamentals dataflow Sparse-DenseSpatialMap