Artırılmış resimleri kendi uygulamalarınızda nasıl kullanacağınızı öğrenin.
Ön koşullar
Devam etmeden önce temel AR kavramlarını ve ARCore oturumunu nasıl yapılandıracağınızı anladığınızdan emin olun.
Resim veritabanı oluşturma
Her resim veritabanında en fazla 1.000 resme ait bilgi depolanabilir.
Rapor oluşturmanın iki yolu vardır:
AugmentedImageDatabase
:
- Kayıtlı bir resim veritabanını yükleyin. Ardından isteğe bağlı olarak daha fazla referans resmi ekleyin.
- Yeni boş bir veritabanı oluşturun. Ardından referans resimleri tek tek ekleyin.
Kayıtlı bir resim veritabanını yükleme
AugmentedImageDatabase.deserialize()
kullanın
mevcut bir resim veritabanını yüklemek için:
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) }
Görüntü veritabanları arcoreimg
kullanılarak oluşturulabilir
komut satırı aracını kullanarak veya geliştirme sırasında
AugmentedImageDatabase.serialize()
içeren bir veritabanını kullanmaktır.
Yeni boş veritabanı oluştur
Çalışma zamanında boş bir resim veritabanı oluşturmak için AugmentedImageDatabase
kurucusunu kullanın:
Java
AugmentedImageDatabase imageDatabase = new AugmentedImageDatabase(session);
Kotlin
val imageDatabase = AugmentedImageDatabase(session)
Mevcut bir veritabanına görüntü ekleme
Şu komutu çağırarak resim veritabanınıza resim ekleyin:
AugmentedImageDatabase.addImage()
(isteğe bağlı bir widthInMeters
belirterek her resim için).
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)
Döndürülen dizinler daha sonra hangi referans resmin algılandığını belirlemek için kullanılabilir.
Resim izlemeyi etkinleştirme
Oturumu ayarlayarak resimleri izlemeye başlamak için ARCore oturumunuzu yapılandırın istenen resim veritabanıyla yapılandırılmış bir yapılandırma dosyası oluşturun:
Java
Config config = new Config(session); config.setAugmentedImageDatabase(imageDatabase); session.configure(config);
Kotlin
val config = Config(session) config.augmentedImageDatabase = imageDatabase session.configure(config)
Oturum sırasında ARCore, oturumdaki özellik noktalarını eşleştirerek kamera görüntüsünü resim veritabanında bulunanlarla karşılaştırabilirsiniz.
Eşleşen resimleri almak için çerçeve güncelleme döngüsünüzde güncellenmiş AugmentedImage
değerlerini sorgulayın.
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()") } } }
Farklı kullanım alanlarını destekleme
ARCore, bir artırılmış görüntü algıladığında bu artırılmış görüntü için bir Trackable
oluşturur ve TrackingState
değerini TRACKING
, TrackingMethod
değerini ise FULL_TRACKING
olarak ayarlar. İzlenen resim kamera görüş alanından çıktığında ARCore, resmin yönünü ve konumunu sağlamaya devam ederken TrackingMethod
değerini LAST_KNOWN_POSE
olarak değiştirir.
Uygulamanız, kullanım amacına bağlı olarak bu numaralandırmaları farklı şekilde kullanmalıdır. dava açın.
Sabit resimler. Yerine sabitlenmiş (yani hareket etmesinin beklenmediği) resimlerin yer aldığı çoğu kullanım alanında, resmin algılanıp algılanmadığını ve konumunun bilinip bilinmediğini belirlemek için
TrackingState
kullanılabilir.TrackingMethod
yoksayılabilir.Hareketli resimler. Uygulamanızın hareketli bir resmi izlemesi gerekiyorsa resmin algılanıp algılanmadığını ve konumunun bilinip bilinmediğini belirlemek için hem
TrackingState
hem deTrackingMethod
'ü kullanın.
Kullanım alanı | Düzeltilen resim | Resim taşınıyor |
---|---|---|
Örnek | Duvara asılı bir poster | Otobüsün yanındaki reklam |
Poz şöyle olabilir: şu durumda geçerli kabul edilir: |
TrackingState == TRACKING |
TrackingState == TRACKING .
TrackingMethod == FULL_TRACKING
|
Aşağıdaki kaynakları da incelemenizi öneririz:
ARCore SDK'sındaki Artırılmış Görüntüler örnek projeleri.