ক্যামেরা আইটিএস

ক্যামেরা ইমেজ টেস্ট স্যুট (ITS) হল একটি অ্যান্ড্রয়েড ক্যামেরা দ্বারা উত্পাদিত চিত্রগুলিতে পরীক্ষা চালানোর জন্য একটি কাঠামো৷ আইটিএস-এ প্রতিটি পরীক্ষার সাধারণ লক্ষ্য হল ক্যামেরাটিকে একটি নির্দিষ্ট পদ্ধতিতে কনফিগার করা, এক বা একাধিক শট ক্যাপচার করা এবং শটগুলি পরীক্ষা করা যাতে প্রত্যাশিত চিত্র ডেটা রয়েছে কিনা তা দেখতে৷ অনেক পরীক্ষায় ক্যামেরাটিকে একটি নির্দিষ্ট টার্গেট চার্টের দিকে নির্দেশ করা বা একটি নির্দিষ্ট তীব্রতায় আলোকিত করা প্রয়োজন।

ITS cts/apps/CameraITS এ CTS ভেরিফায়ার টেস্ট হার্নেসে অবস্থিত। CTS-এর একটি উপসেট হিসাবে তৃতীয় পক্ষের অ্যাপগুলির জন্য ক্যামেরা ফ্রেমওয়ার্ক দ্বারা বিজ্ঞাপিত সমর্থিত বৈশিষ্ট্যগুলির সাথে সংশ্লিষ্ট ডিভাইসগুলিকে অবশ্যই ITS পরীক্ষাগুলি পাস করতে হবে৷

সেটআপ

আইটিএস পরীক্ষা চালানোর জন্য, নিম্নলিখিতগুলি সেট আপ করতে হবে:

  • পরীক্ষার অধীনে একটি ডিভাইস (DUT)
  • একটি হোস্ট মেশিন (উদাহরণস্বরূপ, একটি লিনাক্স ডেস্কটপ বা ল্যাপটপ)
  • ক্যামেরা ছবি তোলে এমন একটি দৃশ্য

পরীক্ষার অধীনে ডিভাইস (DUT) সেটআপ

একটি DUT সেট আপ করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. USB এর মাধ্যমে একটি হোস্ট মেশিনে DUT সংযোগ করুন।
  2. ADB এর মাধ্যমে DUT অ্যাক্সেস করার জন্য হোস্টকে অনুমতি দিন।
  3. ডিভাইসে CTS ভেরিফায়ার অ্যাপ ( CtsVerifier.apk ) ইনস্টল করুন। আরও তথ্যের জন্য, CTS যাচাইকারী ব্যবহার করা দেখুন।

    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 প্ল্যাটফর্ম টুল

অ্যান্ড্রয়েড SDK প্ল্যাটফর্ম সরঞ্জামগুলি অবশ্যই ইনস্টল করতে হবে এবং ADB অবশ্যই হোস্ট মেশিনে চলমান শেল বা টার্মিনালের এক্সিকিউটেবল পাথে থাকতে হবে৷ অ্যান্ড্রয়েড SDK প্ল্যাটফর্ম সরঞ্জামগুলির সর্বজনীন প্রকাশিত সংস্করণের জন্য, SDK প্ল্যাটফর্ম সরঞ্জাম প্রকাশের নোটগুলি দেখুন।

পাইথন

পাইথন হোস্ট মেশিনে ইনস্টল করা আবশ্যক। সামঞ্জস্যপূর্ণ সংস্করণের জন্য সমর্থন নিশ্চিত করতে আমরা একটি বান্ডিল পাইথন বিতরণ ব্যবহার করার পরামর্শ দিই। কোন নির্দিষ্ট রিলিজের জন্য পাইথন এবং প্যাকেজ সংস্করণ ইনস্টল করতে হবে তার বিশদ বিবরণের জন্য, সংশ্লিষ্ট রিলিজের জন্য ক্যামেরা আইটিএস রিলিজ নোটগুলি দেখুন।

মোবলি

