یادداشت‌های انتشار مجموعه تست تصویر دوربین Android 12

تعدادی از تغییرات Camera ITS در نسخه اندروید ۱۲ گنجانده شده است. این صفحه خلاصه‌ای از این تغییرات را ارائه می‌دهد که در چهار دسته کلی قرار می‌گیرند:

ریفکتور به پایتون ۳

با توجه به منسوخ شدن پایتون ۲.۷ در ژانویه ۲۰۲۰، کل کدبیس Camera ITS به پایتون ۳ بازسازی شد. نسخه‌ها و کتابخانه‌های پایتون زیر در اندروید ۱۲ مورد نیاز هستند:

لانچر تست اصلی، tools/run_all_tests.py ، مانند نسخه‌های اندروید ۱۱ یا پایین‌تر باقی می‌ماند و به پایتون ۳ بازسازی شده است.

تمام تست‌های تکی بازسازی شده‌اند و از کلاس جدید تنظیمات تست که در tests/its_base_test.py تعریف شده است، استفاده می‌کنند. اکثر نام‌ها و عملکرد تست‌ها ثابت مانده است. در اندروید ۱۲، اکنون تمام تست‌های تکی صحنه‌های خود را بارگذاری می‌کنند. در حالی که بارگذاری صحنه برای هر تست، زمان کلی تست را افزایش می‌دهد، اشکال‌زدایی تست‌های تکی را امکان‌پذیر می‌کند.

برای اطلاعات بیشتر در مورد تغییرات آزمون‌های انفرادی، به تغییرات آزمون مراجعه کنید.

ماژول‌های پایتون زیر با تغییر نام، بازسازی شده‌اند:

  • pymodules/its/caps.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/sensor_fusion_utils.py

پذیرش چارچوب آزمایشی Mobly

Mobly یک چارچوب تست مبتنی بر پایتون است که از موارد تستی که به چندین دستگاه با تنظیمات سخت‌افزاری سفارشی نیاز دارند، پشتیبانی می‌کند. Camera ITS از زیرساخت تست Mobly برای کنترل و ثبت بهتر تست‌ها استفاده می‌کند.

سیستم ITS دوربین از زیرساخت تست Mobly برای کنترل و ثبت بهتر تست‌ها استفاده می‌کند. Mobly یک چارچوب تست مبتنی بر پایتون است که از موارد تستی که به چندین دستگاه با تنظیمات سخت‌افزاری سفارشی نیاز دارند، پشتیبانی می‌کند. برای اطلاعات بیشتر در مورد Mobly، به google/mobly مراجعه کنید.

فایل‌های config.yml

با استفاده از چارچوب Mobly، می‌توانید یک دستگاه تحت آزمایش (DUT) و یک تبلت نمودار را در کلاس its_base_test تنظیم کنید. یک فایل config.yml (YAML) برای ایجاد یک بستر آزمایشی Mobly استفاده می‌شود. چندین بستر آزمایشی را می‌توان در این فایل پیکربندی پیکربندی کرد، به عنوان مثال، یک تبلت و یک بستر آزمایشی ادغام حسگر. در بخش کنترلر هر بستر آزمایشی، می‌توانید device_ids برای شناسایی دستگاه‌های اندروید مناسب برای اجراکننده آزمایش مشخص کنید. علاوه بر شناسه‌های دستگاه، پارامترهای دیگری مانند brightness تبلت، chart_distance ، debug_mode ، camera_id و scene_id در کلاس آزمایش ارسال می‌شوند. مقادیر رایج پارامترهای آزمایش عبارتند از:

brightness: 192  (all tablets except Pixel C)
chart_distance: 31.0  (rev1/rev1a box for FoV < 90° cameras)
chart_distance: 22.0 (rev2 test rig for FoV > 90° cameras)

آزمایش مبتنی بر تبلت

برای تست مبتنی بر تبلت، کلمه کلیدی TABLET باید در نام testbed وجود داشته باشد. در طول مقداردهی اولیه، اجراکننده تست Mobly، TestParams مقداردهی اولیه کرده و آنها را به تست‌های منفرد ارسال می‌کند.

در ادامه یک نمونه فایل config.yml برای اجراهای مبتنی بر تبلت آمده است.

