Tìm hiểu môi trường của người dùng trên nền tảng AR của Unity

Tìm hiểu cách sử dụng Scene Semantics API trong ứng dụng của riêng bạn.

Scene Semantics API giúp nhà phát triển hiểu cảnh xung quanh người dùng bằng cách cung cấp thông tin ngữ nghĩa theo thời gian thực, dựa trên mô hình học máy. Với hình ảnh của một cảnh ngoài trời, API trả về một nhãn cho từng pixel trên một tập hợp các lớp ngữ nghĩa hữu ích, chẳng hạn như bầu trời, toà nhà, cây cối, đường, vỉa hè, phương tiện đi lại, người, v.v. Ngoài nhãn pixel, Scene Semantics API cũng cung cấp các giá trị tin cậy cho từng nhãn pixel và một cách dễ sử dụng để truy vấn mức độ phổ biến của một nhãn nhất định ở cảnh ngoài trời.

Từ trái sang phải là ví dụ về hình ảnh đầu vào, hình ảnh ngữ nghĩa của nhãn pixel và hình ảnh tin cậy tương ứng:

Ví dụ về hình ảnh đầu vào, hình ảnh ngữ nghĩa và hình ảnh tin cậy về ngữ nghĩa.

Điều kiện tiên quyết

Đảm bảo rằng bạn hiểu rõ các khái niệm cơ bản về AR và cách định cấu hình phiên ARCore trước khi tiếp tục.

Bật tính năng diễn giải ngữ nghĩa cho cảnh

Trong phiên ARCore mới, hãy kiểm tra xem thiết bị của người dùng có hỗ trợ Scene Semantics API (API ngữ nghĩa cảnh) hay không. Không phải thiết bị nào tương thích với ARCore cũng hỗ trợ Scene Semantics API do các hạn chế về công suất xử lý.

Để tiết kiệm tài nguyên, theo mặc định, tính năng Ngữ nghĩa của cảnh sẽ bị tắt trên ARCore. Bật chế độ ngữ nghĩa để ứng dụng của bạn dùng Scene Semantics API (API ngữ nghĩa cảnh).

Trong ARCoreExtensionsConfig, hãy đặt Chế độ ngữ nghĩa thành Enabled (Bật).

Chế độ ngữ nghĩa được đặt thành Bật.

Nếu sử dụng iOS, bạn cũng phải bật Ngữ nghĩa trong phần cài đặt dự án:

  1. Chuyển đến Chỉnh sửa > Cài đặt dự án > Quản lý plugin XR > Tiện ích ARCore.
  2. Trong phần optional features (Tính năng không bắt buộc), hãy chọn Semantics on iOS (Ngữ nghĩa trên iOS).

Ngữ nghĩa trên iOS đã được bật trong các tính năng không bắt buộc.

Lấy hình ảnh ngữ nghĩa

Sau khi bật tính năng Ngữ nghĩa cảnh, bạn có thể truy xuất hình ảnh ngữ nghĩa. Hình ảnh ngữ nghĩa là một hình ảnh TextureFormat.R8, trong đó mỗi pixel tương ứng với một nhãn ngữ nghĩa được SemanticLabel xác định.

Sử dụng ArSemanticManager.TryGetSemanticTexture() để lấy hình ảnh ngữ nghĩa:

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

Hình ảnh ngữ nghĩa đầu ra sẽ có sẵn sau khoảng 1-3 khung hình kể từ khi bắt đầu phiên, tuỳ thuộc vào thiết bị.

Lấy hình ảnh tin cậy

Ngoài hình ảnh ngữ nghĩa (cung cấp nhãn cho từng pixel), API cũng cung cấp hình ảnh tin cậy của các giá trị tin cậy của pixel tương ứng. Hình ảnh tin cậy là hình ảnh TextureFormat.Alpha8, trong đó mỗi pixel tương ứng với một giá trị trong phạm vi [0, 255], tương ứng với xác suất được liên kết với nhãn ngữ nghĩa cho mỗi pixel.

Sử dụng ArSemanticManager.TryGetSemanticConfidenceTexture() để thu được hình ảnh tin cậy về ngữ nghĩa:

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

Hình ảnh độ tin cậy đầu ra sẽ xuất hiện sau khoảng 1 đến 3 khung hình kể từ khi bắt đầu phiên, tuỳ thuộc vào thiết bị.

Truy vấn tỷ lệ pixel cho nhãn ngữ nghĩa

Bạn cũng có thể truy vấn tỷ lệ pixel trong khung hiện tại thuộc một lớp cụ thể, chẳng hạn như sky. Truy vấn này hiệu quả hơn việc trả về hình ảnh ngữ nghĩa và thực hiện tìm kiếm theo pixel cho một nhãn cụ thể. Phân số được trả về là một giá trị số thực trong dải ô [0.0, 1.0].

Sử dụng ArSemanticManager.GetSemanticLabelFraction() để thu được phân số cho một nhãn nhất định:

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