Poznaj środowisko użytkownika w programie Unity AR Foundation

Dowiedz się, jak używać interfejsu Scene Semantics API w swoich aplikacjach.

Interfejs Scene Semantics API umożliwia deweloperom analizowanie sceny wokół użytkownika dzięki dostarczaniu informacji semantycznych w czasie rzeczywistym na podstawie modelu uczenia maszynowego. Po otrzymaniu obrazu przedstawiającego scenę na zewnątrz interfejs API zwraca etykietę dla każdego piksela w ramach zestawu przydatnych klas semantycznych, takich jak niebo, budynek, drzewo, droga, chodnik, pojazd, osoba itp. Oprócz etykiet pikseli interfejs API semantyki sceny udostępnia też wartości ufności dla każdej etykiety piksela oraz łatwy sposób na zapytanie o występowanie danej etykiety w scenie na zewnątrz.

Od lewej do prawej: przykłady obrazu wejściowego, semantycznego obrazu z etykietami pikseli i odpowiedniego obrazu ufności:

Przykład obrazu wejściowego, obrazu semantycznego i obrazu z poziomem pewności semantycznej

Wymagania wstępne

Zanim przejdziesz dalej, upewnij się, że rozumiesz podstawowe zagadnienia związane z rozszerzoną rzeczywistością oraz że wiesz, jak skonfigurować sesję ARCore.

Włącz semantykę sceny

nowej sesji ARCore sprawdź, czy urządzenie użytkownika obsługuje interfejs Scene Semantics API. Nie wszystkie urządzenia zgodne z ARCore obsługują interfejs Scene Semantics API ze względu na ograniczenia mocy obliczeniowej.

Aby oszczędzać zasoby, semantyka sceny jest domyślnie wyłączona w ARCore. Włącz tryb semantyczny, aby aplikacja używała interfejsu Scene Semantics API.

ARCoreExtensionsConfig ustaw tryb semantyczny na Włączony.

Tryb semantyczny jest włączony.

Jeśli używasz iOS, w ustawieniach projektu musisz też włączyć Semantics:

  1. Kliknij Edytuj > Ustawienia projektu > Zarządzanie wtyczkami XR > Rozszerzenia ARCore.
  2. W sekcji Funkcje opcjonalne wybierz Semantyka na iOS.

Semantyka na iOS – włączona w sekcji Funkcje opcjonalne.

Pobieranie obrazu semantycznego

Po włączeniu semantyki sceny można pobrać obraz semantyczny. Obraz semantyczny to obraz TextureFormat.R8, w którym każdy piksel odpowiada etykiecie semantycznej zdefiniowanej przez SemanticLabel.

Aby uzyskać obraz semantyczny, użyj ArSemanticManager.TryGetSemanticTexture():

if (semanticManager.TryGetSemanticTexture(out Texture2D semanticImage))
{
    using (semanticImage)
    {
        // Use the semantic image here.
    }
}

Zdjęcia semantyczne powinny być dostępne po około 1–3 klatkach od rozpoczęcia sesji, w zależności od urządzenia.

Pobieranie obrazu z poziomem pewności

Oprócz obrazu semantycznego, który zawiera etykietę dla każdego piksela, interfejs API udostępnia też obraz ufności z odpowiadającymi mu wartościami ufności piksela. Obraz ufności to obraz TextureFormat.Alpha8, w którym każdy piksel odpowiada wartości z zakresu [0, 255], odpowiadającej prawdopodobieństwu związanemu z etykietą semantyczną dla każdego piksela.

Aby uzyskać obraz semantycznej pewności siebie, użyj ArSemanticManager.TryGetSemanticConfidenceTexture():

if (semanticManager.TryGetSemanticConfidenceTexture(out Texture2D semanticConfidenceImage))
{
    using (semanticConfidenceImage)
    {
        // Use the semantic confidence image here.
    }
}

Zdjęcia z wynikiem szacowania powinny być dostępne po około 1–3 klatkach od rozpoczęcia sesji, w zależności od urządzenia.

Zapytanie o ułamek pikseli etykiety semantycznej

Możesz też zapytać o część pikseli w bieżącym ujęciu, które należą do określonej klasy, np. nieba. To zapytanie jest bardziej wydajne niż zwracanie obrazu semantycznego i wyszukiwanie określonej etykiety w ramach pikseli. Zwracana iloraz jest liczbą zmiennoprzecinkową z zakresu [0.0, 1.0].

Aby uzyskać ułamek dla danej etykiety, użyj ArSemanticManager.GetSemanticLabelFraction():

var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);