پیکربندی دوربین

CameraConfig ویژگی های سنسور دوربین زیرین را توصیف می کند، از جمله:

  • شناسه دوربین
  • در صورت موجود بودن، از سنسور عمق استفاده خواهد شد یا خیر
  • جهتی که دوربین رو به آن است:
    • رو به رو (سلفی)
    • رو به عقب (دنیا)
  • محدوده FPS (فریم در ثانیه).
  • ابعاد تصویر CPU
  • بعد بافت GPU
  • در صورت وجود، آیا از دوربین چندگانه استریوی دستگاه استفاده خواهد شد یا خیر

هنگام ایجاد یک جلسه ARCore جدید، ARCore از setCameraConfig برای تنظیم پیکربندی دوربین استفاده می‌کند که بهترین مطابقت را با لیست تنظیمات موجود برگردانده شده توسط getSupportedCameraConfigs(CameraConfigFilter) داشته باشد. برنامه شما می تواند از CameraConfigFilter برای محدود کردن تنظیمات دوربین موجود برای یک دستگاه خاص در زمان اجرا با فیلتر کردن بر اساس نیازهای برنامه شما استفاده کند.

موارد استفاده رایج برای فیلتر کردن عبارتند از:

  • محدود کردن سرعت عکسبرداری دوربین به 30 فریم در ثانیه . در دستگاه‌هایی که از سرعت 60 فریم در ثانیه پشتیبانی می‌کنند، ARCore پیکربندی‌های دوربینی را که از این نرخ فریم پشتیبانی می‌کنند در اولویت قرار می‌دهد. برای فیلتر کردن تمام تنظیمات دوربینی که از 60 فریم در ثانیه پشتیبانی می کنند، با استفاده از TargetFps.TARGET_FPS_30 فیلتری با setTargetFps اعمال کنید.

    جاوا

    // Return only camera configs that target 30 FPS camera capture frame rate.
    filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30));

    کاتلین

    // Return only camera configs that target 30 FPS camera capture frame rate.
    filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)

  • از استفاده ARCore از سنسور عمق جلوگیری کنید . در دستگاه‌هایی که دارای حسگر عمق پشتیبانی می‌شوند، ARCore پیکربندی‌های دوربینی را که از حسگر عمق استفاده می‌کنند، در اولویت قرار می‌دهد. برای فیلتر کردن تمام تنظیمات دوربینی که از حسگر عمق استفاده می‌کنند، فیلتر setDepthSensorUsage را با استفاده از DepthSensorUsage.DO_NOT_USE اعمال کنید.DO_NOT_USE.

    جاوا

    // Return only camera configs that will not use the depth sensor.
    filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE));

    کاتلین

    // Return only camera configs that will not use the depth sensor.
    filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)

  • انتخاب یک وضوح بافت GPU جایگزین در دستگاه‌های پشتیبانی‌شده ، ARCore ممکن است وضوح‌های بافت GPU بیشتری ارائه دهد. انتخاب بافت گرافیکی با وضوح پایین تر ممکن است با کاهش بار GPU و کاهش نیاز به پهنای باند حافظه به بهبود عملکرد برنامه کمک کند، اگرچه تضمینی برای بهبود عملکرد در همه موارد وجود ندارد.

استفاده از فیلترهای پیکربندی دوربین

این مراحل را دنبال کنید تا برنامه خود را فعال کنید تا تنظیمات دوربین را فیلتر کند.

جاوا

// Create a camera config filter for the session.
CameraConfigFilter filter = new CameraConfigFilter(session);

// Return only camera configs that target 30 fps camera capture frame rate.
filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30));

// Return only camera configs that will not use the depth sensor.
filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE));

// Get list of configs that match filter settings.
// In this case, this list is guaranteed to contain at least one element,
// because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE
// are supported on all ARCore supported devices.
List<CameraConfig> cameraConfigList = session.getSupportedCameraConfigs(filter);

// Use element 0 from the list of returned camera configs. This is because
// it contains the camera config that best matches the specified filter
// settings.
session.setCameraConfig(cameraConfigList.get(0));

کاتلین

// Create a camera config filter for the session.
val filter = CameraConfigFilter(session)

// Return only camera configs that target 30 fps camera capture frame rate.
filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)

// Return only camera configs that will not use the depth sensor.
filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)

// Get list of configs that match filter settings.
// In this case, this list is guaranteed to contain at least one element,
// because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE
// are supported on all ARCore supported devices.
val cameraConfigList = session.getSupportedCameraConfigs(filter)

// Use element 0 from the list of returned camera configs. This is because
// it contains the camera config that best matches the specified filter
// settings.
session.cameraConfig = cameraConfigList[0]

حالت فوکوس

همچنین می توانید حالت فوکوس را در پیکربندی جلسه تنظیم کنید. فوکوس ثابت عموماً برای ردیابی بهتر است (و در اکثر دستگاه‌ها پیش‌فرض ARCore است). فوکوس خودکار برای ضبط، عکاسی، فیلمبرداری و زمانی که اشیاء نزدیک باید در فوکوس باشند مورد نیاز است.

برای جزئیات بیشتر به Config.FocusMode مراجعه کنید.