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, ML modeline dayalı, gerçek zamanlı semantik bilgiler sağlayarak geliştiricilerin kullanıcının etrafındaki sahneyi anlamasını sağlar. Bir dış mekan sahnesinin görüntüsü sayesinde API, gökyüzü, bina, ağaç, yol, kaldırım, araç, kişi ve diğer pek çok kullanışlı semantik 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 açık hava sahnesinde belirli bir etiketin yaygınlığını sorgulamak için kullanımı kolay bir yol sunar.

Soldan sağa, giriş resmi, piksel etiketlerinin anlamsal resmi ve karşılık gelen güven resmi örnekleri:

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 Semantiğini 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 Scene Semantics, ARCore'da varsayılan olarak devre dışıdır. Uygulamanızın Scene Semantics API'yi kullanması için semantik modu 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)

Anlamsal resmi edinin

Scene Semantics etkinleştirildiğinde semantik resim alınabilir. Anlamsal resim bir ImageFormat.Y8 resmidir. Burada her piksel SemanticLabel tarafından tanımlanan anlamsal bir etikete karşılık gelir.

Anlamsal resmi edinmek için Frame.acquireSemanticImage() değerini 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.
}

Anlamsal çıkış resimleri, cihaza bağlı olarak oturumun başlangıcından itibaren yaklaşık 1-3 kareden sonra kullanılabilir.

Güven resmini elde edin

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

Anlamsal güven görüntüsünü edinmek için Frame.acquireSemanticConfidenceImage() değerini 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üveni görüntüleri, cihaza bağlı olarak, oturumun başlangıcından itibaren yaklaşık 1-3 kareden sonra kullanılabilir olmalıdır.

Anlamsal bir etiket için piksel oranını sorgulama

Geçerli karede gökyüzü gibi belirli bir sınıfa ait piksellerin oranını da sorgulayabilirsiniz. Bu sorgu, anlamsal resmi döndürmek ve belirli bir etiket için piksel düzeyinde arama yapmaktan daha etkilidir. Döndürülen kesir, [0.0, 1.0] aralığındaki bir ondalık değerdir.

Belirli bir etiketin kesirini almak için Frame.getSemanticLabelFraction() değerini 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.
}