Memahami lingkungan pengguna di Android SDK (Kotlin/Java)

Pelajari cara menggunakan Scene Semantics API di aplikasi Anda sendiri.

Scene Semantics API memungkinkan developer memahami adegan di sekitar pengguna, dengan menyediakan informasi semantik real-time berbasis model ML. Dengan mempertimbangkan gambar suasana luar ruangan, API akan menampilkan label untuk setiap piksel pada sekumpulan kelas semantik yang berguna, seperti langit, bangunan, pohon, jalan, trotoar, kendaraan, orang, dan banyak lagi. Selain label piksel, Scene Semantics API juga menawarkan nilai keyakinan untuk setiap label piksel dan cara yang mudah digunakan untuk mengkueri prevalensi label tertentu dalam suasana luar ruangan.

Dari kiri ke kanan, contoh gambar input, gambar semantik label piksel, dan gambar keyakinan yang sesuai:

Contoh gambar input, gambar semantik, dan gambar keyakinan semantik.

Prasyarat

Pastikan Anda memahami konsep AR dasar dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.

Mengaktifkan Semantik Scene

Dalam sesi ARCore baru, periksa apakah perangkat pengguna mendukung Scene Semantics API. Tidak semua perangkat yang kompatibel dengan ARCore mendukung Scene Semantics API karena keterbatasan daya pemrosesan.

Untuk menyimpan resource, Scene Semantics dinonaktifkan secara default di ARCore. Mengaktifkan mode semantik agar aplikasi Anda menggunakan Scene Semantics API.

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)

Mendapatkan gambar semantik

Setelah Scene Semantics diaktifkan, gambar semantik dapat diambil. Gambar semantik adalah gambar ImageFormat.Y8, dengan setiap piksel sesuai dengan label semantik yang ditentukan oleh SemanticLabel.

Gunakan Frame.acquireSemanticImage() untuk memperoleh gambar semantik:

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

Gambar semantik output akan tersedia setelah sekitar 1-3 frame dari awal sesi, bergantung pada perangkat.

Mendapatkan gambar keyakinan

Selain gambar semantik, yang memberikan label untuk setiap piksel, API juga memberikan gambar keyakinan dari nilai keyakinan piksel yang sesuai. Gambar keyakinan adalah gambar ImageFormat.Y8, dengan setiap piksel sesuai dengan nilai dalam rentang [0, 255], yang sesuai dengan probabilitas yang terkait dengan label semantik untuk setiap piksel.

Gunakan Frame.acquireSemanticConfidenceImage() untuk mendapatkan gambar keyakinan semantik:

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

Gambar keyakinan output akan tersedia setelah sekitar 1-3 frame dari awal sesi, bergantung pada perangkat.

Mengkueri fraksi piksel untuk label semantik

Anda juga dapat mengkueri fraksi piksel dalam frame saat ini yang termasuk dalam class tertentu, seperti langit. Kueri ini lebih efisien daripada menampilkan gambar semantik dan melakukan penelusuran berdasarkan piksel untuk label tertentu. Fraksi yang ditampilkan adalah nilai float dalam rentang [0.0, 1.0].

Gunakan Frame.getSemanticLabelFraction() untuk memperoleh pecahan untuk label tertentu:

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