Android SDK'daki (Kotlin/Java) kullanıcı ortamını anlama

Scene Semantics API'yi kendi uygulamalarınızda nasıl kullanacağınızı öğrenin.

Scene Semantics API, geliştiricilerin ML modeline dayalı, gerçek zamanlı anlamsal bilgiler sağlayarak kullanıcıyı çevreleyen sahneyi anlamalarına olanak tanır. API, açık hava sahnesinin bir resmi verildiğinde gökyüzü, bina, ağaç, yol, kaldırım, araç, kişi ve daha fazlası gibi yararlı bir dizi anlamsal sınıfta her piksel için bir etiket döndürür. Scene Semantics API, piksel etiketlerine ek olarak her piksel etiketi için güven değerleri ve belirli bir etiketin dış mekan sahnesindeki yaygınlığını sorgulamak için kolay bir yol sunar.

Soldan sağa doğru, giriş resmi örnekleri, piksel etiketlerinin anlamsal resmi ve ilgili güven resmi:

Giriş resmi, anlamsal resim ve anlamsal güven resmi örneği.

Ö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.

Sahne Anlamını Etkinleştir

Yeni bir ARCore oturumunda, kullanıcının cihazının Scene Semantics API'yi destekleyip desteklemediğini kontrol edin. ARCore uyumlu cihazların tümü, işlem gücü kısıtlamaları nedeniyle Scene Semantics API'yi desteklemez.

Kaynakları kaydetmek için ARCore'da Sahne Semantiği varsayılan olarak devre dışıdır. Uygulamanızın Scene Semantics API'yi kullanmasını sağlamak için semantik modunu etkinleştirin.

Java

Config config = session.getConfig();

// Check whether the user's device supports the Scene Semantics API.
boolean isSceneSemanticsSupported =
    session.isSemanticModeSupported(Config.SemanticMode.ENABLED);
if (isSceneSemanticsSupported) {
  config.setSemanticMode(Config.SemanticMode.ENABLED);
}
session.configure(config);

Kotlin

val config = session.config

// Check whether the user's device supports the Scene Semantics API.
val isSceneSemanticsSupported = session.isSemanticModeSupported(Config.SemanticMode.ENABLED)
if (isSceneSemanticsSupported) {
  config.semanticMode = Config.SemanticMode.ENABLED
}
session.configure(config)

Semantik resmi alma

Sahne semantikleri etkinleştirildikten sonra semantik resim alınabilir. Anlamsal görüntü, her pikselin SemanticLabel tarafından tanımlanan bir anlamsal etikete karşılık geldiği bir ImageFormat.Y8 görüntüdür.

Semantik resmi almak için Frame.acquireSemanticImage() öğesini kullanın:

Java

// Retrieve the semantic image for the current frame, if available.
try (Image semanticImage = frame.acquireSemanticImage()) {
  // Use the semantic image here.
} catch (NotYetAvailableException e) {
  // No semantic image retrieved for this frame.
  // The output image may be missing for the first couple frames before the model has had a
  // chance to run yet.
}

Kotlin

// Retrieve the semantic image for the current frame, if available.
try {
  frame.acquireSemanticImage().use { semanticImage ->
    // Use the semantic image here.
  }
} catch (e: NotYetAvailableException) {
  // No semantic image retrieved for this frame.
}

Çıkış anlamsal görüntüleri, cihaza bağlı olarak oturumun başlangıcından itibaren yaklaşık 1-3 kare sonra kullanılabilir olmalıdır.

Güven resmini alma

API, her piksel için etiket sağlayan semantik görüntüye ek olarak, ilgili piksel güven değerlerinin güven görüntüsünü de sağlar. Güven resmi, her pikselin [0, 255] aralığındaki bir değere karşılık geldiği ve her pikselin anlamsal etiketiyle ilişkili olasılığa karşılık gelen bir ImageFormat.Y8 resmidir.

Semantik güven resmini almak için Frame.acquireSemanticConfidenceImage() öğesini kullanın:

Java

// Retrieve the semantic confidence image for the current frame, if available.
try (Image semanticImage = frame.acquireSemanticConfidenceImage()) {
  // Use the semantic confidence image here.
} catch (NotYetAvailableException e) {
  // No semantic confidence image retrieved for this frame.
  // The output image may be missing for the first couple frames before the model has had a
  // chance to run yet.
}

Kotlin

// Retrieve the semantic confidence image for the current frame, if available.
try {
  frame.acquireSemanticConfidenceImage().use { semanticConfidenceImage ->
    // Use the semantic confidence image here.
  }
} catch (e: NotYetAvailableException) {
  // No semantic confidence image retrieved for this frame.
}

Çıkış güvenilirlik resimleri, cihaza bağlı olarak oturumun başlangıcından yaklaşık 1-3 kare sonra kullanılabilir.

Anlamsal etiket için piksellerin oranını sorgulama

Geçerli çerçevede bulunan ve gökyüzü gibi belirli bir sınıfa ait piksellerin oranını da sorgulayabilirsiniz. Bu sorgu, semantik resmi döndürüp belirli bir etiket için piksel bazında arama yapmaktan daha verimlidir. Döndürülen kesir, [0.0, 1.0] aralığında bir kayan noktalı değerdir.

Belirli bir etiketin kesirini öğrenmek için Frame.getSemanticLabelFraction() işlevini kullanın:

Java

// Retrieve the fraction of pixels for the semantic label sky in the current frame.
try {
  float outFraction = frame.getSemanticLabelFraction(SemanticLabel.SKY);
  // Use the semantic label fraction here.
} catch (NotYetAvailableException e) {
  // No fraction of semantic labels was retrieved for this frame.
}

Kotlin

// Retrieve the fraction of pixels for the semantic label sky in the current frame.
try {
  val fraction = frame.getSemanticLabelFraction(SemanticLabel.SKY)
  // Use the semantic label fraction here.
} catch (e: NotYetAvailableException) {
  // No fraction of semantic labels was retrieved for this frame.
}