TestBeds:
  - Name: TEST_BED_TABLET_SCENES
    # Test configuration for scenes[0:4, 6, _change]
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut
          - serial: 5B16001229
            label: tablet

    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      chart_loc_arg: ""
      camera: 0
      scene: <scene-name>  # if <scene-name> runs all scenes

بستر آزمایش را می‌توان با استفاده از tools/run_all_tests.py فراخوانی کرد. اگر هیچ مقداری در خط فرمان وجود نداشته باشد، آزمایش‌ها با مقادیر فایل config.yml اجرا می‌شوند. علاوه بر این، می‌توانید مقادیر فایل پیکربندی camera و scene را در خط فرمان با استفاده از دستوراتی مشابه اندروید ۱۱ یا پایین‌تر، بازنویسی کنید.

برای مثال:

python tools/run_all_tests.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=1 scenes=2,1,0

آزمایش همجوشی حسگر

برای آزمایش ادغام حسگرها ، نام بستر آزمایش باید شامل کلمه کلیدی SENSOR_FUSION باشد. بستر آزمایش صحیح توسط صحنه‌های آزمایش شده تعیین می‌شود. اندروید ۱۲ از هر دو کنترلر آردوینو و کاناکیت برای ادغام حسگرها پشتیبانی می‌کند.

در ادامه یک نمونه فایل config.yml برای اجرای فیوژن سنسورها آمده است.

Testbeds
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion/test_sensor_fusion.py
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: arduino         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

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

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

بسترهای آزمایشی چندگانه

می‌توان چندین بستر تست را در فایل پیکربندی گنجاند. رایج‌ترین ترکیب، داشتن همزمان یک بستر تست تبلت و یک بستر تست ادغام حسگر است.

در ادامه یک نمونه فایل config.yml با هر دو بستر آزمایشی تبلت و حسگر فیوژن ارائه شده است.

Testbeds
  - Name: TEST_BED_TABLET_SCENES
    # Test configuration for scenes[0:4, 6, _change]
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut
          - serial: 5B16001229
            label: tablet

    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      chart_loc_arg: ""
      camera: 0
      scene: <scene-name>  # if <scene-name> runs all scenes

  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion/test_sensor_fusion.py
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: arduino         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

تست دستی

تست دستی همچنان در اندروید ۱۲ پشتیبانی می‌شود. با این حال، بستر تست باید تست را با کلمه کلیدی MANUAL در نام بستر تست مشخص کند. علاوه بر این، بستر تست نمی‌تواند شامل شناسه تبلت باشد.

در ادامه یک نمونه فایل config.yml برای تست دستی آمده است.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      chart_distance: 31.0
      camera: 0
      scene: scene1

صحنه‌های آزمایشی بدون تبلت

تست صحنه ۰ و صحنه ۵ را می‌توان با TEST_BED_TABLET_SCENES یا با TEST_BED_MANUAL انجام داد. با این حال، اگر تست با TEST_BED_TABLET_SCENES انجام شود، تبلت باید متصل باشد و شناسه سریال تبلت باید معتبر باشد، حتی اگر از تبلت استفاده نشود، زیرا تنظیمات کلاس تست، مقدار شناسه سریال را برای تبلت تعیین می‌کند.

اجرای تست‌های تکی

تست‌های تکی فقط برای اهداف اشکال‌زدایی قابل اجرا هستند زیرا نتایج آنها به CTS Verifier گزارش نمی‌شود. از آنجا که فایل‌های config.yml را نمی‌توان در خط فرمان برای camera و scene بازنویسی کرد، این پارامترها باید در فایل config.yml برای تست تکی مورد نظر صحیح باشند. علاوه بر این، اگر بیش از یک بستر تست در فایل پیکربندی وجود دارد، باید بستر تست را با پرچم --test_bed مشخص کنید. به عنوان مثال:

python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES

مصنوعات آزمایشی

