نمای کلی دوربین ITS، نمای کلی دوربین ITS

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

ITS در بخش تست CTS Verifier در مسیر cts/apps/CameraITS قرار دارد. دستگاه‌ها باید تست‌های ITS مربوط به ویژگی‌های پشتیبانی‌شده توسط چارچوب دوربین برای برنامه‌های شخص ثالث به عنوان زیرمجموعه‌ای از CTS را با موفقیت پشت سر بگذارند.

راه‌اندازی

برای اجرای تست‌های ITS، موارد زیر باید تنظیم شوند:

  • دستگاه تحت آزمایش (DUT)
  • یک دستگاه میزبان (مثلاً یک کامپیوتر رومیزی یا لپ‌تاپ لینوکس)
  • صحنه‌ای که دوربین از آن عکس می‌گیرد

تنظیمات دستگاه تحت آزمایش (DUT)

برای تنظیم DUT، مراحل زیر را دنبال کنید:

  1. DUT را از طریق USB به یک دستگاه میزبان وصل کنید.
  2. مجوزهای لازم برای دسترسی میزبان به DUT از طریق ADB را اعطا کنید.
  3. برنامه 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
  4. در DUT، برنامه دوربین پیش‌فرض را اجرا کنید و تمام پنجره‌هایی که هنگام اجرا ظاهر می‌شوند را پاک کنید تا از تداخل در حین آزمایش جلوگیری شود.

تنظیم میزبان

ITS مستلزم آن است که دستگاه میزبان از طریق USB به DUT متصل باشد، بتواند از ADB برای کنترل و ارتباط دستگاه استفاده کند و نرم‌افزار مورد نیاز را نصب کرده باشد.

برای راه‌اندازی دستگاه میزبان خود، مطمئن شوید که نرم‌افزار زیر نصب شده است.

ابزارهای پلتفرم SDK اندروید

ابزارهای پلتفرم SDK اندروید باید نصب شده باشند و ADB باید در مسیر اجرایی پوسته یا ترمینالی که روی دستگاه میزبان در حال اجرا است، قرار داشته باشد. برای نسخه عمومی منتشر شده از ابزارهای پلتفرم SDK اندروید، به یادداشت‌های انتشار ابزارهای پلتفرم SDK مراجعه کنید.

پایتون

پایتون باید روی دستگاه میزبان نصب شود. برای اطمینان از پشتیبانی از نسخه‌های سازگار، توصیه می‌کنیم از یک توزیع پایتون همراه استفاده کنید. برای جزئیات بیشتر در مورد اینکه کدام نسخه‌های پایتون و بسته را برای یک نسخه خاص نصب کنید، به یادداشت‌های انتشار Camera ITS برای نسخه مربوطه مراجعه کنید.

موبلی

برای اندروید ۱۲ و بالاتر، چارچوب تست Mobly را نصب کنید. Mobly به شما امکان می‌دهد یک DUT و تبلت نمودار را در کلاس its_base_test تنظیم کنید. برای نصب چارچوب تست Mobly، دستور زیر را اجرا کنید:

pip install mobly

تنظیمات محیط

برای تنظیم محیط آزمایش، دستور زیر را اجرا کنید:

cd CameraITS
source 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.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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

پارامتر مقیاس‌بندی نمودار

در اندروید ۱۷ و بالاتر، پارامتر chart_scaling در config.yml برای TEST_BED_TABLET_SCENES گنجانده شده است. این پارامتر مشکلات مقیاس‌بندی نمودار را برای دستگاه‌های دوربین تله‌فوتو با میدان دید (FoV) وسیع‌تر برطرف می‌کند، از برش صحنه جلوگیری می‌کند و فوکوس مناسب دستگاه را در حین آزمایش اعمال می‌کند.

مقادیر پشتیبانی‌شده برای chart_scaling عبارتند از 1 ، 0.33 ، 0.5 یا 0.67 ، و None به عنوان پیش‌فرض. این رویکرد به دستگاه‌ها اجازه می‌دهد از یک ضریب مقیاس‌بندی بهینه متناسب با نیازهای خاص خود استفاده کنند و تست عملکردی را در تمام دستگاه‌ها حفظ کنند.

اگر chart_scaling روی None تنظیم شده باشد، تست‌ها به طور خودکار ضریب مقیاس‌بندی را با استفاده از chart_scaling_logic تعیین می‌کنند. در غیر این صورت، از مقدار مشخص شده در config.yml استفاده می‌شود، یا اگر مقیاس‌بندی در دسترس نباشد، خطایی علامت‌گذاری می‌شود.

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

