Memahami lingkungan pengguna di iOS

Pelajari cara menggunakan Scene Semantics API di aplikasi Anda sendiri.

Scene Semantics API memungkinkan developer memahami suasana di sekitar pengguna, dengan menyediakan informasi semantik real-time berbasis model ML. Dengan mempertimbangkan gambar pemandangan luar ruangan, API ini akan menampilkan label untuk setiap piksel di seluruh kumpulan class 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 di pemandangan 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 dasar AR 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 batasan daya pemrosesan.

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

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
    configuration.semanticMode = GARSemanticModeEnabled;
}

NSError *error;
[self.garSession setConfiguration:configuration error:&error];

Mendapatkan gambar semantik

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

Gunakan GARFrame.semanticImage untuk mendapatkan gambar semantik:

CVPixelBuffer semanticImage = garFrame.semanticImage;
if (semanticImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

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

Mendapatkan gambar tingkat keyakinan

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

Gunakan GARFrame.semanticConfidenceImage untuk mendapatkan gambar keyakinan semantik:

CVPixelBuffer confidenceImage = garFrame.semanticConfidenceImage;
if (confidenceImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

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

Membuat kueri pecahan piksel untuk label semantik

Anda juga dapat melakukan kueri terhadap pecahan piksel dalam frame saat ini yang termasuk dalam class tertentu, seperti sky. 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 fractionForSemanticLabel: untuk memperoleh pecahan untuk label tertentu:

// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
    float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}