در اندروید ۱۲، داده‌های آزمایشی برای Camera ITS مشابه اندروید ۱۱ یا پایین‌تر ذخیره می‌شوند، اما با تغییرات زیر:

  • برای وضوح بیشتر، در دایرکتوری test artifact /tmp ، عبارت CameraITS_ به رشته تصادفی ۸ کاراکتری اضافه شده است.
  • خروجی تست و خطاها به جای test_name_stdout.txt و test_name_stderr.txt برای هر تست در test_log.DEBUG ذخیره می‌شوند.
  • لاگ‌کت‌های DUT و تبلت از هر تست جداگانه در دایرکتوری /tmp/CameraITS_######## ذخیره می‌شوند که اشکال‌زدایی را ساده می‌کند زیرا تمام اطلاعات مورد نیاز برای اشکال‌زدایی مشکلات 3A ثبت می‌شوند.

تغییرات آزمایشی

در اندروید ۱۲، صحنه‌های تبلت به جای فایل‌های PDF، فایل‌های PNG هستند. استفاده از فایل‌های PNG باعث می‌شود مدل‌های بیشتری از تبلت بتوانند صحنه‌ها را به درستی نمایش دهند.

scene0/test_jitter.py

تست test_jitter روی دوربین‌های مخفی فیزیکی در اندروید ۱۲ اجرا می‌شود.

scene1_1/test_black_white.py

برای اندروید ۱۲، test_black_white هم عملکرد test_black_white و هم test_channel_saturation را دارد.

جدول زیر دو آزمایش جداگانه در اندروید ۱۱ را شرح می‌دهد.

نام آزمون سطح اول API ادعاها
scene1_1/test_black_white.py همه نوردهی کوتاه، مقادیر RGB با بهره پایین ~[0, 0, 0]
نوردهی طولانی، مقادیر RGB با بهره بالا ~[255, 255, 255]
scene1_1/test_channel_saturation.py ۲۹ کاهش تلورانس روی تفاوت‌های [۲۵۵، ۲۵۵، ۲۵۵] برای از بین بردن ته رنگ در تصاویر سفید.

جدول زیر تست ادغام‌شده، scene1_1/test_black_white.py، را در اندروید ۱۲ شرح می‌دهد.

نام آزمون سطح اول API ادعاها
scene1_1/test_black_white.py همه نوردهی کوتاه، مقادیر RGB با بهره پایین ~[0, 0, 0]
نوردهی طولانی، مقادیر RGB با بهره بالا ~[255, 255, 255] و کاهش تلورانس بین مقادیر برای از بین بردن ته رنگ در تصاویر سفید.

scene1_1/test_burst_sameness_manual.py

تست test_burst_sameness_manual روی دوربین‌های مخفی فیزیکی در اندروید ۱۲ اجرا می‌شود.

scene1_2/test_tonemap_sequence.py

تست test_tonemap_sequence روی دوربین‌های محدود در اندروید ۱۲ اجرا می‌شود.

scene1_2/test_yuv_plus_raw.py

تست test_yuv_plus_raw روی دوربین‌های مخفی فیزیکی در اندروید ۱۲ اجرا می‌شود.

scene2_a/test_format_combos.py

تست test_format_combos روی دوربین‌های محدود در اندروید ۱۲ اجرا می‌شود.

scene3/test_flip_mirror.py

تست test_flip_mirror روی دوربین‌های محدود در اندروید ۱۲ اجرا می‌شود.

scene4/test_aspect_ratio_and_crop.py

پیدا کردن دایره‌ها در scene4/test_aspect_ratio_and_crop.py در اندروید ۱۲ اصلاح شد.

نسخه‌های قبلی اندروید از روشی استفاده می‌کردند که شامل یافتن یک کانتور فرزند (دایره) درون کانتور والد (مربع) با فیلترهایی برای اندازه و رنگ بود. اندروید ۱۲ از روشی استفاده می‌کند که شامل یافتن تمام کانتورها و سپس فیلتر کردن با یافتن ویژگی‌هایی است که بیشترین شباهت را به دایره دارند. برای حذف دایره‌های جعلی روی صفحه نمایش، به حداقل مساحت کانتور نیاز است و کانتور دایره باید سیاه باشد.

خطوط کانتور و معیارهای انتخاب آنها در تصویر زیر نشان داده شده است.

ترسیم مفهومی خطوط و معیارهای انتخاب

