مجموعه تست تصویر دوربین (ITS) چارچوبی برای اجرای آزمایش بر روی تصاویر تولید شده توسط دوربین اندرویدی است. هدف کلی هر آزمایش در ITS این است که دوربین را به روشی خاص پیکربندی کند، یک یا چند عکس بگیرد و عکسها را بررسی کند تا ببیند آیا حاوی دادههای تصویر مورد انتظار هستند یا خیر. بسیاری از آزمایشها مستلزم این هستند که دوربین روی نمودار هدف مشخصی قرار بگیرد یا با شدت خاصی روشن شود.
ITS در مهار تست تأییدکننده CTS در 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.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
راه اندازی هاست
ITS نیاز دارد که دستگاه میزبان از طریق USB به DUT متصل شود، بتواند از ADB برای کنترل و ارتباط دستگاه استفاده کند و نرم افزار مورد نیاز را نصب کند.
برای راه اندازی دستگاه میزبان خود، مطمئن شوید که نرم افزار زیر نصب شده است.
Android SDK Platform Tools
ابزارهای Android SDK Platform باید نصب شده باشند و ADB باید در مسیر اجرایی پوسته یا ترمینال که در دستگاه میزبان در حال اجرا است قرار داشته باشد. برای نسخه منتشر شده عمومی ابزارهای Android SDK Platform، به یادداشتهای انتشار SDK Platform Tools مراجعه کنید.
پایتون
پایتون باید روی ماشین میزبان نصب شود. توصیه می کنیم برای اطمینان از پشتیبانی از نسخه های سازگار از یک توزیع Python همراه استفاده کنید. برای جزئیات بیشتر در مورد اینکه کدام نسخه پایتون و بسته را برای یک نسخه خاص نصب کنید، به یادداشتهای انتشار Camera ITS برای نسخه مربوطه مراجعه کنید.
موبلی
برای اندروید 12 و بالاتر، چارچوب تست Mobly باید نصب شده باشد. Mobly به شما امکان می دهد یک تبلت DUT و نمودار را در کلاس its_base_test
راه اندازی کنید. برای نصب چارچوب تست Mobly، اجرا کنید:
pip install mobly
راه اندازی محیط
برای تنظیم محیط تست، اجرا کنید:
cd CameraITS
source build/envsetup.sh
این دستور نصب پایتون را بررسی میکند، متغیر محیطی PYTHONPATH
را تنظیم میکند و تستهای واحد را روی ماژولهای utils/*.py
اجرا میکند. اگر هیچ خطایی در ترمینال چاپ نشد، محیط برای اجرای تست های ITS آماده است.
تنظیم صحنه
برای تنظیم صحنهها، توصیه میکنیم از راهاندازی Camera ITS-in-a-box برای سهولت در اتوماسیون، قابلیت اطمینان و کارایی در آزمایش استفاده کنید. دستگاه های آزمایشی ITS-in-a-box تمام نیازهای نورپردازی، مرکزیت و تغییر نمودار را برای ITS پشتیبانی می کنند. همچنین، ITS-in-a-box برای آزمایش پسوند دوربین مورد نیاز است.
برای تست دستی، از موارد زیر اطمینان حاصل کنید:
- DUT روی سه پایه است
- DUT برای هر تست روی صحنه صحیح نشان داده می شود. (اسکریپت تست ITS دستورهایی برای تغییر تنظیمات صحنه قبل از شروع آزمایش در صحنه جدید ارائه می دهد.)
- DUT از طریق USB به دستگاه میزبان متصل می شود.
- DUT در طول اجرای آزمایشی حرکت نمی کند.
- صحنه با یک منبع نور ثابت و بدون نوسان روشن می شود. (از چراغ فلورسنت استفاده نکنید زیرا باعث سوسو زدن می شود.)
اسکریپت تست ITS یک اعلان نمایش می دهد که از کاربر می خواهد تنظیمات صحنه را قبل از شروع آزمایش در صحنه جدید تغییر دهد.
جهت گوشی باید طوری تنظیم شود که دوربین بدون چرخش عکس بگیرد. ساده ترین راه برای بررسی این موضوع با صحنه های صورت در صحنه 2 است. اکثر تلفنها گوشی را در جهت افقی قرار میدهند و گوشی برای دوربین عقب در خلاف جهت عقربههای ساعت و برای دوربین جلو در جهت عقربههای ساعت میچرخد.
فایل های پیکربندی
با استفاده از چارچوب Mobly، باید یک فایل پیکربندی config.yml
برای تعریف بستر آزمایشی Mobly ایجاد کنید. در زیر نمونه هایی برای موارد استفاده مختلف آورده شده است.
فایل config.yml صحنه های مبتنی بر تبلت
نمونه زیر فایل config.yml
برای صحنه های مبتنی بر تبلت است. برای آزمایش مبتنی بر تبلت، کلمه کلیدی TABLET
باید در نام بستر آزمایش باشد. در طول مقداردهی اولیه، اجراکننده تست 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.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
فایل config.yml صحنه sensor_fusion
در زیر یک نمونه فایل config_yml
برای تست های sensor_fusion
آورده شده است. برای تست sensor_fusion
، کلمه کلیدی SENSOR_FUSION
باید در نام بستر آزمایش باشد. اندروید 13 و بالاتر به دلیل پیش نمایش و تست تثبیت ویدئو، تنها از کنترلر آردوینو برای ترکیب سنسور پشتیبانی می کند. اندروید 12 از کنترلرهای Arduino و 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_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
فایل config.yml چندین testbeds
در زیر یک نمونه فایل 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
برای آزمایش دستی آورده شده است. از اندروید 14، تست دستی برای همه تست ها به جز تست های scene_extensions
پشتیبانی می شود. برای تست دستی، کلمه کلیدی MANUAL
باید در نام بستر تست باشد. همچنین، بخش AndroidDevice
نمیتواند شامل قسمت سریال یا برچسب برای رایانه لوحی باشد.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
اجرای تست های 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)
هر اجرا از اسکریپت یک گزارش را چاپ می کند که
PASS
،FAIL
،FAIL*
یاSKIP
را برای هر آزمون ITS نشان می دهد.FAIL*
نشان میدهد که تست شکست خورده است، اما از آنجایی که آزمایش هنوز اجباری نشده است، آزمایش بهعنوان یکPASS
به CtsVerifier گزارش میشود.SKIP
نشان میدهد که آزمایش با موفقیت انجام شده است زیرا دستگاه قابلیت زیربنایی در حال آزمایش را تبلیغ نکرده است. به عنوان مثال، اگر دستگاهی از طریق رابطهای دوربین تبلیغ نمیکند که از DNG پشتیبانی میکند، آزمایشهای مربوط به ضبط فایل DNG نادیده گرفته میشوند و بهعنوانPASS
محاسبه میشوند.برای تأیید اینکه آزمونها شرایط آزمون را برآورده کردهاند، روی دکمه سبز علامت علامت بزنید. سپس ورودی Camera ITS Test در منوی تست های CTS Verifier سبز می شود و به این معنی است که گوشی Camera ITS را گذرانده است.
تست DUT موازی
دستگاههایی که اندروید 14 یا بالاتر دارند، از تست DUT موازی پشتیبانی میکنند. این به شما امکان می دهد DUT ها را به صورت موازی با چندین ریگ آزمایش کنید تا آزمایش کلی را سرعت بخشید. به عنوان مثال، آزمایش موازی به شما امکان می دهد دوربین 0 را در یک دکل و دوربین 1 را در یک دکل دیگر آزمایش کنید. تمام آزمایشات برای جلسات تست موازی در جلسه تأیید کننده CTS در 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
مدل نویز را با تأیید صحت مقادیر نویز برای نوردهی و بهره ارائه شده در داده های دوربین تأیید می کند.