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

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

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

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

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

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

    // Return only camera configs that target 30 FPS camera capture frame
    // rate.
    ArCameraConfigFilter_setTargetFps(session, filter,
                                      AR_CAMERA_CONFIG_TARGET_FPS_30);

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

    ArCameraConfigFilter_setDepthSensorUsage(
        session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_DO_NOT_USE);

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

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

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

// Create an ARCore session.
ArSession* session;
ArSession_create(env, context, &session);

// Create a camera config list and filter for the session.
ArCameraConfig* selected_config;
ArCameraConfigList* configs;
ArCameraConfigFilter* filter;
ArCameraConfig_create(session, &selected_config);
ArCameraConfigList_create(session, &configs);
ArCameraConfigFilter_create(session, &filter);

// Return only camera configs that target 30 fps camera capture frame rate.
ArCameraConfigFilter_setTargetFps(session, filter,
                                  AR_CAMERA_CONFIG_TARGET_FPS_30);

// Return only camera configs that will not use the depth sensor.
ArCameraConfigFilter_setDepthSensorUsage(
    session, filter, AR_CAMERA_CONFIG_DEPTH_SENSOR_USAGE_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.
ArSession_getSupportedCameraConfigsWithFilter(session, filter, configs);

// 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.
ArCameraConfigList_getItem(session, configs, 0, selected_config);

// Set the camera config to use selected_config.
ArSession_setCameraConfig(session, selected_config);

// Free memory.
ArCameraConfigFilter_destroy(filter);
ArCameraConfigList_destroy(configs);

حالت فوکوس

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

برای جزئیات بیشتر به ArConfig_setFocusMode() مراجعه کنید.