مجموعه تست تصویر دوربین (ITS) چارچوبی برای اجرای تستها روی تصاویر تولید شده توسط دوربین اندروید است. هدف کلی هر تست در ITS پیکربندی دوربین به روشی خاص، گرفتن یک یا چند عکس و بررسی عکسها برای بررسی وجود دادههای تصویری مورد انتظار است. بسیاری از تستها نیاز دارند که دوربین به سمت یک نمودار هدف خاص نشانه گرفته شود یا با شدت خاصی روشن شود.
ITS در بخش تست CTS Verifier در مسیر cts/apps/CameraITS قرار دارد. دستگاهها باید تستهای ITS مربوط به ویژگیهای پشتیبانیشده توسط چارچوب دوربین برای برنامههای شخص ثالث به عنوان زیرمجموعهای از CTS را با موفقیت پشت سر بگذارند.
راهاندازی
برای اجرای تستهای ITS، موارد زیر باید تنظیم شوند:
- دستگاه تحت آزمایش (DUT)
- یک دستگاه میزبان (مثلاً یک کامپیوتر رومیزی یا لپتاپ لینوکس)
- صحنهای که دوربین از آن عکس میگیرد
تنظیمات دستگاه تحت آزمایش (DUT)
برای تنظیم DUT، مراحل زیر را دنبال کنید:
- DUT را از طریق USB به یک دستگاه میزبان وصل کنید.
- مجوزهای لازم برای دسترسی میزبان به DUT از طریق ADB را اعطا کنید.
برنامه CTS Verifier (
CtsVerifier.apk) را روی دستگاه نصب کنید. برای اطلاعات بیشتر، به بخش «استفاده از CTS Verifier» مراجعه کنید.extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zipcd android-cts-verifieradb install -r -g CtsVerifier.apkدر DUT، برنامه دوربین پیشفرض را اجرا کنید و تمام پنجرههایی که هنگام اجرا ظاهر میشوند را پاک کنید تا از تداخل در حین آزمایش جلوگیری شود.
تنظیم میزبان
ITS مستلزم آن است که دستگاه میزبان از طریق USB به DUT متصل باشد، بتواند از ADB برای کنترل و ارتباط دستگاه استفاده کند و نرمافزار مورد نیاز را نصب کرده باشد.
برای راهاندازی دستگاه میزبان خود، مطمئن شوید که نرمافزار زیر نصب شده است.
ابزارهای پلتفرم SDK اندروید
ابزارهای پلتفرم SDK اندروید باید نصب شده باشند و ADB باید در مسیر اجرایی پوسته یا ترمینالی که روی دستگاه میزبان در حال اجرا است، قرار داشته باشد. برای نسخه عمومی منتشر شده از ابزارهای پلتفرم SDK اندروید، به یادداشتهای انتشار ابزارهای پلتفرم SDK مراجعه کنید.
پایتون
پایتون باید روی دستگاه میزبان نصب شود. برای اطمینان از پشتیبانی از نسخههای سازگار، توصیه میکنیم از یک توزیع پایتون همراه استفاده کنید. برای جزئیات بیشتر در مورد اینکه کدام نسخههای پایتون و بسته را برای یک نسخه خاص نصب کنید، به یادداشتهای انتشار Camera ITS برای نسخه مربوطه مراجعه کنید.
موبلی
برای اندروید ۱۲ و بالاتر، چارچوب تست Mobly را نصب کنید. Mobly به شما امکان میدهد یک DUT و تبلت نمودار را در کلاس its_base_test تنظیم کنید. برای نصب چارچوب تست Mobly، دستور زیر را اجرا کنید:
pip install moblyتنظیمات محیط
برای تنظیم محیط آزمایش، دستور زیر را اجرا کنید:
cd CameraITSsource build/envsetup.sh
این دستور نصب پایتون را بررسی میکند، متغیر محیطی PYTHONPATH را تنظیم میکند و تستهای واحد را روی ماژولهای utils/*.py اجرا میکند. اگر هیچ خطایی در ترمینال چاپ نشود، محیط برای اجرای تستهای ITS آماده است.
چیدمان صحنه
برای تنظیم صحنهها، توصیه میکنیم از تنظیمات دوربین ITS-in-a-box برای سهولت در اتوماسیون، قابلیت اطمینان و کارایی در آزمایش استفاده کنید. تجهیزات تست ITS-in-a-box از تمام الزامات روشنایی، مرکزبندی و تغییر نمودار برای ITS پشتیبانی میکنند. همچنین، ITS-in-a-box برای آزمایش افزونههای دوربین مورد نیاز است.
برای تست دستی، موارد زیر را بررسی کنید:
- دستگاه تست نفوذ (DUT) روی سه پایه قرار دارد
- DUT برای هر آزمایش به صحنه صحیح اشاره میکند. (اسکریپت آزمایش ITS قبل از شروع آزمایشها در یک صحنه جدید، دستورالعملهایی را برای تغییر تنظیمات صحنه ارائه میدهد.)
- DUT از طریق USB به دستگاه میزبان متصل میشود.
- دستگاه تست (DUT) در طول اجرای آزمایش حرکت نمیکند.
- صحنه با یک منبع نور ثابت و بدون نوسان روشن میشود. (از نور فلورسنت استفاده نکنید زیرا باعث سوسو زدن میشود.)
اسکریپت تست ITS پیامی را نمایش میدهد که از کاربر میخواهد قبل از شروع تستها در یک صحنه جدید، تنظیمات صحنه را تغییر دهد.
جهت گوشی باید طوری تنظیم شود که دوربین بدون چرخش عکس بگیرد. سادهترین راه برای بررسی این موضوع، استفاده از صحنههای چهره در scene2 است. اکثر گوشیها گوشی را در جهت افقی قرار میدهند، به این صورت که برای دوربین عقب، گوشی در خلاف جهت عقربههای ساعت و برای دوربین جلو، در جهت عقربههای ساعت میچرخد.
فایلهای پیکربندی
با استفاده از چارچوب Mobly، باید یک فایل پیکربندی config.yml برای تعریف بستر آزمایشی Mobly ایجاد کنید. در ادامه مثالهایی برای موارد استفاده مختلف ارائه شده است.
فایل config.yml صحنههای مبتنی بر تبلت
در ادامه یک نمونه فایل config.yml برای صحنههای مبتنی بر تبلت آمده است. برای تست مبتنی بر تبلت، کلمه کلیدی TABLET باید در نام testbed باشد. در طول مقداردهی اولیه، اجراکننده تست Mobly پارامترهای موجود در فایل را مقداردهی اولیه کرده و آنها را به تستهای منفرد ارسال میکند.
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" # "True" or "False"; quotes needed
lighting_cntl: <controller-type> # "arduino" or "None"; quotes needed
lighting_ch: <controller-channel>
camera: 0
foldable_device: "False". # set "True" if testing foldable
scene: <scene-name> # if <scene-name> runs all scenes
برای فراخوانی بستر تست، tools/run_all_tests.py را اجرا کنید. اگر هیچ مقدار خط فرمانی برای مشخص کردن دوربینها یا صحنهها وجود نداشته باشد، تست با مقادیر فایل config.yml اجرا میشود. اگر مقادیر خط فرمانی برای دوربینها یا صحنهها وجود داشته باشد، این مقادیر، مقادیر موجود در بخش TestParams از فایل config.yml را نادیده میگیرند. برای مثال:
python tools/run_all_tests.pypython tools/run_all_tests.py camera=1python tools/run_all_tests.py scenes=2,1,0python tools/run_all_tests.py camera=0 scenes=scene_telepython tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele
فایل پیکربندی صحنه sensor_fusion.yml
در ادامه یک نمونه فایل config_yml برای تستهای sensor_fusion آمده است. برای تست sensor_fusion ، کلمه کلیدی SENSOR_FUSION باید در نام testbed باشد. اندروید ۱۳ و بالاتر به دلیل پیشنمایش و تست تثبیت ویدیو، فقط از کنترلر آردوینو برای sensor fusion پشتیبانی میکند. اندروید ۱۲ از کنترلرهای آردوینو و Canakit پشتیبانی میکند.
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
rotator_ch: 1
camera: 0
برای اجرای تستهای sensor_fusion با جعبه فیوژن سنسور ، دستور زیر را اجرا کنید:
python tools/run_all_tests.py scenes=sensor_fusionpython tools/run_all_tests.py scenes=sensor_fusion camera=0python tools/run_all_tests.py scenes=scene_flash,feature_combinationpython tools/run_all_tests.py scenes=checkerboard camera=1
فایل config.yml مربوط به چندین بستر آزمایشی
در ادامه یک نمونه فایل config.yml با چندین بستر آزمایشی، یک بستر آزمایشی تبلت و یک بستر آزمایشی sensor_fusion آمده است. بستر آزمایشی صحیح توسط صحنههای آزمایش شده تعیین میشود.
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
تست دستی فایل config.yml
در ادامه یک نمونه فایل config.yml برای تست دستی آمده است. اندروید ۱۴ و بالاتر از تست دستی برای همه تستها به جز تستهای scene_extensions پشتیبانی میکند. برای تست دستی، کلمه کلیدی MANUAL باید در نام testbed باشد. همچنین، بخش AndroidDevice نمیتواند شامل بخش سریال یا برچسب برای تبلت باشد.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
فایل config.yml تست دکل Gen2
در ادامه یک نمونه فایل config.yml از یک بستر آزمایشی TEST_BED_GEN2 آمده است. این بستر آزمایشی برای آزمایشهای scene_ip استفاده میشود که از یک Gen2 rig](/docs/compatibility/cts/camera-its-box-gen2) استفاده میکند. مثال زیر پارامترهای بستر آزمایشی را در زمانی که Gen2 rig در دسترس است و آزمایشهای scene_ip نادیده گرفته نمیشوند، نشان میدهد.
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: gen2_rotator # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: 0
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: gen2_lights # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: 1
scene: scene_ip
مثال زیر پارامترهای بستر آزمایش را در زمانی که دستگاه Gen2 در دسترس نیست و تستهای scene_ip نادیده گرفته میشوند، نشان میدهد.
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: <controller-channel>
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: <controller-channel>
scene: scene_ip
برای اجرای تست scene_ip، از یکی از دستورات زیر استفاده کنید:
python tests/scene_ip/test_default_jca_ip.py -c config.ymlpython tools/run_all_tests.py camera=<camera-id> scenes=scene_ip
اجرای تستهای ITS
این بخش نحوه اجرای تستهای ITS را شرح میدهد.
فراخوانی تستها
پس از راهاندازی دستگاه، ماشین میزبان (شامل محیط) و صحنه فیزیکی، تستهای ITS را با استفاده از فرآیند زیر اجرا کنید.
برنامه CTS Verifer را باز کنید. در منوی تستها، Camera ITS Test را انتخاب کنید.
از دستگاه میزبان، تستهای ITS را از دایرکتوری
CameraITS/اجرا کنید. به عنوان مثال، برای دستگاهی با دوربینهای جلو و عقب، دستور زیر را اجرا کنید:python tools/run_all_tests.pyاین اسکریپت بر اساس فایل
config.ymlدوربینها و صحنههای آزمایشی را بررسی میکند. برای اشکالزدایی تنظیمات، توصیه میکنیم برای سرعت بیشتر، یکی از صحنههایscene2را با یک تست واحد اجرا کنید.برای تست دستی، قبل از شروع اجرای مجموعه تستهای ITS روی هر صحنه، اسکریپت از صحنه فعلی عکس میگیرد، آن را به صورت JPEG ذخیره میکند، مسیر JPEG را در کنسول چاپ میکند و از کاربر میخواهد که تأیید کند که آیا تصویر سالم است یا خیر. این چرخه ضبط و تأیید تا زمانی که کاربر تأیید کند که تصویر سالم است، ادامه مییابد. پیامهای این چرخه در ادامه آمده است.
Preparing to run ITS on camera 0 Start running ITS on camera: 0 Press Enter after placing camera 0 to frame the test scene: scene1_1 The scene setup should be: A grey card covering at least the middle 30% of the scene Running vendor 3A on device Capture an image to check the test scene Capturing 1 frame with 1 format [yuv] Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg Is the image okay for ITS scene1_1? (Y/N)هر بار اجرای اسکریپت، یک گزارش (log) چاپ میکند که برای هر تست ITS، گزینههای
PASS،FAIL،FAIL*یاSKIPرا نشان میدهد.FAIL*نشان میدهد که تست ناموفق بوده است، اما از آنجایی که تست هنوز اجباری نشده است، تست به عنوانPASSبه CtsVerifier گزارش میشود.SKIPنشان میدهد که تست با موفقیت انجام شده است، زیرا دستگاه قابلیت اصلی مورد آزمایش را اعلام نکرده است. به عنوان مثال، اگر دستگاهی از طریق رابطهای دوربین اعلام نکند که از DNG پشتیبانی میکند، تستهای مربوط به ضبط فایل DNG رد شده و به عنوانPASSشمارش میشوند.برای تأیید اینکه آزمایشها الزامات آزمایش را برآورده کردهاند، روی دکمه علامت سبز ضربه بزنید. سپس ورودی Camera ITS Test در منوی آزمایشهای CTS Verifier سبز میشود و نشان میدهد که تلفن از Camera ITS عبور کرده است.
آزمایش موازی DUT
دستگاههایی که اندروید ۱۴ یا بالاتر دارند، از تست DUT موازی پشتیبانی میکنند. این به شما امکان میدهد DUTها را به صورت موازی با چندین دستگاه تست کنید تا سرعت تست کلی افزایش یابد. به عنوان مثال، تست موازی به شما امکان میدهد دوربین ۰ را در یک دستگاه و دوربین ۱ را در دستگاه دیگر به طور همزمان تست کنید. تمام تستهای مربوط به جلسات تست موازی در جلسه CTS Verifier روی DUT مرجع تجمیع میشوند. شما باید تست موازی را با کنترل روشنایی آردوینو انجام دهید، زیرا کنترل روشنایی دستی با تست موازی پشتیبانی نمیشود. مطمئن شوید که یک کانال متفاوت در همان کنترلر آردوینو، روشنایی هر دستگاه را کنترل میکند.
در ادامه یک نمونه فایل config.yml آمده است که سه بستر آزمایشی را برای اجرای موازی تعریف میکند.
TestBeds:
- Name: TEST_BED_TABLET_SCENES_INDEX_0
Controllers:
AndroidDevice:
- serial: <device-id-0>
label: dut
- serial: <tablet-id-0>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-0>
camera: 0
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
- Name: TEST_BED_TABLET_SCENES_INDEX_1
Controllers:
AndroidDevice:
- serial: <device-id-1>
label: dut
- serial: <tablet-id-1>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-1>
camera: 1
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
# TEST_BED_SENSOR_FUSION represents testbed index 2
# Parallel sensor_fusion is currently unsupported due to Arduino requirements
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion
Controllers:
AndroidDevice:
- serial: <device-id>
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: "arduino"
rotator_ch: <controller-channel-2>
camera: <camera-id>
foldable_device: "False"
tablet_device: "False"
lighting_cntl: "None"
lighting_ch: <controller-channel>
scene: "sensor_fusion"
برای اجرای موازی تستبدها، از دستور زیر استفاده کنید:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; waitمدل نویز DNG
دستگاههایی که توانایی ضبط RAW یا DNG را تبلیغ میکنند، باید یک مدل نویز در فراداده نتیجه ضبط هر عکس خام ارائه دهند. این مدل نویز باید برای هر دوربین (به عنوان مثال، دوربینهای جلو و عقب) روی دستگاهی که ادعای پشتیبانی دارد، در HAL دوربین تعبیه شود.
پیادهسازی مدل نویز
برای پیادهسازی یک مدل نویز، این مراحل را دنبال کنید تا یک مدل نویز تولید کنید و مدل را در HAL دوربین جاسازی کنید.
برای تولید مدل نویز برای هر دوربین، اسکریپت
dng_noise_model.pyرا در دایرکتوریtoolsاجرا کنید. این یک قطعه کد C را خروجی میدهد. برای اطلاعات بیشتر در مورد نحوه تنظیم دوربین و محیط ضبط، به سندDngNoiseModel.pdfدر دایرکتوریtoolsمراجعه کنید.برای پیادهسازی مدل نویز برای دستگاه، قطعه کد C را کپی کرده و در HAL دوربین قرار دهید.
اعتبارسنجی مدل نویز
تست خودکار ITS در tests/scene1_1/test_dng_noise_model.py با تأیید صحت مقادیر نویز برای نوردهی و بهره شات ارائه شده در دادههای دوربین، مدل نویز را اعتبارسنجی میکند.