جارٍ إعداد الكاميرا

تصف CameraConfig خصائص أداة استشعار الكاميرا الأساسية، بما في ذلك:

  • معرّف الكاميرا
  • ما إذا كان سيتم استخدام مستشعر العمق، إن توفر
  • اتجاه الكاميرا:
    • صورة أمامية (ذاتية)
    • الواجهة الخلفية (العالمية)
  • نطاق اللقطات في الثانية (اللقطات في الثانية)
  • أبعاد صورة وحدة المعالجة المركزية (CPU)
  • أبعاد زخرفة وحدة معالجة الرسومات
  • ويمكن تحديد ما إذا كان سيتم استخدام كاميرات الاستيريو المتعددة في الجهاز في حال توفّرها.

عند إنشاء جلسة ARCore جديدة، يستخدم ARCore setCameraConfig لضبط إعدادات الكاميرا التي تتطابق على أفضل نحو مع قائمة الإعدادات المتاحة التي يعرضها getSupportedCameraConfigs(CameraConfigFilter). يمكن لتطبيقك استخدام CameraConfigFilter لتضييق نطاق إعدادات الكاميرا المتاحة لجهاز معيّن في وقت التشغيل عن طريق الفلترة حسب احتياجات التطبيق.

تشمل حالات الاستخدام الشائعة للفلترة ما يلي:

  • الحد الأقصى لعدد اللقطات في الثانية لالتقاط صورة الكاميرا هو 30 لقطة في الثانية. وعلى الأجهزة التي تتيح التصوير بمعدل 60 لقطة في الثانية، سيعطي ARCore الأولوية لإعدادات الكاميرا التي تتوافق مع معدّل عرض الإطارات. لفلترة جميع إعدادات الكاميرا التي تتوافق مع 60 لقطة في الثانية، طبِّق فلترًا باستخدام setTargetFps باستخدام TargetFps.TARGET_FPS_30.

    Java

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

    Kotlin

    // 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.

    Java

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

    Kotlin

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

  • تحديد درجة دقة بديلة لوحدة معالجة الرسومات وعلى الأجهزة المتوافقة، قد يوفّر ARCore درجات دقة إضافية للزخرفة بوحدة معالجة الرسومات. قد يساعد اختيار زخرفة وحدة معالجة الرسومات ذات الدقة المنخفضة في تحسين أداء التطبيق عن طريق تقليل حِمل وحدة معالجة الرسومات وخفض متطلبات معدل نقل البيانات للذاكرة، على الرغم من أنّ ذلك ليس مضمونًا لتحسين الأداء في كل الحالات.

استخدام فلاتر ضبط الكاميرا

اتّبِع هذه الخطوات لتفعيل تطبيقك لفلترة إعدادات الكاميرا.

Java

// 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));

Kotlin

// 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 للاطّلاع على التفاصيل.