Android 12 এবং উচ্চতর সংস্করণের জন্য, Mobly পরীক্ষার ফ্রেমওয়ার্ক ইনস্টল করা আবশ্যক। মোবলি আপনাকে its_base_test ক্লাসে একটি DUT এবং চার্ট ট্যাবলেট সেট আপ করতে দেয়। মোবলি টেস্ট ফ্রেমওয়ার্ক ইনস্টল করতে, চালান:

pip install mobly

পরিবেশ সেটআপ

পরীক্ষার পরিবেশ সেট আপ করতে, চালান:

cd CameraITS
source build/envsetup.sh

এই কমান্ডটি পাইথন ইনস্টলেশন পরীক্ষা করে, PYTHONPATH এনভায়রনমেন্ট ভেরিয়েবল সেট আপ করে এবং utils/*.py মডিউলগুলিতে ইউনিট পরীক্ষা চালায়। টার্মিনালে কোন ত্রুটি মুদ্রিত না হলে, পরিবেশ ITS পরীক্ষা চালানোর জন্য প্রস্তুত।

দৃশ্য সেটআপ

দৃশ্যগুলি সেট আপ করতে, আমরা অটোমেশন, নির্ভরযোগ্যতা এবং পরীক্ষায় দক্ষতার জন্য ক্যামেরা আইটিএস-ইন-এ-বক্স সেটআপ ব্যবহার করার পরামর্শ দিই। আইটিএস-ইন-এ-বক্স টেস্ট রিগগুলি আইটিএস-এর জন্য সমস্ত আলো, কেন্দ্রীকরণ এবং চার্ট পরিবর্তনের প্রয়োজনীয়তাগুলিকে সমর্থন করে। এছাড়াও, ক্যামেরা এক্সটেনশন পরীক্ষার জন্য আইটিএস-ইন-এ-বক্স প্রয়োজন।

ম্যানুয়াল পরীক্ষার জন্য, নিম্নলিখিত নিশ্চিত করুন:

  • DUT একটি ট্রাইপডে আছে
  • DUT প্রতিটি পরীক্ষার জন্য সঠিক দৃশ্যে নির্দেশিত হয়। (আইটিএস পরীক্ষার স্ক্রিপ্ট একটি নতুন দৃশ্যে পরীক্ষা শুরু করার আগে দৃশ্য সেটআপ পরিবর্তন করার জন্য প্রম্পট প্রদান করে।)
  • DUT ইউএসবি এর মাধ্যমে হোস্ট মেশিনের সাথে সংযুক্ত।
  • পরীক্ষা চলাকালীন DUT সরে না।
  • দৃশ্যটি একটি স্থির, অ ওঠানামা আলোর উত্স দিয়ে আলোকিত হয়। (একটি ফ্লুরোসেন্ট আলো ব্যবহার করবেন না কারণ এটি ফ্লিকারের পরিচয় দেয়।)

ITS পরীক্ষার স্ক্রিপ্ট একটি প্রম্পট প্রদর্শন করে যা ব্যবহারকারীকে একটি নতুন দৃশ্যে পরীক্ষা শুরু করার আগে দৃশ্য সেটআপ পরিবর্তন করতে বলে।

ফোনের অভিযোজন অবশ্যই সেট করতে হবে যাতে ক্যামেরা কোনও ঘূর্ণন ছাড়াই ছবি তোলে৷ এটি পরীক্ষা করার সবচেয়ে সহজ উপায় হল দৃশ্য 2-এ মুখের দৃশ্যগুলি। বেশিরভাগ ফোনে ফোনটি ল্যান্ডস্কেপ ওরিয়েন্টেশনে থাকে এবং ফোনটি পেছনের ক্যামেরার জন্য ঘড়ির কাঁটার বিপরীত দিকে ঘোরানো হয় এবং সামনের ক্যামেরার জন্য ঘড়ির কাঁটার দিকে ঘোরানো হয়।

কনফিগারেশন ফাইল

Mobly ফ্রেমওয়ার্ক ব্যবহার করে, আপনাকে Mobly testbed সংজ্ঞায়িত করতে একটি config.yml কনফিগারেশন ফাইল তৈরি করতে হবে। নিম্নলিখিত বিভিন্ন ব্যবহারের ক্ষেত্রে উদাহরণ.

ট্যাবলেট-ভিত্তিক দৃশ্য config.yml ফাইল

ট্যাবলেট-ভিত্তিক দৃশ্যগুলির জন্য নিম্নলিখিতটি একটি উদাহরণ config.yml ফাইল। ট্যাবলেট-ভিত্তিক পরীক্ষার জন্য, TABLET কীওয়ার্ড অবশ্যই টেস্টবেড নামের মধ্যে থাকতে হবে। ইনিশিয়ালাইজেশনের সময়, মোবলি টেস্ট রানার ফাইলের প্যারামিটারগুলি শুরু করে এবং সেগুলিকে পৃথক পরীক্ষায় পাস করে।

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 ফাইলের মান দিয়ে পরীক্ষা চালানো হয়। ক্যামেরা বা দৃশ্যের জন্য কমান্ড লাইন মান থাকলে, এগুলো config.yml ফাইলের TestParams বিভাগে মানগুলিকে ওভাররাইড করে। যেমন:

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 দৃশ্য config.yml ফাইল

নিম্নলিখিত sensor_fusion পরীক্ষার জন্য একটি উদাহরণ config_yml ফাইল। sensor_fusion পরীক্ষার জন্য, SENSOR_FUSION কীওয়ার্ডটি অবশ্যই টেস্টবেড নামের মধ্যে থাকতে হবে। প্রিভিউ এবং ভিডিও স্ট্যাবিলাইজেশন পরীক্ষার কারণে সেন্সর ফিউশনের জন্য Android 13 এবং উচ্চতর সমর্থন শুধুমাত্র Arduino কন্ট্রোলার। Android 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 ফাইল

নিম্নলিখিতটি একাধিক টেস্টবেড, একটি ট্যাবলেট টেস্টবেড এবং একটি sensor_fusion টেস্টবেড সহ 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

ম্যানুয়াল টেস্টিং config.yml ফাইল

ম্যানুয়াল পরীক্ষার জন্য নিম্নলিখিত একটি উদাহরণ config.yml ফাইল। Android 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 পরীক্ষা চালান।

  1. CTS ভেরিফার অ্যাপটি খুলুন। পরীক্ষা মেনুতে, ক্যামেরা আইটিএস পরীক্ষা নির্বাচন করুন।

  2. হোস্ট মেশিন থেকে, CameraITS/ ডিরেক্টরি থেকে ITS পরীক্ষা চালান। উদাহরণস্বরূপ, সামনে এবং পিছনের ক্যামেরা সহ একটি ডিভাইসের জন্য, নিম্নলিখিত কমান্ডটি চালান:

    python tools/run_all_tests.py

    স্ক্রিপ্টটি config.yml ফাইলের উপর ভিত্তি করে ক্যামেরা এবং পরীক্ষার দৃশ্যের মাধ্যমে পুনরাবৃত্তি করে। ডিবাগিং সেটআপগুলির জন্য, আমরা দ্রুততম পরিবর্তনের জন্য একটি একক পরীক্ষা সহ scene2 দৃশ্যগুলির একটি চালানোর সুপারিশ করি৷

    ম্যানুয়াল পরীক্ষার জন্য, প্রতিটি দৃশ্যে আইটিএস পরীক্ষার সেট চালানো শুরু করার আগে, স্ক্রিপ্টটি বর্তমান দৃশ্যের একটি ছবি নেয়, এটি একটি 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)
    

    স্ক্রিপ্টের প্রতিটি রান প্রতিটি ITS পরীক্ষার জন্য PASS , FAIL , FAIL* বা SKIP একটি লগ প্রিন্ট করে। FAIL* ইঙ্গিত করে যে পরীক্ষা ব্যর্থ হয়েছে কিন্তু যেহেতু পরীক্ষাটি এখনও বাধ্যতামূলক নয়, তাই পরীক্ষাটি CtsVerifier-এ PASS হিসাবে রিপোর্ট করবে। SKIP নির্দেশ করে যে পরীক্ষাটি পাস হয়েছে কারণ ডিভাইসটি পরীক্ষা করা অন্তর্নিহিত ক্ষমতার বিজ্ঞাপন দেয়নি। উদাহরণস্বরূপ, যদি একটি ডিভাইস ক্যামেরা ইন্টারফেসের মাধ্যমে বিজ্ঞাপন না দেয় যা এটি DNG সমর্থন করে, DNG ফাইল ক্যাপচার সম্পর্কিত পরীক্ষাগুলি এড়িয়ে যায় এবং একটি PASS হিসাবে গণনা করা হয়।

  3. পরীক্ষাগুলি পরীক্ষার প্রয়োজনীয়তাগুলি পূরণ করেছে তা স্বীকার করতে, সবুজ চেক মার্ক বোতামটি আলতো চাপুন। CTS ভেরিফায়ার টেস্ট মেনুতে ক্যামেরা আইটিএস টেস্ট এন্ট্রি তারপর সবুজ হয়ে যায় এবং বোঝায় ফোনটি ক্যামেরা আইটিএস পাস করেছে।

সমান্তরাল DUT পরীক্ষা

Android 14 বা উচ্চতর চলমান ডিভাইসগুলি সমান্তরাল DUT পরীক্ষা সমর্থন করে। এটি আপনাকে সামগ্রিক পরীক্ষার গতি বাড়ানোর জন্য একাধিক রিগগুলির সাথে সমান্তরালে DUTs পরীক্ষা করতে দেয়। উদাহরণস্বরূপ, সমান্তরাল পরীক্ষা আপনাকে একই সময়ে ক্যামেরা 0 এবং অন্য একটি রিগে ক্যামেরা 1 পরীক্ষা করতে দেয়। সমান্তরাল টেস্টিং সেশনের জন্য সমস্ত পরীক্ষা রেফারেন্স DUT-তে CTS যাচাইকারী সেশনে একত্রিত করা হয়। আপনাকে অবশ্যই Arduino আলো নিয়ন্ত্রণের সাথে সমান্তরাল পরীক্ষা চালাতে হবে, কারণ ম্যানুয়াল আলো নিয়ন্ত্রণ সমান্তরাল পরীক্ষার সাথে সমর্থিত নয়। নিশ্চিত করুন যে একই Arduino কন্ট্রোলারের একটি ভিন্ন চ্যানেল প্রতিটি রিগের জন্য আলো নিয়ন্ত্রণ করে।

নিম্নলিখিত একটি নমুনা 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-এ এম্বেড করুন৷

  1. প্রতিটি ক্যামেরার জন্য একটি শব্দ মডেল তৈরি করতে, tools ডিরেক্টরিতে dng_noise_model.py স্ক্রিপ্টটি চালান। এটি একটি সি কোড স্নিপেট আউটপুট. কীভাবে ক্যামেরা সেট আপ করবেন এবং পরিবেশ ক্যাপচার করবেন সে সম্পর্কে আরও তথ্যের জন্য, tools ডিরেক্টরিতে DngNoiseModel.pdf ডকুমেন্টটি দেখুন।

  2. ডিভাইসের জন্য নয়েজ মডেল বাস্তবায়ন করতে, ক্যামেরা HAL-এ C কোড স্নিপেট কেটে পেস্ট করুন।

নয়েজ মডেলের বৈধতা

tests/scene1_1/test_dng_noise_model.py স্বয়ংক্রিয় আইটিএস পরীক্ষাটি ক্যামেরা ডেটাতে প্রদত্ত শট এক্সপোজার এবং লাভের জন্য শব্দের মানগুলি সঠিক কিনা তা যাচাই করে নয়েজ মডেলটিকে যাচাই করে৷