Pelajari cara menggunakan Gambar Augmented di aplikasi Anda sendiri.
Prasyarat
Pastikan Anda memahami konsep AR dasar dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.
Membuat database gambar
Setiap database gambar dapat menyimpan informasi hingga 1.000 gambar.
Ada dua cara untuk membuat
AugmentedImageDatabase
:
- Memuat database gambar tersimpan. Kemudian, secara opsional, tambahkan gambar referensi lainnya.
- Buat database baru yang kosong. Kemudian tambahkan gambar referensi satu per satu.
Memuat database gambar yang tersimpan
Gunakan AugmentedImageDatabase.deserialize()
untuk memuat database gambar yang ada:
Java
AugmentedImageDatabase imageDatabase; try (InputStream inputStream = this.getAssets().open("example.imgdb")) { imageDatabase = AugmentedImageDatabase.deserialize(session, inputStream); } catch (IOException e) { // The Augmented Image database could not be deserialized; handle this error appropriately. }
Kotlin
val imageDatabase = this.assets.open("example.imgdb").use { AugmentedImageDatabase.deserialize(session, it) }
Database gambar dapat dibuat menggunakan arcoreimg
selama pengembangan, atau dengan memanggil
AugmentedImageDatabase.serialize()
pada {i>database<i} yang
dimuat di memori.
Membuat database kosong baru
Untuk membuat database gambar kosong saat runtime, gunakan konstruktor AugmentedImageDatabase
:
Java
AugmentedImageDatabase imageDatabase = new AugmentedImageDatabase(session);
Kotlin
val imageDatabase = AugmentedImageDatabase(session)
Menambahkan gambar ke database yang ada
Tambahkan gambar ke database gambar Anda dengan memanggil
AugmentedImageDatabase.addImage()
untuk setiap gambar, dengan menentukan widthInMeters
opsional.
Java
Bitmap bitmap; try (InputStream bitmapString = getAssets().open("dog.jpg")) { bitmap = BitmapFactory.decodeStream(bitmapString); } catch (IOException e) { // The bitmap could not be found in assets; handle this error appropriately. throw new AssertionError("The bitmap could not be found in assets.", e); } // If the physical size of the image is not known, use addImage(String, Bitmap) instead, at the // expense of an increased image detection time. float imageWidthInMeters = 0.10f; // 10 cm int dogIndex = imageDatabase.addImage("dog", bitmap, imageWidthInMeters);
Kotlin
val bitmap = assets.open("dog.jpg").use { BitmapFactory.decodeStream(it) } // If the physical size of the image is not known, use addImage(String, Bitmap) instead, at the // expense of an increased image detection time. val imageWidthInMeters = 0.10f // 10 cm val dogIndex = imageDatabase.addImage("dog", bitmap, imageWidthInMeters)
Indeks yang ditampilkan nantinya dapat digunakan untuk mengidentifikasi gambar referensi yang terdeteksi.
Aktifkan pelacakan gambar
Konfigurasikan sesi ARCore Anda untuk mulai melacak gambar dengan menetapkan konfigurasi sesi ke konfigurasi yang dikonfigurasi dengan database gambar yang diinginkan:
Java
Config config = new Config(session); config.setAugmentedImageDatabase(imageDatabase); session.configure(config);
Kotlin
val config = Config(session) config.augmentedImageDatabase = imageDatabase session.configure(config)
Selama sesi, ARCore mencari gambar dengan mencocokkan titik fitur dari gambar kamera dengan titik fitur dalam database gambar.
Untuk mendapatkan gambar yang cocok, cari AugmentedImage
yang diperbarui di loop pembaruan frame.
Java
Collection<AugmentedImage> updatedAugmentedImages = frame.getUpdatedTrackables(AugmentedImage.class); for (AugmentedImage img : updatedAugmentedImages) { if (img.getTrackingState() == TrackingState.TRACKING) { // Use getTrackingMethod() to determine whether the image is currently // being tracked by the camera. switch (img.getTrackingMethod()) { case LAST_KNOWN_POSE: // The planar target is currently being tracked based on its last // known pose. break; case FULL_TRACKING: // The planar target is being tracked using the current camera image. break; case NOT_TRACKING: // The planar target isn't been tracked. break; } // You can also check which image this is based on img.getName(). if (img.getIndex() == dogIndex) { // TODO: Render a 3D version of a dog in front of img.getCenterPose(). } else if (img.getIndex() == catIndex) { // TODO: Render a 3D version of a cat in front of img.getCenterPose(). } } }
Kotlin
val updatedAugmentedImages = frame.getUpdatedTrackables(AugmentedImage::class.java) for (img in updatedAugmentedImages) { if (img.trackingState == TrackingState.TRACKING) { // Use getTrackingMethod() to determine whether the image is currently // being tracked by the camera. when (img.trackingMethod) { AugmentedImage.TrackingMethod.LAST_KNOWN_POSE -> { // The planar target is currently being tracked based on its last known pose. } AugmentedImage.TrackingMethod.FULL_TRACKING -> { // The planar target is being tracked using the current camera image. } AugmentedImage.TrackingMethod.NOT_TRACKING -> { // The planar target isn't been tracked. } } // You can also check which image this is based on AugmentedImage.getName(). when (img.index) { dogIndex -> TODO("Render a 3D version of a dog at img.getCenterPose()") catIndex -> TODO("Render a 3D version of a cat at img.getCenterPose()") } } }
Mendukung berbagai kasus penggunaan
Saat mendeteksi Gambar Augmented, ARCore akan membuat Trackable
untuk gambar tersebut
Gambar Augmented dan kumpulan TrackingState
ke TRACKING
dan TrackingMethod
ke FULL_TRACKING
. Saat gambar yang dilacak bergerak keluar dari tampilan kamera, ARCore
mengubah TrackingMethod
ke LAST_KNOWN_POSE
sambil terus memberikan orientasi dan posisi
gambar tersebut.
Aplikasi Anda harus menggunakan enumerasi ini secara berbeda, bergantung pada penggunaan yang dimaksudkan ini masalahnya atau bukan.
Gambar tetap. Sebagian besar kasus penggunaan yang melibatkan gambar yang tetap berada di tempatnya (yaitu, tidak diharapkan untuk bergerak) dapat menggunakan
TrackingState
untuk menentukan apakah gambar telah terdeteksi dan apakah lokasinya diketahui.TrackingMethod
dapat diabaikan.Gambar bergerak. Jika aplikasi Anda perlu melacak gambar bergerak, gunakan keduanya
TrackingState
danTrackingMethod
untuk menentukan apakah gambar telah terdeteksi dan apakah posisinya diketahui.
Kasus penggunaan | Gambar tetap | Memindahkan gambar |
---|---|---|
Contoh | Poster yang digantung di dinding | Iklan di sisi bus |
Pose dapat dianggap valid jika |
TrackingState == TRACKING |
TrackingState == TRACKING
dan TrackingMethod == FULL_TRACKING
|
Lihat juga
Project contoh Augmented Images di ARCore SDK.