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

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

توافق الجهاز

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

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

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

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

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

صور الثقة

من حيث ثقة الصور التي تعرضها واجهة برمجة التطبيقات 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 للحصول على صورة الثقة على وحدة المعالجة المركزية (CPU).

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