Tìm hiểu cách sử dụng API Ngữ nghĩa cảnh trong ứng dụng của riêng bạn.
API Ngữ nghĩa cảnh cho phép nhà phát triển hiểu được 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. Khi nhận được hình ảnh của một cảnh ngoài trời, API sẽ trả về một nhãn cho mỗi pixel trong 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, đường, vỉa hè, xe cộ, người và nhiều lớp khác. Ngoài nhãn pixel, API Ngữ nghĩa cảnh 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 trong cảnh ngoài trời.
Từ trái sang phải, 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:
Điều kiện tiên quyết
Hãy đảm bảo rằng bạn hiểu 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 ngữ nghĩa cảnh
Trong một phiên ARCore mới, hãy kiểm tra xem thiết bị của người dùng có hỗ trợ API Scene Semantics hay không. Không phải thiết bị nào tương thích với ARCore cũng hỗ trợ API ngữ nghĩa cảnh do hạn chế về sức mạnh xử lý.
Để tiết kiệm tài nguyên, theo mặc định, bạn sẽ tắt tính năng Ngữ nghĩa cảnh trên ARCore. Bật chế độ ngữ nghĩa để ứng dụng của bạn sử dụng API Ngữ nghĩa cảnh.
Trong ARCoreExtensionsConfig, hãy đặt Chế độ ngữ nghĩa thành Bật.
Nếu sử dụng iOS, bạn cũng phải bật Semantics trong phần cài đặt dự án:
- Chuyển đến Edit (Chỉnh sửa) > Project Settings (Cài đặt dự án) > XR Plug-In Management (Quản lý trình bổ trợ XR) > ARCore Extensions (Tiện ích ARCore).
- 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).
Lấy hình ảnh ngữ nghĩa
Sau khi bật Scene Semantics, bạn có thể truy xuất hình ảnh ngữ nghĩa. Hình ảnh ngữ nghĩa là hình ảnh TextureFormat.R8
, trong đó mỗi pixel tương ứng với một nhãn ngữ nghĩa do SemanticLabel
xác định.
Sử dụng ArSemanticManager.TryGetSemanticTexture()
để thu thập 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ẽ xuất hiệ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 về độ tự tin
Ngoài hình ảnh ngữ nghĩa cung cấp nhãn cho mỗi điểm ảnh, API này cũng cung cấp hình ảnh độ tin cậy của các giá trị độ tin cậy điểm ảnh 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 liên kết với nhãn ngữ nghĩa cho mỗi pixel.
Sử dụng ArSemanticManager.TryGetSemanticConfidenceTexture()
để lấy hình ảnh về độ tin cậy 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-3 khung hình kể từ khi bắt đầu phiên, tuỳ thuộc vào thiết bị.
Truy vấn phân số pixel cho nhãn ngữ nghĩa
Bạn cũng có thể truy vấn tỷ lệ phần trăm pixel trong khung hình hiện tại thuộc một lớp cụ thể, chẳng hạn như bầu trời. Truy vấn này hiệu quả hơn so với 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ị float trong phạm vi [0.0, 1.0]
.
Sử dụng ArSemanticManager.GetSemanticLabelFraction()
để lấy phân số cho một nhãn nhất định:
var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);