محدوده خود را با Geospatial Depth افزایش دهید

قهرمان عمق جغرافیایی

ARCore Depth API اکنون از Geospatial Depth پشتیبانی می‌کند، که به طور خودکار دامنه و سرعت Depth API را هنگامی که Streetscape Geometry نیز فعال است، افزایش می‌دهد. هنگامی که در مکانی با پوشش VPS و با فعال کردن Streetscape Geometry، تصاویر خروجی از Depth API شامل زمین و هندسه ساختمان است که در منطقه تا فاصله 65 متری از موقعیت فعلی بازیابی شده است. این داده های عمقی بازیابی شده از هندسه با مشاهدات عمق محلی ادغام می شوند و با حرکت کاربر به مکان جدید به روز می شوند.

تماس‌های ARCore Depth API اکنون مشاهدات محلی را از دوربین و همچنین ساختمان‌ها و زمین را از Streetscape Geometry ارائه می‌دهند که در یک تصویر عمق واحد ادغام شده‌اند.

سازگاری دستگاه

Geospatial Depth در همه دستگاه‌هایی که از Depth API پشتیبانی می‌کنند در دسترس است. این ویژگی به سنسور عمق سخت افزاری پشتیبانی شده مانند سنسور زمان پرواز (ToF) نیاز ندارد. با این حال، Depth API از هر سنسور سخت افزاری پشتیبانی شده ای که ممکن است یک دستگاه داشته باشد استفاده می کند.

تاثیر عملکرد

Geospatial Depth یک محاسبات کوچک یکباره را در ابتدای جلسه معرفی می کند تا هنگام دانلود اولیه، هندسه نمای خیابان را در نمایش عمق ادغام کند، اما در غیر این صورت هزینه محاسبه عمق را به طور قابل اندازه گیری افزایش نمی دهد.

محدوده عمق

بدون عمق جغرافیایی، محدوده‌های معمولی در تصاویر عمق حدود 20 تا 30 متر دورتر هستند، با چگالی و دقت مشاهدات عمقی فراتر از این محدوده کاهش می‌یابد. با فعال کردن Geospatial Depth، مشاهده مقادیر عمق نمونه متراکم به حداکثر 65.535 متر، حتی با مقدار کمی حرکت اولیه، معمول است.

موارد استفاده کنید

ARCore Depth API را می توان برای همه موارد استفاده موجود که قبلاً پشتیبانی شده است استفاده کرد. با Geospatial Depth، تصاویر عمقی به‌دست‌آمده در مکان‌های پشتیبانی‌شده از VPS با عمق برد بلند سریع‌تر از قبل پر می‌شوند و موارد استفاده را قادر می‌سازد تا عمق برد بلند را در محیط‌های بیرونی هدف قرار دهند. برخی از موارد استفاده عبارتند از:

  • انسداد محتوای مجازی و سایر جلوه های بصری در مقیاس ساختمان
  • ناوبری در فضای باز
  • اندازه گیری فاصله

محدودیت ها

Geospatial Depth فقط در مناطقی پشتیبانی می‌شود که از محلی‌سازی VPS و Streetscape Geometry پشتیبانی می‌کنند. در مناطق دیگر، ARCore Depth API بدون مقادیر Geospatial به صورت عادی عمل می کند.

پیش نیازها

قبل از ادامه، مطمئن شوید که مفاهیم اساسی AR و نحوه پیکربندی یک جلسه ARCore را درک کرده اید.

عمق مکانی را فعال کنید

در یک جلسه جدید ARCore ، بررسی کنید که آیا دستگاه کاربر از Depth و Geospatial API پشتیبانی می‌کند یا خیر. همه دستگاه‌های سازگار با ARCore از Depth API به دلیل محدودیت‌های قدرت پردازشی پشتیبانی نمی‌کنند.

برای ذخیره منابع، عمق به طور پیش فرض در ARCore غیرفعال است. حالت عمق را فعال کنید تا برنامه شما از Depth API استفاده کند. علاوه بر این، حالت Geospatial و Streetscape Geometry را برای استفاده از Geospatial Depth فعال کنید.

جاوا

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);

کاتلین

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)

هنگامی که Geospatial Depth فعال شود، می توان به تصاویر عمق از طریق فراخوانی های API موجود همانطور که در راهنمای توسعه دهنده عمق توضیح داده شده است، دسترسی پیدا کرد.

جاوا

// 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();
  }
}

کاتلین

// 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.
}

بعدش چی