شکل ۱. ترسیم مفهومی خطوط مرزی و معیارهای انتخاب

روش اندروید ۱۲ ساده‌تر است و برای حل مشکل برش کادر مرزی در برخی از تبلت‌های صفحه نمایش کار می‌کند. همه کاندیداهای دایره برای اهداف اشکال‌زدایی ثبت می‌شوند.

در اندروید ۱۲، تست برش برای دستگاه‌های FULL و LEVEL3 اجرا می‌شود. اندروید ۱۱ یا نسخه‌های پایین‌تر، از اجرای تست برش برای دستگاه‌های FULL صرف نظر می‌کنند.

جدول زیر لیست دستورات مربوط به test_aspect_ratio_and_crop.py را که مربوط به یک سطح دستگاه مشخص و اولین سطح API هستند، نشان می‌دهد.

سطح دستگاه سطح اول API ادعاها
محدود همه نسبت ابعاد
میدان دید (FoV) برای فرمت‌های ۴:۳، ۱۶:۹، ۲:۱
کامل < 31 نسبت ابعاد
میدان دید (FoV) برای فرمت‌های ۴:۳، ۱۶:۹، ۲:۱
کامل ۳۱ پوند یا بیشتر برداشت
نسبت ابعاد
میدان دید (FoV) برای فرمت‌های ۴:۳، ۱۶:۹، ۲:۱
سطح ۳ همه برداشت
نسبت ابعاد
میدان دید (FoV) برای فرمت‌های ۴:۳، ۱۶:۹، ۲:۱

scene4/test_multi_camera_alignment.py

متد undo_zoom() برای تصاویر YUV در scene4/test_multi_camera_alignment.py اصلاح شد تا برش روی حسگرهایی که با نسبت ابعاد تصویر مطابقت ندارند، با دقت بیشتری در نظر گرفته شود.

کد پایتون ۲ برای اندروید ۱۱

zoom_ratio = min(1.0 * yuv_w / cr_w, 1.0 * yuv_h / cr_h)
circle[i]['x'] = cr['left'] + circle[i]['x'] / zoom_ratio
circle[i]['y'] = cr['top'] + circle[i]['y'] / zoom_ratio
circle[i]['r'] = circle[i]['r'] / zoom_ratio

کد پایتون ۳ برای اندروید ۱۲

yuv_aspect = yuv_w / yuv_h
relative_aspect = yuv_aspect / (cr_w/cr_h)
if relative_aspect > 1:
  zoom_ratio = yuv_w / cr_w
  yuv_x = 0
  yuv_y = (cr_h - cr_w / yuv_aspect) / 2
else:
  zoom_ratio = yuv_h / cr_h
  yuv_x = (cr_w - cr_h * yuv_aspect) / 2
  yuv_y = 0
circle['x'] = cr['left'] + yuv_x + circle['x'] / zoom_ratio
circle['y'] = cr['top'] + yuv_y + circle['y'] / zoom_ratio
circle['r'] = circle['r'] / zoom_ratio

sensor_fusion/test_sensor_fusion.py

در اندروید ۱۲، روشی برای تشخیص ویژگی‌ها در تصاویر برای تست ادغام حسگر اضافه شده است.

در نسخه‌های پایین‌تر از اندروید ۱۲، از کل تصویر برای یافتن ۲۴۰ ویژگی برتر استفاده می‌شود که سپس ۲۰٪ از آن‌ها در مرکز تصویر پنهان می‌شوند تا از اثرات شاتر چرخشی جلوگیری شود و حداقل تعداد ویژگی‌های مورد نیاز ۳۰ ویژگی است.

اگر ویژگی‌های یافت‌شده با این روش کافی نباشند، اندروید ۱۲ ابتدا ۲۰٪ ناحیه تشخیص ویژگی را در مرکز می‌پوشاند و حداکثر ویژگی‌ها را به دو برابر حداقل ویژگی مورد نیاز محدود می‌کند.

تصویر زیر تفاوت بین تشخیص ویژگی در اندروید ۱۱ و اندروید ۱۲ را نشان می‌دهد. افزایش آستانه حداقل نیاز به ویژگی منجر به تشخیص ویژگی‌های بی‌کیفیت می‌شود و بر اندازه‌گیری‌ها تأثیر منفی می‌گذارد.