TestBeds:
  -   Name: TEST_BED_TABLET_SCENES  # Need 'tablet' in name for tablet scenes
    # Use TEST_BED_MANUAL for manual testing and remove below lines:
    #     - serial <tablet_id>
    #       label: tablet
    # Test configuration for scenes[0:4, 6]
    Controllers:
        AndroidDevice:
          -   serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
          -   serial: <tablet-id>  # quotes needed if serial id entirely numeric
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"  # quotes needed
      lighting_cntl: <controller-type>  # can be arduino or "None"
      lighting_ch: <controller-channel>
      camera: <camera-id>
      scene: <scene-name>  # if <scene-name> runs all scenes
      foldable_device: "False"  # "True" if testing foldable device
      chart_scaling: "None"  # use the values available for scene to be tested
      resultstore_upload: "False"  # "True" if results should be uploaded to ResultStore

برای فعال کردن قابلیت‌های مقیاس‌بندی نمودار دوربین ITS، تنظیمات سمت تست لازم است. اگر تستی که استفاده می‌کنید از این پشتیبانی نمی‌کند، یک اشکال (bug) ثبت کنید.

در ادامه یک نمونه تغییر سمت آزمایشی با پارامتر chart_scaling آمده است.

# load chart for scene
      its_session_utils.load_scene(
          cam, props, self.scene, self.tablet, self.chart_distance,
          chart_scaling=self.chart_scaling)

فایل پیکربندی صحنه 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_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python 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.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

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

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

فراخوانی تست‌ها

پس از راه‌اندازی دستگاه، ماشین میزبان (شامل محیط) و صحنه فیزیکی، تست‌های ITS را با استفاده از فرآیند زیر اجرا کنید.

  1. برنامه CTS Verifier را باز کنید. در منوی تست‌ها، Camera ITS Test را انتخاب کنید. برای اندروید ۱۷ و بالاتر، تست‌های sensor_fusion و feature_combination در یک activity اضافی به نام Camera ITS Sensor Fusion Rig Test قرار دارند.

  2. از دستگاه میزبان، تست‌های 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 شمارش می‌شوند.

  3. برای تأیید اینکه آزمایش‌ها الزامات آزمایش را برآورده کرده‌اند، روی دکمه علامت سبز ضربه بزنید. سپس ورودی Camera ITS Test در منوی آزمایش‌های CTS Verifier سبز می‌شود و نشان می‌دهد که تلفن از Camera ITS عبور کرده است.

آزمایش موازی DUT

دستگاه‌هایی که اندروید ۱۴ یا بالاتر دارند، از تست DUT موازی پشتیبانی می‌کنند. این به شما امکان می‌دهد DUTها را به صورت موازی با چندین دستگاه تست کنید تا سرعت تست کلی افزایش یابد. به عنوان مثال، تست موازی به شما امکان می‌دهد دوربین ۰ را در یک دستگاه تست و دوربین ۱ را در دستگاه تست دیگر به طور همزمان تست کنید. برای اندروید ۱۷ و بالاتر، از آنجا که تست‌های Camera ITS به دو فعالیت تقسیم می‌شوند، می‌توانید تست‌های sensor_fusion و feature_combination را روی یک 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

نتایج کلی آزمایش را ارسال کنید

در اندروید ۱۷ و بالاتر، می‌توانید نتایج تست دوربین ITS را برای تأیید ساخت ارسال کنید. CTS Verifier به شما امکان می‌دهد چندین صحنه را به طور همزمان در چندین دستگاه آزمایش کنید و نتایج تست را از چندین گزارش CTS Verifier (از آزمایش‌ها یا دستگاه‌های مختلف) در یک ارسال واحد و یکپارچه جمع کنید.

فرآیند ارسال

برای ارسال نتایج تجمیع‌شده‌ی Camera ITS برای تأیید ساخت، این مراحل را دنبال کنید:

  1. آماده‌سازی دستگاه‌ها: دو تا سه دستگاه تحت آزمایش (DUT) را که همگی اثر انگشت ساخت یکسانی دارند، جمع‌آوری کنید.
  2. نصب CTS Verifier: آخرین نسخه APK CTS Verifier را که می‌توانید از build explorer ارائه شده دریافت کنید، نصب کنید.
  3. اجرای تست‌ها به صورت موازی:

    1. DUT ها را در سکوهای جداگانه نصب کنید.
    2. صحنه‌های مختلف Camera ITS را به طور همزمان روی هر دستگاه اجرا کنید.
    3. جمع‌آوری گزارش: گزارش تأییدکننده CTS را پس از هر اجرا دریافت کنید. این شامل گزارش‌هایی می‌شود که صحنه‌ها با شکست مواجه شده‌اند. فقط صحنه‌های ناموفق را در اجراهای بعدی دوباره اجرا کنید.
  4. ارسال گزارش‌ها: چندین گزارش CTS Verifier جمع‌آوری‌شده از همه دستگاه‌ها را بارگذاری کنید.

  5. بررسی نتایج: پس از آپلود گزارش‌ها، نتایج جمع‌آوری‌شده را بررسی کنید:

    • بخش تحلیل تست ، لیست کاملی از تمام صحنه‌های اجرا شده را نشان می‌دهد.
    • صحنه‌های اجرا نشده یا ناموفق در بخش «مفقود» فهرست شده‌اند.

      نتیجه-تجمیع-تصویر-1

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

    • صحنه‌های عبور در بخش عبور تجمیعی فهرست شده‌اند.

      نتیجه-تجمیع-تصویر-۲

      شکل ۲. صحنه‌های طبقه‌بندی‌شده به عنوان گذرگاه تجمیعی

