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 açık hava sahnesindeki yaygınlığını sorgulamanın kolay bir yolunu da sunar.
Soldan sağa doğru, giriş resmi örnekleri, piksel etiketlerinin anlamsal resmi ve ilgili güven resmi:
Ö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. İşlem gücü kısıtlamaları nedeniyle ARCore uyumlu cihazların tümü 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ı için anlamsal modu etkinleştirin.
// Check whether the user's device supports the Scene Semantics API. int32_t is_scene_semantics_supported = 0; ArSession_isSemanticModeSupported(ar_session, AR_SEMANTIC_MODE_ENABLED, &is_scene_semantics_supported); // Configure the session for AR_SEMANTIC_MODEL_ENABLED. ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); if (is_scene_semantics_supported) { ArConfig_setSemanticMode(ar_session, ar_config, AR_SEMANTIC_MODE_ENABLED); } CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); ArConfig_destroy(ar_config);
Anlamsal görüntü elde etme
Sahne semantikleri etkinleştirildikten sonra semantik resim alınabilir. Anlamsal görüntü, her pikselin ArSemanticLabel
tarafından tanımlanan bir anlamsal etikete karşılık geldiği bir AR_IMAGE_FORMAT_Y8
görüntüdür.
Semantik resmi almak için ArFrame_acquireSemanticImage()
öğesini kullanın:
// Retrieve the semantic image for the current frame, if available. ArImage* semantic_image = NULL; if (ArFrame_acquireSemanticImage(ar_session, ar_frame, &semantic_image) != AR_SUCCESS) { // 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. return; } // If a semantic image is available, use it here.
Çıkışta anlamsal görüntüler, cihaza bağlı olarak oturumun başlangıcından yaklaşık 1-3 kare sonra kullanılabilir.
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üvenilirlik resmi, her pikselin [0, 255]
aralığındaki bir değere karşılık geldiği bir AR_IMAGE_FORMAT_Y8
görüntüsüdür. Bu değer, her pikselin semantik etiketiyle ilişkili olasılığa karşılık gelir.
Semantik güven resmini almak için ArFrame_acquireSemanticConfidenceImage()
öğesini kullanın:
// Retrieve the semantic confidence image for the current frame, if available. ArImage* semantic_confidence_image = NULL; if (ArFrame_acquireSemanticConfidenceImage(ar_session, ar_frame, &semantic_confidence_image) != AR_SUCCESS) { // 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. return; } // If a semantic confidence image is available, use it here.
Çıkış güven resimleri, cihaza bağlı olarak oturumun başlangıcından itibaren yaklaşık 1-3 kare sonra kullanılabilir olmalıdır.
Semantik etiket için piksellerin oranını sorgulayın
Mevcut karedeki belirli bir sınıfa (ör. gökyüzü) 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 kesirli kısmını almak için ArFrame_getSemanticLabelFraction()
değerini kullanın:
// Retrieve the fraction of pixels for the semantic label sky in the current frame. float out_fraction = 0.0f; if (ArFrame_getSemanticLabelFraction(ar_session, ar_frame, AR_SEMANTIC_LABEL_SKY, &out_fraction) != AR_SUCCESS) { // No fraction of semantic labels was retrieved for this frame. }