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

يصف 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 لمزيد من التفاصيل.