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

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

توافق الجهاز

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

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

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

يوضِّح الجدول التالي الاختلافات بين Raw Depth API و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;
}