از Raw Depth در برنامه Android Foundation خود استفاده کنید

Raw Depth API داده های عمقی را برای یک تصویر دوربین ارائه می دهد که دقت بالاتری نسبت به داده های API عمق کامل دارد، اما همیشه همه پیکسل ها را پوشش نمی دهد. تصاویر عمق خام، همراه با تصاویر اطمینان منطبق با آن‌ها، می‌توانند بیشتر پردازش شوند و به برنامه‌ها اجازه می‌دهد فقط از داده‌های عمقی استفاده کنند که دقت کافی برای موارد استفاده فردی آن‌ها را دارد.

سازگاری دستگاه

Raw Depth در همه دستگاه‌هایی که از Depth API پشتیبانی می‌کنند در دسترس است. Raw Depth API، مانند Depth API کامل، به سنسور عمق سخت افزاری پشتیبانی شده، مانند سنسور زمان پرواز (ToF) نیاز ندارد. با این حال، هم Raw Depth API و هم کامل Depth API از سنسورهای سخت افزاری پشتیبانی شده ای که ممکن است یک دستگاه داشته باشد استفاده می کنند.

Raw Depth API در مقابل API عمق کامل

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

جدول زیر تفاوت بین Raw Depth API و full Depth API را با استفاده از تصویری از یک صندلی و یک میز در آشپزخانه نشان می دهد.

API برمی گرداند تصویر دوربین تصویر عمقی تصویر اعتماد به نفس
Raw Depth API
  • یک تصویر عمق خام که حاوی تخمین عمق بسیار دقیقی برای برخی، اما نه همه، پیکسل‌های تصویر دوربین است.
  • تصویری مطمئن که به هر پیکسل تصویر با عمق خام اعتماد به نفس می دهد. پیکسل های تصویر دوربینی که تخمین عمق ندارند، اطمینان صفر دارند.
API با عمق کامل
  • یک تصویر عمقی "هموار" که حاوی تخمین عمق برای هر پیکسل است.
  • هیچ تصویر اطمینانی با این API ارائه نمی شود.
N/A

تصاویر اعتماد به نفس

در تصاویر مطمئنی که توسط Raw Depth API برگردانده می‌شوند، پیکسل‌های روشن‌تر دارای مقادیر اطمینان بالاتری هستند، پیکسل‌های سفید نشان دهنده اطمینان کامل و پیکسل‌های سیاه نشان دهنده عدم اطمینان هستند. به طور کلی، مناطقی در تصویر دوربین که بافت بیشتری دارند، مانند یک درخت، نسبت به مناطقی که فاقد بافت هستند، مانند یک دیوار خالی، اطمینان عمق خام بالاتری خواهند داشت. سطوح بدون بافت معمولاً اطمینان صفر دارند.

اگر دستگاه مورد نظر دارای یک سنسور عمق سخت افزاری پشتیبانی شده باشد، اطمینان در مناطقی از تصویر که به اندازه کافی نزدیک به دوربین هستند، احتمالاً حتی در سطوح بدون بافت بیشتر خواهد بود.

محاسبه هزینه

هزینه محاسباتی Raw Depth API حدود نیمی از هزینه محاسباتی برای Depth API کامل است.

موارد استفاده کنید

با استفاده از Raw Depth API، می توانید تصاویر عمقی به دست آورید که نمایش دقیق تری از هندسه اشیاء در صحنه ارائه می دهد. داده‌های عمق خام می‌توانند هنگام ایجاد تجربیات واقعیت افزوده مفید باشند، جایی که دقت عمق و جزئیات بیشتر برای وظایف درک هندسه مورد نیاز است. برخی از موارد استفاده عبارتند از:

  • بازسازی سه بعدی
  • اندازه گیری
  • تشخیص شکل

پیش نیازها

قبل از ادامه، مطمئن شوید که مفاهیم اساسی AR و نحوه پیکربندی یک جلسه ARCore را درک کرده اید.

Depth را فعال کنید

در جلسه 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 برای بدست آوردن آخرین تصویر عمق خام روی 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;
}