وضعیت تأیید ساخت

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

مدل نویز DNG

دستگاه‌هایی که توانایی ضبط RAW یا DNG را تبلیغ می‌کنند، باید یک مدل نویز در فراداده نتیجه ضبط هر عکس خام ارائه دهند. این مدل نویز باید برای هر دوربین (به عنوان مثال، دوربین‌های جلو و عقب) روی دستگاهی که ادعای پشتیبانی دارد، در HAL دوربین تعبیه شود.

پیاده‌سازی مدل نویز

برای پیاده‌سازی یک مدل نویز، این مراحل را دنبال کنید تا یک مدل نویز تولید کنید و مدل را در HAL دوربین جاسازی کنید.

  1. برای تولید مدل نویز برای هر دوربین، اسکریپت dng_noise_model.py را در دایرکتوری tools اجرا کنید. این یک قطعه کد C را خروجی می‌دهد. برای اطلاعات بیشتر در مورد نحوه تنظیم دوربین و محیط ضبط، به سند DngNoiseModel.pdf در دایرکتوری tools مراجعه کنید.

  2. برای پیاده‌سازی مدل نویز برای دستگاه، قطعه کد C را کپی کرده و در HAL دوربین قرار دهید.

اعتبارسنجی مدل نویز

تست خودکار ITS در tests/scene1_1/test_dng_noise_model.py با تأیید صحت مقادیر نویز برای نوردهی و بهره شات ارائه شده در داده‌های دوربین، مدل نویز را اعتبارسنجی می‌کند.

قبولی نسبی در آزمون‌ها (وضعیت آزمون PASS*)

در اندروید ۱۷ و بالاتر، یک قبولی نهایی ( PASS* ) نشان می‌دهد که یک تست با موفقیت انجام شده است، اما معیارهای عملکرد آن بسیار نزدیک به آستانه قبولی از پیش تعریف شده است. در حالی که تست از نظر فنی معیارهای قبولی را برآورده می‌کند، نزدیکی به مرز شکست، نیاز به بررسی دقیق‌تر را نشان می‌دهد.

مزایای عبور حاشیه‌ای

وضعیت PASS* مزایای متعددی را ارائه می‌دهد:

  • سیستم هشدار اولیه: تست‌هایی را که در آستانه شکست هستند شناسایی می‌کند و به تیم‌ها اجازه می‌دهد تا قبل از اینکه مشکلات منجر به شکست‌های آشکار شوند، آنها را برطرف کنند.

  • بهینه‌سازی پیشگیرانه: تیم‌ها را تشویق می‌کند تا تست‌ها و کدهایی را که در انتهای پایین محدوده قابل قبول عملکرد دارند، بهینه‌سازی کنند و پایداری کلی را بهبود بخشند.

  • کیفیت بهبود یافته: با علامت‌گذاری حوزه‌هایی که ممکن است با تغییرات جزئی کد، مستعد رگرسیون‌های آینده باشند، به حفظ استاندارد بالاتر کیفیت کمک می‌کند.

  • کاهش زمان اشکال‌زدایی: با تشخیص زودهنگام تست‌های PASS* ، زمان و تلاش لازم برای اشکال‌زدایی کامل شکست‌ها در آینده می‌تواند به طور قابل توجهی کاهش یابد.

جزئیات قبولی*

