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

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

توافق الجهاز

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

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

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

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

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

صور الثقة

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

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

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

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

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

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

  • إعادة بناء ثلاثية الأبعاد
  • القياس
  • اكتشاف الشكل

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

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

تفعيل العمق

في جلسة ARCore جديدة، تحقق مما إذا كان جهاز المستخدم يتوافق مع ميزة Depth. لا تتيح بعض الأجهزة المتوافقة مع 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 للحصول على أحدث صورة بعمق أوّلي في وحدة المعالجة المركزية (CPU).

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

يمكنك طلب 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;
}