iOS'te kullanıcının 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.

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

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

Anlamsal resmi edinin

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

Anlamsal resmi edinmek için GARFrame.semanticImage değerini kullanın:

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

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 kCVPixelFormatType_OneComponent8 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 GARFrame.semanticConfidenceImage değerini kullanın:

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

Çı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 fractionForSemanticLabel: değerini kullanın:

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