با ARCore برای Jetpack XR اطلاعات عمق را در برنامه خود بازیابی کنید

برنامه شما می‌تواند اطلاعات عمق را از طریق ARCore برای Jetpack XR بازیابی کند تا میزان نزدیکی اشیاء فیزیکی به دستگاه را تعیین کند.

یک جلسه ARCore برای Jetpack XR ایجاد کنید

اطلاعات مربوط به حالت سر را از طریق یک جلسه ARCore برای Jetpack XR دریافت کنید. برای دریافت یک Session ، به بخش «درک چرخه عمر یک جلسه » مراجعه کنید.

پیکربندی جلسه

بازیابی نقشه عمق به طور پیش‌فرض در جلسات XR فعال نیست. برای فعال کردن بازیابی نقشه عمق، جلسه را پیکربندی کنید و DepthEstimationMode را تنظیم کنید:

val newConfig = session.config.copy(
    depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

مقادیر زیر برای DepthEstimationMode در دسترس هستند:

  • DISABLED : هیچ اطلاعاتی در مورد عمق صحنه ارائه نشده است.
  • RAW_ONLY : تخمین عمق با عمق خام و مقادیر اطمینان فعال می‌شود.
  • SMOOTH_ONLY : تخمین عمق با عمق و مقادیر اطمینان هموار فعال می‌شود.
  • SMOOTH_AND_RAW : تخمین عمق با هر دو عمق خام و هموار و مقادیر اطمینان فعال می‌شود.

نقشه‌های عمق خام، تخمین عمق را با دقت بالاتری ارائه می‌دهند، اما تصاویر عمق خام ممکن است شامل تخمین عمق برای همه پیکسل‌های تصویر دوربین نباشند. در مقابل، نقشه‌های عمق هموار، عمق تخمینی را برای هر پیکسل ارائه می‌دهند، اما داده‌های عمق به ازای هر پیکسل ممکن است به دلیل هموارسازی و درون‌یابی تخمین‌های عمق، دقت کمتری داشته باشند.

بازیابی داده‌های عمق

برای به دست آوردن داده‌های عمق برای یک دوربین مشخص، از DepthMap استفاده کنید:

val depthMap = DepthMap.left(session) ?: return

دستگاه‌های مختلف قابلیت‌های متفاوتی دارند. دستگاه‌هایی با پیکربندی دوربین استریو، نقشه‌های عمق غیر تهی را برای دوربین‌های left و right برمی‌گردانند. به همین ترتیب، دستگاه‌هایی با یک دوربین واحد، با استفاده از mono ، نقشه عمق غیر تهی را برمی‌گردانند.

محاسبه مقادیر عمق

می‌توانید مقادیر عمق و اطمینان را از نقشه عمق حاصل به دست آورید:

val depthMap = DepthMap.left(session) ?: return

بسته به تنظیمات پیکربندی مورد استفاده، با استفاده از smoothDepthMap یا rawDepthMap به نقشه عمق مربوطه دسترسی پیدا کنید. اندازه‌های موجود در این نقشه‌ها بر حسب متر بیان می‌شوند. همچنین می‌توانید با استفاده از smoothConfidenceMap و rawConfidenceMap به مقادیر اطمینان دسترسی پیدا کنید. این مقادیر از ۰ تا ۲۵۵ متغیر هستند، که ۲۵۵ نشان دهنده بالاترین میزان اطمینان است.

برای رندر کردن یک نقشه عمق برای اهداف اشکال‌زدایی یا تجسم، به بخش عمق برنامه آزمایشی ARCore مراجعه کنید.