وضعیت PASS* شامل موارد زیر است:

  • تعریف آستانه‌ها: آستانه‌های مرزی مشخصی برای هر آزمایش مربوطه در Camera ITS تعریف شده‌اند.

  • تشخیص خودکار: سیستم اتوماسیون تست، تست‌ها را بر اساس آستانه‌های تعریف‌شده PASS* شناسایی و دسته‌بندی می‌کند.

  • مکانیزم هشدار: تیم‌ها برای هر تستی که به عنوان PASS* علامت‌گذاری شود، هشدارهای خودکار دریافت می‌کنند و آنها را برای بررسی تست خاص و معیارهای آن راهنمایی می‌کنند.

  • گزارش‌دهی: وضعیت‌های قبولی حاشیه‌ای به وضوح در گزارش‌های تست و داشبوردها برای مشاهده بهتر به عنوان PASS* در گزارش ItsTestSummary نشان داده می‌شوند، مشابه Fail* برای تست‌های not_yet_mandated . تست وضعیت سبز را حفظ می‌کند، زیرا همچنان در آستانه‌های تعیین شده قبول می‌شود تا از سردرگمی بیشتر جلوگیری شود. وضعیت PASS* فقط برای یک کلاس تست اعمال می‌شود، نه کل صحنه. به عنوان مثال، Scene_0 می‌تواند PASS در نظر گرفته شود، حتی اگر test_jitter و test_metadata PASS* باشند.

  • نظارت: داده‌های عملکرد از آزمایش‌هایی که روی یک دستگاه با موفقیت نسبی همراه هستند، جمع‌آوری می‌شوند. این امر امکان نظارت بر بهبودهای آینده دوربین که توسط تولیدکنندگان اصلی تجهیزات (OEM) انجام می‌شود را در صورت انتقال این آزمایش‌ها به وضعیت PASS فراهم می‌کند.

در زیر نمونه‌ای از نتایج آزمون با PASS* آمده است:

INFO:root:Reporting camera 1 ITS results to CtsVerifier
INFO:root:ITS results to CtsVerifier: {'scene0': {'result': 'PASS', 'TEST_STATUS': [{'test': 'test_jitter', 'status': 'PASS*'}, {'test': 'test_metadata', **'status': 'PASS*'**}, {'test': 'test_request_capture_match', 'status': 'PASS'}, {'test': 'test_sensor_events', 'status': 'PASS'}, {'test': 'test_solid_color_test_pattern', 'status': 'PASS'}, {'test': 'test_test_patterns', 'status': 'SKIP'}, {'test': 'test_tonemap_curve', 'status': 'SKIP'}, {'test': 'test_unified_timestamps', 'status': 'PASS'}, {'test': 'test_vibration_restriction', 'status': 'PASS'}], 'mpc_metrics': [], 'performance_metrics': [], 'feature_query_proto': [], 'feature_query_proto_path': [], 'summary': '/tmp/CameraITS_zojk4sdr/cam_id_1/scene0/scene_test_summary.txt', 'start': 1754330630345, 'end': 1754330764534}, 'scene1_1': {'result': 'NOT_EXECUTED'}, 'scene1_2': {'result': 'NOT_EXECUTED'}, 'scene1_3': {'result': 'NOT_EXECUTED'}, 'scene2_a': {'result': 'NOT_EXECUTED'}, 'scene2_b': {'result': 'NOT_EXECUTED'}, 'scene2_c': {'result': 'NOT_EXECUTED'}, 'scene2_d': {'result': 'NOT_EXECUTED'}, 'scene2_e': {'result': 'NOT_EXECUTED'}, 'scene2_f': {'result': 'NOT_EXECUTED'}, 'scene2_g': {'result': 'NOT_EXECUTED'}, 'scene3': {'result': 'NOT_EXECUTED'}, 'scene4': {'result': 'NOT_EXECUTED'}, 'scene6': {'result': 'NOT_EXECUTED'}, 'scene7': {'result': 'NOT_EXECUTED'}, 'scene8': {'result': 'NOT_EXECUTED'}, 'scene9': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_hdr': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_low_light': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene6_tele': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene7_tele': {'result': 'NOT_EXECUTED'}, 'scene_video': {'result': 'NOT_EXECUTED'}, 'scene5': {'result': 'NOT_EXECUTED'}, 'sensor_fusion': {'result': 'NOT_EXECUTED'}, 'feature_combination': {'result': 'NOT_EXECUTED'}, 'scene_flash': {'result': 'NOT_EXECUTED'}, 'scene_ip': {'result': 'NOT_EXECUTED'}}

شرکا تشویق می‌شوند که:

  • هشدارهای PASS* را رصد کنید
  • علت اصلی آزمون‌های PASS* را بررسی کنید
  • بهینه‌سازی پیشگیرانه تست‌ها و کدهایی که به عنوان PASS* شناسایی شده‌اند

وضعیت PASS* با هدف افزایش استحکام و قابلیت اطمینان آزمایش دوربین ITS و در نتیجه تولید محصولی پایدار و با کیفیت بالا ارائه می‌شود.