تفاوت در تشخیص ویژگی بین اندروید ۱۱ و اندروید ۱۲ تشخیص ویژگی sensor_fusion

شکل 2. تفاوت در تشخیص ویژگی بین اندروید 11 و اندروید 12

آزمایش‌های جدید

scene0/test_solid_color_test_pattern.py

یک تست جدید، test_solid_color_test_pattern ، برای اندروید ۱۲ فعال شده است. این تست برای همه دوربین‌ها فعال است و در جدول زیر شرح داده شده است.

صحنه نام آزمون سطح اول API توضیحات
0 تست_رنگ_جامد_تست_الگو ۳۱ خروجی تصویر با رنگ ثابت و قابلیت برنامه‌ریزی رنگ تصویر را تأیید می‌کند.

الگوهای تست رنگ ثابت باید برای پشتیبانی از حالت حریم خصوصی دوربین فعال شوند. تست test_solid_color_test_pattern خروجی تصویر YUV با رنگ ثابت را با رنگی که توسط الگوی انتخاب شده تعریف شده است، تأیید می‌کند و رنگ تصویر طبق مشخصات تغییر می‌کند.

پارامترها

  • cameraPrivacyModeSupport : تعیین می‌کند که آیا دوربین از حالت حریم خصوصی پشتیبانی می‌کند یا خیر.
  • android.sensor.testPatternMode : حالت الگوی تست را تنظیم می‌کند. این تست از SOLID_COLOR استفاده می‌کند.
  • android.sensor.testPatternData : مقادیر الگوی تست R، Gr، Gb، G را برای حالت الگوی تست تنظیم می‌کند.

برای شرح الگوی تست رنگ ثابت، به SENSOR_TEST_PATTERN_MODE_SOLID_COLOR مراجعه کنید.

روش

فریم‌های YUV برای پارامترهای تنظیم‌شده ضبط می‌شوند و محتوای تصویر اعتبارسنجی می‌شود. الگوی تست مستقیماً از حسگر تصویر خروجی داده می‌شود، بنابراین نیازی به صحنه خاصی نیست. اگر PER_FRAME_CONTROL پشتیبانی شود، برای هر تنظیم تست‌شده، یک فریم YUV ضبط می‌شود. اگر PER_FRAME_CONTROL پشتیبانی نشود، چهار فریم ضبط می‌شود و فقط آخرین فریم آنالیز می‌شود تا پوشش تست در دوربین‌های LIMITED به حداکثر برسد.

تصاویر YUV روی الگوهای تست کاملاً اشباع‌شده‌ی BLACK ، WHITE ، RED ، GREEN و BLUE تنظیم شده‌اند. از آنجایی که تعریف الگوی تست طبق الگوی بایر حسگر است، کانال‌های رنگی باید برای هر رنگ مطابق جدول زیر تنظیم شوند.

رنگ داده الگوی تست (RGGB)
سیاه (0, 0, 0, 0)
سفید (1, 1, 1, 1)
قرمز (1, 0, 0, 0)
سبز (0, 1, 1, 0)
آبی (0, 0, 0, 1)

جدول ادعا

جدول زیر، دستورات تست مربوط به test_solid_color_test_pattern.py را شرح می‌دهد.

دوربین
سطح اول API
نوع دوربین رنگ‌های ادعا شده
۳۱ بایر مشکی، سفید، قرمز، سبز، آبی
۳۱ مونونوکلئوز سیاه، سفید
< 31 بایر/مونو سیاه

آزمون‌های کلاس عملکرد

scene2_c/test_camera_launch_perf_class.py

با استفاده از صحنه چهره scene2_c، تأیید می‌کند که زمان شروع به کار دوربین برای هر دو دوربین اصلی جلو و عقب کمتر از ۵۰۰ میلی‌ثانیه است.

scene2_c/test_jpeg_capture_perf_class.py

تأیید می‌کند که تأخیر ضبط JPEG با کیفیت 1080p برای دوربین‌های اصلی جلو و عقب با صحنه چهره scene2_c کمتر از 1 ثانیه است.