استخدام مقياس Raw Depth في تطبيق AR Foundation المتوافق مع Android

توفّر واجهة برمجة التطبيقات Raw Depth API بيانات العمق لصورة الكاميرا بدقة أعلى من بيانات Depth API الكاملة، ولكنها لا تغطي دائمًا كل بكسل. يمكن أيضًا معالجة صور العمق الأوّلية، بالإضافة إلى صور الثقة المطابقة، ما يسمح للتطبيقات باستخدام بيانات العمق التي تتسم بدقة كافية لحالة الاستخدام الفردية.

توافق الجهاز

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

واجهة برمجة التطبيقات Raw Depth API مقارنةً بواجهة برمجة التطبيقات Depth API الكاملة

توفّر واجهة برمجة التطبيقات Raw Depth API تقديرات العمق بدقة أعلى، ولكن قد لا تتضمّن صور العمق الأولي تقديرات العمق لجميع وحدات البكسل في صورة الكاميرا. في المقابل، توفّر Depth API الكاملة عمقًا مقدَّرًا لكل بكسل، ولكن قد تكون بيانات العمق لكل بكسل أقل دقة بسبب التلطيف والدمج لتقديرات العمق. يكون تنسيق الصور المرسَلة عبر واجهتَي برمجة التطبيقات وحجمها متطابقَين. يختلف المحتوى فقط.

يوضِّح الجدول التالي الاختلافات بين Raw Depth API وDepth API الكاملة باستخدام صورة لكرسي وطاولة في مطبخ.

واجهة برمجة التطبيقات المرتجعات صورة الكاميرا صورة العمق صورة الثقة
Raw Depth API
  • صورة عمق أولية تحتوي على تقدير دقيق جدًا للعمق لبعض وحدات البكسل في صورة الكاميرا وليس كلها
  • صورة ثقة تُظهر درجة الثقة لكل بكسل من صورة العمق الأولية تكون وحدات البكسل في صورة الكاميرا التي لا تتضمّن تقديرًا للعمق ذات ثقة صفرية.
Full Depth API
  • صورة عمق واحدة "مُبسّطة" تحتوي على تقدير للعمق لكل بكسل
  • لا يتم تقديم صورة ثقة مع واجهة برمجة التطبيقات هذه.
لا ينطبق

صور الثقة

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

إذا كان الجهاز المستهدَف يحتوي على أداة استشعار عمق متوافقة، من المرجّح أن تكون الثقة في مناطق الصورة القريبة من الكاميرا أعلى، حتى على الأسطح غير المزوّدة بنسيج.

تكلفة الحوسبة

تبلغ تكلفة الحوسبة لواجهة برمجة التطبيقات Raw Depth API حوالي نصف تكلفة الحوسبة لواجهة برمجة التطبيقات Depth API الكاملة.

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

باستخدام Raw Depth API، يمكنك الحصول على صور ذات عمق توفّر تمثيلاً أكثر تفصيلاً لشكل الأجسام في المشهد. يمكن أن تكون بيانات العمق الأوّلية مفيدة عند إنشاء تجارب الواقع المعزّز التي تتطلّب زيادة دقة العمق والتفاصيل لمهام فهم الأشكال الهندسية. تشمل بعض حالات الاستخدام ما يلي:

  • إعادة الإنشاء الثلاثي الأبعاد
  • القياس
  • ميزة "التعرّف على الشكل"

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

احرص على فهم مفاهيم الواقع المعزّز الأساسية وكيفية ضبط جلسة ARCore قبل المتابعة.

تفعيل ميزة "العمق"

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

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

الحصول على أحدث صورة اتّباعية خام

اتصل بـ AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() واستخدِم AROcclusionManager.environmentDepthTemporalSmoothingRequested للحصول على أحدث صورة عمق أولية على وحدة المعالجة المركزية.

الحصول على أحدث صورة لثقة العمق الأوّلي

استخدِم AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() واستخدم AROcclusionManager.environmentDepthTemporalSmoothingRequested للحصول على صورة الثقة في وحدة المعالجة المركزية.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}