Tăng phạm vi bằng công nghệ Độ sâu không gian địa lý

Ảnh chính về Độ sâu không gian địa lý

API Độ sâu ARCore hiện hỗ trợ tính năng Độ sâu không gian địa lý. API này tự động tăng phạm vi và tốc độ của API Độ sâu khi tính năng Hình học cảnh quan đường phố cũng được bật. Khi ở một vị trí có phạm vi bao phủ của VPS và đang bật tính năng Hình học cảnh đường phố, các hình ảnh đầu ra từ depth API bao gồm địa hình và hình học toà nhà được truy xuất trong khu vực cách vị trí hiện tại tới 65 mét. Dữ liệu độ sâu này được truy xuất từ hình học sẽ được hợp nhất với kết quả quan sát chiều sâu cục bộ và được cập nhật khi người dùng di chuyển đến vị trí mới.

Các lệnh gọi API Độ sâu ARCore hiện cung cấp cả hình ảnh quan sát cục bộ từ máy ảnh cũng như các toà nhà và địa hình từ Hình học cảnh quan đường phố. Các lệnh gọi này được hợp nhất thành một hình ảnh chiều sâu duy nhất.

Khả năng tương thích với thiết bị

Tính năng Độ sâu không gian địa lý có trên tất cả các thiết bị hỗ trợ API Chiều sâu. Tính năng này không yêu cầu cảm biến độ sâu phần cứng được hỗ trợ, chẳng hạn như cảm biến thời gian bay (ToF). Tuy nhiên, depth API sử dụng mọi cảm biến phần cứng được hỗ trợ mà thiết bị có thể có.

Ảnh hưởng đến hiệu suất

Độ sâu không gian địa lý đưa ra một phép tính nhỏ một lần vào đầu phiên để tích hợp Hình học cảnh đường phố vào biểu diễn chiều sâu khi được tải xuống ban đầu, nhưng không làm tăng chi phí tính toán chiều sâu một cách đáng kể.

Phạm vi chiều sâu

Khi không có tính năng Độ sâu không gian địa lý, các phạm vi thông thường của hình ảnh chiều sâu là khoảng 20-30 mét, với mật độ và độ chính xác của các quan sát độ sâu vượt quá phạm vi đó. Khi bật tính năng Độ sâu không gian địa lý, thông thường, bạn sẽ thấy các giá trị độ sâu được lấy mẫu với mật độ cao đạt tối đa 65,535 mét, ngay cả khi chỉ có một lượng nhỏ chuyển động ban đầu.

Trường hợp sử dụng

Bạn có thể dùng ARCore depth API cho mọi trường hợp sử dụng hiện có đã được hỗ trợ. Với tính năng Độ sâu không gian địa lý, hình ảnh chiều sâu thu được tại các vị trí hỗ trợ VPS sẽ được điền độ sâu tầm xa nhanh hơn trước đây. Nhờ đó, các trường hợp sử dụng có thể nhắm mục tiêu độ sâu tầm xa ở môi trường ngoài trời. Sau đây là một số trường hợp sử dụng:

  • Nội dung ảo và các hiệu ứng hình ảnh khác bị che khuất trong phạm vi toà nhà
  • Chỉ đường ngoài trời
  • Đo khoảng cách

Các điểm hạn chế

Độ sâu không gian địa lý chỉ được hỗ trợ trong các khu vực hỗ trợ bản địa hoá VPS và Hình học cảnh quan đường phố. Ở những khu vực khác, API Độ sâu ARCore sẽ hoạt động như bình thường mà không kèm theo giá trị Không gian địa lý.

Đ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 Độ sâu không gian địa lý

Trong phiên ARCore mới, kiểm tra xem thiết bị của người dùng có hỗ trợ Độ sâu và API không gian địa lý hay không. Không phải thiết bị nào tương thích với ARCore cũng hỗ trợ depth API do những hạn chế về công suất xử lý.

Để tiết kiệm tài nguyên, theo mặc định, độ sâu sẽ bị tắt trên ARCore. Bật chế độ chiều sâu để ứng dụng sử dụng depth API. Ngoài ra, hãy bật Chế độ không gian địa lý và Hình học cảnh đường phố để hãy sử dụng tính năng Độ sâu không gian địa lý.

Java

Config config = session.getConfig();

// Check whether the user's device supports the Depth API.
boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC);
boolean isGeospatialSupported =
    session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED);
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.setDepthMode(Config.DepthMode.AUTOMATIC);
  config.setGeospatialMode(Config.GeospatialMode.ENABLED);
  config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
}
session.configure(config);

Kotlin

val config = session.config

// Check whether the user's device supports the Depth API.
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)
val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED)
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.depthMode = Config.DepthMode.AUTOMATIC
  config.geospatialMode = Config.GeospatialMode.ENABLED
  config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
}
session.configure(config)

Sau khi bật tính năng Độ sâu không gian địa lý, bạn có thể truy cập vào hình ảnh chiều sâu thông qua lệnh gọi API hiện có như mô tả trong hướng dẫn về độ sâu không gian địa lý.

Java

// Retrieve the depth image for the current frame, if available.
Image depthImage = null;
try {
  depthImage = frame.acquireDepthImage16Bits();
  // Use the depth image here.
} catch (NotYetAvailableException e) {
  // This means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
} finally {
  if (depthImage != null) {
    depthImage.close();
  }
}

Kotlin

// Retrieve the depth image for the current frame, if available.
try {
  frame.acquireDepthImage16Bits().use { depthImage ->
    // Use the depth image here.
  }
} catch (e: NotYetAvailableException) {
  // This means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
}

Bước tiếp theo