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

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

Refactor به پایتون 3

به دلیل منسوخ شدن Python 2.7 در ژانویه 2020، کل پایگاه کد Camera ITS به Python 3 بازسازی شد. نسخه‌ها و کتابخانه‌های Python زیر در Android 12 مورد نیاز است:

راه‌انداز آزمایشی اصلی، tools/run_all_tests.py ، مانند نسخه‌های اندروید 11 یا پایین‌تر باقی می‌ماند و به پایتون 3 تغییر می‌یابد.

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

برای اطلاعات بیشتر در مورد تغییرات آزمون فردی، تغییرات تست را ببینید.

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

  • 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 برای فعال کردن کنترل و ثبت بهتر تست ها استفاده می کند.

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

فایل های config.yml

با چارچوب Mobly، می‌توانید یک دستگاه تحت آزمایش (DUT) و یک تبلت نمودار در کلاس its_base_test راه‌اندازی کنید. یک فایل config.yml (YAML) برای ایجاد یک بستر آزمایشی Mobly استفاده می شود. بسترهای آزمایشی متعددی را می توان در این فایل پیکربندی پیکربندی کرد، به عنوان مثال، یک تبلت و یک بستر تست فیوژن سنسور. در بخش کنترل‌کننده هر بستر آزمایشی، می‌توانید device_ids برای شناسایی دستگاه‌های Android مناسب برای اجراکننده تست مشخص کنید. علاوه بر شناسه‌های دستگاه، پارامترهای دیگری مانند 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 باید در نام بستر آزمایش وجود داشته باشد. در طول مقداردهی اولیه، اجراکننده تست 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 را در خط فرمان با استفاده از دستورات مشابه اندروید 11 یا پایین‌تر لغو کنید.

به عنوان مثال:

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 باشد. بستر آزمایش صحیح توسط صحنه های آزمایش شده تعیین می شود. اندروید 12 از کنترلرهای Arduino و Canakit برای ترکیب سنسورها پشتیبانی می کند.

در زیر یک نمونه فایل 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

تست دستی

آزمایش دستی همچنان در Android 12 پشتیبانی می‌شود. با این حال، بستر آزمایشی باید آزمایش را با کلمه کلیدی 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

صحنه های تست بدون تبلت

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

تست های فردی را اجرا کنید

آزمایش‌های انفرادی را می‌توان فقط برای اهداف اشکال‌زدایی اجرا کرد زیرا نتایج آنها به تأییدکننده CTS گزارش نمی‌شود. از آنجایی که فایل‌های 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

مصنوعات را آزمایش کنید

در اندروید 12، مصنوعات آزمایشی Camera ITS مشابه اندروید 11 یا پایین‌تر اما با تغییرات زیر ذخیره می‌شوند:

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

تغییرات تست

در اندروید 12 صحنه های تبلت به جای فایل های PDF، فایل های PNG هستند. استفاده از فایل های PNG مدل های تبلت بیشتری را قادر می سازد تا صحنه ها را به درستی نمایش دهند.

scene0/test_jitter.py

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

scene1_1/test_black_white.py

برای Android 12، test_black_white دارای عملکرد test_black_white و test_channel_saturation است.

در جدول زیر دو تست مجزا در اندروید 11 توضیح داده شده است.

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

جدول زیر آزمایش ادغام شده، scene1_1/test_black_white.py را در اندروید 12 توضیح می دهد.

نام آزمون سطح اول 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 روی دوربین‌های مخفی فیزیکی اندروید 12 اجرا می‌شود.

scene1_2/test_tonemap_sequence.py

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

scene1_2/test_yuv_plus_raw.py

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

scene2_a/test_format_combos.py

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

scene3/test_flip_mirror.py

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

scene4/test_aspect_ratio_and_crop.py

یافتن حلقه‌ها در scene4/test_aspect_ratio_and_crop.py در Android 12 بازسازی شد.

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

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

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

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

روش Android 12 ساده‌تر است و برای حل مشکل برش جعبه محدود در برخی از تبلت‌های نمایشگر کار می‌کند. همه نامزدهای حلقه برای اهداف اشکال زدایی ثبت شده اند.

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

جدول زیر ادعاهایی را برای test_aspect_ratio_and_crop.py فهرست می‌کند که با سطح دستگاه معین و اولین سطح API مطابقت دارد.

سطح دستگاه سطح اول API ادعاها
محدود همه نسبت ابعاد
FoV برای فرمت های 4:3، 16:9، 2:1
کامل < 31 نسبت ابعاد
FoV برای فرمت های 4:3، 16:9، 2:1
کامل ≥ 31 برش
نسبت ابعاد
FoV برای فرمت های 4:3، 16:9، 2:1
LEVEL3 همه برش
نسبت ابعاد
FoV برای فرمت های 4:3، 16:9، 2:1

scene4/test_multi_camera_alignment.py

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

کد اندروید 11 پایتون 2

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

کد اندروید 12 پایتون 3

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

در اندروید 12، روشی برای تشخیص ویژگی ها در تصاویر برای تست ترکیب سنسور اضافه شده است.

در نسخه‌های پایین‌تر از اندروید 12، از کل تصویر برای یافتن بهترین 240 ویژگی استفاده می‌شود که سپس 20 درصد در مرکز ماسک می‌شوند تا از جلوه‌های شاتر غلتکی با حداقل ویژگی مورد نیاز 30 ویژگی جلوگیری شود.

اگر ویژگی‌هایی که با این روش یافت می‌شوند ناکافی باشند، Android 12 ابتدا ناحیه تشخیص ویژگی را به مرکز 20% می‌پوشاند و حداکثر ویژگی‌ها را به دو برابر حداقل ویژگی مورد نیاز محدود می‌کند.

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

تفاوت در تشخیص ویژگی بین اندروید 11 و اندروید 12 تشخیص ویژگی sensor_fusion

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

تست های جدید

scene0/test_solid_color_test_pattern.py

تست جدید test_solid_color_test_pattern برای اندروید 12 فعال شده است. این تست برای همه دوربین ها فعال است و در جدول زیر توضیح داده شده است.

صحنه نام آزمون سطح اول API توضیحات
0 test_solid_color_test_pattern 31 خروجی تصویر تک رنگ و قابلیت برنامه ریزی رنگ تصویر را تایید می کند.

الگوهای تست رنگ ثابت برای پشتیبانی از حالت حریم خصوصی دوربین باید فعال باشند. تست 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 کاملاً اشباع شده تنظیم می‌شوند. از آنجایی که تعریف الگوی تست بر اساس الگوی حسگر Bayer است، کانال های رنگ باید برای هر رنگ مطابق جدول زیر تنظیم شوند.

رنگ testPatternData (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 بایر سیاه، سفید، قرمز، سبز، آبی
31 مونونوکلئوز سیاه، سفید
< 31 بایر/مونو سیاه

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

scene2_c/test_camera_launch_perf_class.py

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

scene2_c/test_jpeg_capture_perf_class.py

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