تعدادی از تغییرات Camera ITS در نسخه اندروید 12 گنجانده شده است. این صفحه تغییراتی را که در چهار دسته کلی قرار می گیرند خلاصه می کند:
Refactor به پایتون 3
به دلیل منسوخ شدن Python 2.7 در ژانویه 2020، کل پایگاه کد Camera ITS به Python 3 بازسازی شد. نسخهها و کتابخانههای Python زیر در Android 12 مورد نیاز است:
- پایتون 3.7.9 یا پایتون 3.7.10
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- pySerial 3.5
- Pillow 8.1.0
- PyYAML 5.3.1
راهانداز آزمایشی اصلی، tools/run_all_tests.py
، مانند نسخههای اندروید 11 یا پایینتر باقی میماند و به پایتون 3 تغییر مییابد.
همه تستهای فردی دوباره ساخته میشوند و از کلاس تنظیم تست جدید تعریف شده در tests/its_base_test.py
استفاده میکنند. اکثر نام های تست و عملکرد یکسان باقی می مانند. در اندروید 12 همه آزمایشهای فردی اکنون صحنههای خود را بارگذاری میکنند. در حالی که بارگذاری صحنه برای هر تست زمان کلی تست را افزایش می دهد، اشکال زدایی تست های فردی را امکان پذیر می کند.
برای اطلاعات بیشتر در مورد تغییرات آزمون فردی، تغییرات تست را ببینید.
ماژولهای پایتون زیر با تغییر نام بازسازی میشوند:
-
pymodules/its/caps.py
→utils/camera_properties_utils.py
-
pymodules/its/cv2image.py
→utils/opencv_processing_utils.py
-
pymodules/its/device.py
→utils/its_session_utils.py
-
pymodules/its/error.py
→utils/error_util.py
-
pymodules/its/image.py
→utils/image_processing_utils.py
-
pymodules/its/objects.py
→utils/capture_request_utils.py
-
pymodules/its/target.py
→utils/target_exposure_utils.py
-
tools/hw.py
→utils/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 را نشان می دهد. افزایش آستانه حداقل ویژگی مورد نیاز منجر به تشخیص ویژگی های با کیفیت ضعیف می شود و بر اندازه گیری ها تأثیر منفی می گذارد.
شکل 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 ثانیه است.