استخدِم تقنية "العمق الجغرافي المكاني" لزيادة مدى وصولك

بطل العمق الجيوفضائي

أصبحت واجهة برمجة التطبيقات ARCore Depth API متوافقة الآن مع ميزة "العمق الجغرافي" التي تعمل على زيادة نطاق واجهة برمجة التطبيقات Depth API وسرعتها تلقائيًا عند تفعيل Streetscape Geometry أيضًا. عندما تكون في موقع مع تغطية VPS وتم تفعيل ميزة Streetscape Geometry، تشتمل صور الإخراج من Depth API على هندسة التضاريس والمباني التي تم استردادها في المنطقة على مسافة 65 مترًا من الموضع الحالي. يتم دمج بيانات العمق هذه التي يتم استردادها من الهندسة مع ملاحظات العمق المحلية ويتم تحديثها عندما ينتقل المستخدم إلى موقع جديد.

توفر طلبات البيانات من واجهة برمجة التطبيقات ARCore Depth الآن كلاً من الملاحظات المحلية من الكاميرا بالإضافة إلى المباني والتضاريس من صورة Streetscape Geometry، والتي تم دمجها في صورة بعمق واحد.

توافق الجهاز

تتوفر ميزة "العمق الجغرافي المكاني" على جميع الأجهزة المتوافقة مع Depth API. لا تتطلّب هذه الميزة أداة استشعار عمق الأجهزة المتوافقة، مثل أداة استشعار وقت الطيران (ToF). بالرغم من ذلك، تستفيد Depth API من أي أدوات استشعار متوافقة مع الجهاز.

تأثير الأداء

تقدم تقنية Geosial Depth عملية حسابية صغيرة لمرة واحدة في بداية الجلسة لدمج هندسة التجوّل الافتراضي في التمثيل العمق عند تنزيلها في البداية، ولكنها لا تؤدي إلى زيادة تكلفة حساب العمق بشكل ملموس.

نطاق العمق

بدون العمق الجيوفضائي، تكون النطاقات النموذجية في العمق على بُعد حوالي 20-30 مترًا، مع تقليل كثافة ودقة الملاحظات العميقة عن هذا النطاق. عند تفعيل العمق الجيوفضائي، من الطبيعي أن تصل قيم العمق الكثيفة التي تم أخذ عينات لها إلى الحد الأقصى البالغ 65.535 مترًا، حتى مع مقدار صغير من الحركة الأولية.

حالات الاستخدام

ويمكن استخدام ARCore Depth API لجميع حالات الاستخدام الحالية المتوافقة. باستخدام ميزة "العمق الجيوفضائي"، سيتم ملء الصور المعمّقة التي تم الحصول عليها في المواقع الجغرافية المتوافقة مع VPS بعمق بعيد المدى بشكل أسرع من ذي قبل، ما يتيح حالات الاستخدام التي تستهدف العمق بعيد المدى في البيئات الخارجية. تشمل بعض حالات الاستخدام ما يلي:

  • حجب المحتوى الافتراضي والتأثيرات المرئية الأخرى على نطاق واسع
  • الملاحة الخارجية
  • قياسات المسافة

القيود

لا يتم دعم العمق الجيوفضائي إلا في المناطق التي تدعم أقلمة VPS والتجوّل الافتراضي Geometry. في مناطق أخرى، ستعمل واجهة برمجة تطبيقات ARCore Depth على النحو المعتاد بدون استخدام القيم الجيوفضائية.

المتطلبات الأساسية

قبل المتابعة، تأكد من فهم مفاهيم الواقع المعزّز الأساسية وكيفية ضبط جلسة ARCore.

تفعيل العمق الجغرافي المكاني

في جلسة ARCore جديدة، تحقّق مما إذا كان جهاز المستخدم يتوافق مع Depth وGeospatial API. لا تتوافق بعض الأجهزة المتوافقة مع ARCore مع واجهة برمجة التطبيقات Depth API بسبب قيود معالجة البيانات.

لحفظ الموارد، يتم إيقاف العمق تلقائيًا على ARCore. يمكنك تفعيل وضع العمق لضبط تطبيقك على Depth API. بالإضافة إلى ذلك، يمكنك تفعيل الوضع الجغرافي المكاني و"هندسة التجوّل الافتراضي" لاستخدام ميزة "العمق الجيوفضائي".

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)

بعد تفعيل "العمق الجغرافي المكاني"، يمكن الوصول إلى صور العمق من خلال طلبات البيانات من واجهة برمجة التطبيقات الحالية كما هو موضَّح في دليل مطوّر برامج التفاصيل.

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

الخطوات التالية