ক্যামেরা আইটিএস ওভারভিউ,ক্যামেরা আইটিএস ওভারভিউ

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

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

সেটআপ

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

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

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

একটি DUT সেট আপ করতে, এই ধাপগুলো অনুসরণ করুন:

  1. ইউএসবি-র মাধ্যমে ডিইউটি-কে একটি হোস্ট মেশিনের সাথে সংযুক্ত করুন।
  2. হোস্টকে ADB-এর মাধ্যমে DUT অ্যাক্সেস করার অনুমতি দিন।
  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 ব্যবহার করতে সক্ষম হতে হবে এবং প্রয়োজনীয় সফটওয়্যার ইনস্টল করা থাকতে হবে।

আপনার হোস্ট মেশিন সেট আপ করার জন্য, নিম্নলিখিত সফ্টওয়্যারগুলি ইনস্টল করা আছে কিনা তা নিশ্চিত করুন।

অ্যান্ড্রয়েড এসডিকে প্ল্যাটফর্ম টুলস

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

পাইথন

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

মোবলি

অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণগুলোর জন্য, মব্লি টেস্ট ফ্রেমওয়ার্ক ইনস্টল করুন। মব্লি আপনাকে its_base_test ক্লাসে একটি DUT এবং চার্ট ট্যাবলেট সেট আপ করার সুযোগ দেয়। মব্লি টেস্ট ফ্রেমওয়ার্ক ইনস্টল করতে, নিম্নলিখিত কমান্ডটি চালান:

pip install mobly

পরিবেশ সেটআপ

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

cd CameraITS
source build/envsetup.sh

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

দৃশ্য সেটআপ

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

ম্যানুয়াল টেস্টিং-এর জন্য নিম্নলিখিত বিষয়গুলো নিশ্চিত করুন:

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

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

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

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

Mobly ফ্রেমওয়ার্ক ব্যবহার করে Mobly টেস্টবেড নির্ধারণ করার জন্য আপনাকে অবশ্যই একটি config.yml কনফিগারেশন ফাইল তৈরি করতে হবে। নিচে বিভিন্ন ব্যবহারের ক্ষেত্রের উদাহরণ দেওয়া হলো।

ট্যাবলেট-ভিত্তিক দৃশ্যগুলির 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 ফাইলের ভ্যালু দিয়ে চালানো হয়। যদি ক্যামেরা বা সিনের জন্য কমান্ড লাইন ভ্যালু থাকে, তাহলে সেগুলো 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

চার্ট_স্কেলিং প্যারামিটার

অ্যান্ড্রয়েড ১৭ এবং তার পরবর্তী সংস্করণগুলিতে, TEST_BED_TABLET_SCENES এর জন্য config.yml ফাইলে chart_scaling প্যারামিটারটি অন্তর্ভুক্ত করা হয়েছে। এই প্যারামিটারটি প্রশস্ত ফিল্ড অফ ভিউ (FoV) যুক্ত টেলি ক্যামেরা ডিভাইসগুলির জন্য চার্ট স্কেলিং সমস্যা সমাধান করে, দৃশ্য ক্রপ হওয়া প্রতিরোধ করে এবং পরীক্ষার সময় ডিভাইসের সঠিক ফোকাস নিশ্চিত করে।

chart_scaling এর জন্য সমর্থিত মানগুলি হলো 1 , 0.33 , 0.5 , বা 0.67 , যেখানে ডিফল্ট হলো None । এই পদ্ধতিটি ডিভাইসগুলিকে তাদের নির্দিষ্ট প্রয়োজন অনুসারে একটি সর্বোত্তম স্কেলিং ফ্যাক্টর ব্যবহার করতে দেয় এবং সমস্ত ডিভাইসে ফাংশনাল টেস্টিং বজায় রাখে।

যদি chart_scaling None সেট করা থাকে, তাহলে টেস্টগুলো chart_scaling_logic ব্যবহার করে স্বয়ংক্রিয়ভাবে স্কেলিং ফ্যাক্টর নির্ধারণ করে। অন্যথায়, config.yml এ নির্দিষ্ট করা মানটি ব্যবহৃত হয়, অথবা স্কেলিং উপলব্ধ না থাকলে একটি ত্রুটি দেখানো হয়।

নিচে chart_scaling প্যারামিটার সহ একটি নমুনা config.yml দেওয়া হলো।

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

নিম্নলিখিতটি 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 scene config.yml ফাইল

নিচে sensor_fusion পরীক্ষার জন্য একটি উদাহরণ config_yml ফাইল দেওয়া হলো। sensor_fusion পরীক্ষার জন্য, টেস্টবেডের নামে SENSOR_FUSION কীওয়ার্ডটি অবশ্যই থাকতে হবে। প্রিভিউ এবং ভিডিও স্ট্যাবিলাইজেশন পরীক্ষার কারণে Android 13 এবং এর পরবর্তী সংস্করণগুলো sensor fusion-এর জন্য শুধুমাত্র 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
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1

একাধিক টেস্টবেডের 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 ফাইল দেওয়া হলো। অ্যান্ড্রয়েড ১৪ এবং এর পরবর্তী সংস্করণগুলো scene_extensions টেস্টগুলো ছাড়া বাকি সব টেস্টের জন্য ম্যানুয়াল টেস্টিং সমর্থন করে। ম্যানুয়াল টেস্টিং-এর জন্য, টেস্টবেডের নামে MANUAL কীওয়ার্ডটি অবশ্যই থাকতে হবে। এছাড়াও, ট্যাবলেটের জন্য AndroidDevice সেকশনে কোনো serial বা label সেকশন অন্তর্ভুক্ত করা যাবে না।

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: 1

Gen2 রিগ টেস্টিং config.yml ফাইল

নিচে TEST_BED_GEN2 টেস্টবেডের একটি উদাহরণ config.yml ফাইল দেওয়া হলো। এই টেস্টবেডটি scene_ip পরীক্ষার জন্য ব্যবহৃত হয়, যার জন্য একটি Gen2 রিগ ব্যবহার করা হয়। নিচের উদাহরণটিতে টেস্টবেডের প্যারামিটারগুলো দেখানো হয়েছে, যখন 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: 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 টেস্টগুলি চালান।

  1. CTS Verifier অ্যাপটি খুলুন। টেস্ট মেনু থেকে Camera ITS Test নির্বাচন করুন। Android 17 এবং তার পরবর্তী সংস্করণগুলির জন্য, sensor_fusion এবং feature_combination টেস্টগুলি Camera ITS Sensor Fusion Rig Test নামের একটি অতিরিক্ত অ্যাক্টিভিটিতে রয়েছে।

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

    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)
    

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

  3. পরীক্ষাগুলো যে প্রয়োজনীয় শর্ত পূরণ করেছে, তা নিশ্চিত করতে সবুজ টিক চিহ্ন বোতামটিতে ট্যাপ করুন। এরপর CTS Verifier টেস্ট মেনুতে থাকা Camera ITS Test এন্ট্রিটি সবুজ হয়ে যাবে, যা নির্দেশ করে যে ফোনটি Camera ITS পরীক্ষায় উত্তীর্ণ হয়েছে।

সমান্তরাল ডিইউটি পরীক্ষা

অ্যান্ড্রয়েড ১৪ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলো প্যারালাল ডিইউটি টেস্টিং সমর্থন করে। এটি আপনাকে সামগ্রিক টেস্টিং-এর গতি বাড়ানোর জন্য একাধিক রিগের সাথে সমান্তরালভাবে ডিইউটি পরীক্ষা করার সুযোগ দেয়। উদাহরণস্বরূপ, প্যারালাল টেস্টিং আপনাকে একই সময়ে একটি রিগে ক্যামেরা ০ এবং অন্য একটি রিগে ক্যামেরা ১ পরীক্ষা করার সুযোগ দেয়। অ্যান্ড্রয়েড ১৭ এবং তার উচ্চতর সংস্করণের জন্য, যেহেতু ক্যামেরা আইটিএস (Camera ITS) টেস্টগুলো দুটি অ্যাক্টিভিটিতে বিভক্ত, তাই আপনি একটি ডিইউটি-তে sensor_fusion এবং feature_combination টেস্ট এবং অন্য ডিইউটি-তে অন্যান্য টেস্টগুলো সমান্তরালভাবে চালাতে পারেন। প্যারালাল টেস্টিং সেশনের সমস্ত টেস্টিং রেফারেন্স ডিইউটি-তে থাকা সিটিএস ভেরিফায়ার (CTS Verifier) ​​সেশনে একত্রিত করা হয়। আপনাকে অবশ্যই আরডুইনো লাইটিং কন্ট্রোলের সাথে প্যারালাল টেস্টিং চালাতে হবে, কারণ ম্যানুয়াল লাইটিং কন্ট্রোল প্যারালাল টেস্টিং-এর সাথে সমর্থিত নয়। নিশ্চিত করুন যে একই আরডুইনো কন্ট্রোলারের একটি ভিন্ন চ্যানেল প্রতিটি রিগের লাইটিং নিয়ন্ত্রণ করে।

নিচে একটি নমুনা 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 ভেরিফায়ার আপনাকে একই সাথে একাধিক ডিভাইসে একাধিক সিন পরীক্ষা করতে এবং বিভিন্ন টেস্ট রান বা ডিভাইস থেকে প্রাপ্ত একাধিক CTS ভেরিফায়ার রিপোর্টের পরীক্ষার ফলাফল একত্রিত করে একটি একক, সমন্বিত সাবমিশনে জমা দিতে দেয়।

জমা দেওয়ার প্রক্রিয়া

নির্মাণ অনুমোদনের জন্য একত্রিত ক্যামেরা আইটিএস ফলাফল জমা দিতে, এই ধাপগুলো অনুসরণ করুন:

  1. ডিভাইস প্রস্তুত করুন: পরীক্ষাধীন দুই থেকে তিনটি ডিভাইস (ডিইউটি) সংগ্রহ করুন, যেগুলোর বিল্ড ফিঙ্গারপ্রিন্ট হুবহু একই।
  2. CTS Verifier ইনস্টল করুন: সর্বশেষ CTS Verifier APK ইনস্টল করুন, যা প্রদত্ত বিল্ড এক্সপ্লোরার থেকে পাওয়া যাবে।
  3. পরীক্ষাগুলো সমান্তরালভাবে চালান:

    1. ডিইউটি-গুলো আলাদা রিগে স্থাপন করুন।
    2. প্রতিটি ডিভাইসে একই সাথে বিভিন্ন ক্যামেরা আইটিএস সিন চালান।
    3. রিপোর্ট সংগ্রহ: প্রতিটি রানের পর CTS ভেরিফায়ার রিপোর্টটি সংগ্রহ করুন। এর মধ্যে সেইসব রিপোর্টও অন্তর্ভুক্ত থাকবে যেখানে সিনগুলো ব্যর্থ হয়েছে। পরবর্তী রানগুলোতে শুধু ব্যর্থ হওয়া সিনগুলোই পুনরায় চালান।
  4. রিপোর্ট জমা দিন: সমস্ত ডিভাইস থেকে সংগৃহীত একাধিক CTS ভেরিফায়ার রিপোর্ট আপলোড করুন।

  5. ফলাফল পর্যালোচনা করুন: রিপোর্টগুলো আপলোড হয়ে গেলে, সামগ্রিক ফলাফলগুলো পর্যালোচনা করুন:

    • টেস্ট অ্যানালাইসিস সেকশনে সম্পাদিত সমস্ত সিন-এর একটি সম্পূর্ণ তালিকা দেখানো হয়।
    • যেসব সিন সম্পাদিত হয়নি বা ব্যর্থ হয়েছে, সেগুলোকে ' ব্যর্থ' (Failed) বিভাগের অধীনে তালিকাভুক্ত করা হয়।

      ফলাফল-একত্রীকরণ-চিত্র-১

      চিত্র ১. যে দৃশ্যগুলো সম্পাদিত হয়নি বা ব্যর্থ হয়েছে তার নথিপত্র।

    • অতিক্রমকারী দৃশ্যগুলো অ্যাগ্রিগেটেড পাস বিভাগের অধীনে তালিকাভুক্ত করা হয়েছে।

      ফলাফল-একত্রীকরণ-চিত্র-২

      চিত্র ২. সমষ্টিগত পাস হিসাবে শ্রেণীবদ্ধ দৃশ্যসমূহ

নির্মাণ অনুমোদনের অবস্থা

সমন্বিত প্রতিবেদনগুলোতে সমস্ত প্রয়োজনীয় দৃশ্য সফলভাবে সম্পন্ন হলে নির্মাণের অনুমোদন দেওয়া হয়।

ডিএনজি নয়েজ মডেল

যেসব ডিভাইস RAW বা DNG ক্যাপচার করার ক্ষমতার বিজ্ঞাপন দেয়, সেগুলোকে অবশ্যই প্রতিটি RAW শটের ক্যাপচার রেজাল্ট মেটাডেটাতে একটি নয়েজ মডেল প্রদান করতে হবে। এই নয়েজ মডেলটি অবশ্যই সাপোর্ট দাবি করা ডিভাইসটির প্রতিটি ক্যামেরার (যেমন, সামনের ও পেছনের ক্যামেরা) ক্যামেরা HAL-এ এমবেড করা থাকতে হবে।

নয়েজ মডেল বাস্তবায়ন

একটি নয়েজ মডেল প্রয়োগ করতে, এই ধাপগুলো অনুসরণ করে একটি নয়েজ মডেল তৈরি করুন এবং মডেলটিকে ক্যামেরা HAL-এ এম্বেড করুন।

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

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

নয়েজ মডেল যাচাইকরণ

tests/scene1_1/test_dng_noise_model.py নামক স্বয়ংক্রিয় ITS পরীক্ষাটি, ক্যামেরা ডেটাতে প্রদত্ত শট এক্সপোজার এবং গেইনের জন্য নয়েজের মান সঠিক কিনা তা যাচাই করার মাধ্যমে নয়েজ মডেলটিকে বৈধতা দেয়।

পরীক্ষায় সামান্য ব্যবধানে উত্তীর্ণ (PASS* পরীক্ষার অবস্থা)

অ্যান্ড্রয়েড ১৭ এবং এর পরবর্তী সংস্করণগুলোতে, একটি মার্জিনাল পাস ( PASS* ) নির্দেশ করে যে একটি পরীক্ষা পাস করেছে, কিন্তু এর পারফরম্যান্স মেট্রিকগুলো পূর্বনির্ধারিত পাসিং থ্রেশহোল্ডের খুব কাছাকাছি। যদিও পরীক্ষাটি প্রযুক্তিগতভাবে পাসের মানদণ্ড পূরণ করে, ব্যর্থতার সীমানার নৈকট্য আরও নিবিড়ভাবে পরীক্ষা করার প্রয়োজনীয়তা নির্দেশ করে।

প্রান্তিক পাসের সুবিধা

PASS* স্ট্যাটাসটি বেশ কিছু সুবিধা প্রদান করে:

  • আগাম সতর্কীকরণ ব্যবস্থা: যেসব পরীক্ষা ব্যর্থ হওয়ার উপক্রম হয়েছে, সেগুলো শনাক্ত করে, যার ফলে দলগুলো চূড়ান্ত ব্যর্থতায় রূপ নেওয়ার আগেই সমস্যাগুলো সমাধান করতে পারে।

  • সক্রিয় অপ্টিমাইজেশন: দলগুলোকে গ্রহণযোগ্য সীমার নিম্ন প্রান্তে থাকা টেস্ট এবং কোড অপ্টিমাইজ করতে উৎসাহিত করে, যা সামগ্রিক স্থিতিশীলতা উন্নত করে।

  • উন্নত গুণমান: কোডের সামান্য পরিবর্তনের ফলে ভবিষ্যতে অবনতি ঘটার সম্ভাবনা রয়েছে এমন ক্ষেত্রগুলোকে চিহ্নিত করার মাধ্যমে গুণমানের উচ্চতর মান বজায় রাখতে সাহায্য করে।

  • ডিবাগিং-এর সময় হ্রাস: PASS* টেস্টগুলো দ্রুত শনাক্ত করার মাধ্যমে, ভবিষ্যতে সম্পূর্ণ ব্যর্থতা ডিবাগ করার জন্য প্রয়োজনীয় সময় ও শ্রম উল্লেখযোগ্যভাবে কমানো যায়।

পাস* বিবরণ

PASS* স্ট্যাটাসের অন্তর্ভুক্ত বিষয়গুলো হলো:

  • থ্রেশহোল্ড নির্ধারণ: ক্যামেরা আইটিএস-এ প্রতিটি প্রাসঙ্গিক পরীক্ষার জন্য নির্দিষ্ট প্রান্তিক পাস থ্রেশহোল্ড সংজ্ঞায়িত করা হয়।

  • স্বয়ংক্রিয় শনাক্তকরণ: টেস্ট অটোমেশন সিস্টেমটি নির্ধারিত থ্রেশহোল্ডের উপর ভিত্তি করে টেস্টগুলোকে PASS* হিসেবে শনাক্ত ও শ্রেণিবদ্ধ করে।

  • সতর্কীকরণ ব্যবস্থা: PASS* হিসেবে চিহ্নিত যেকোনো পরীক্ষার জন্য টিমগুলো স্বয়ংক্রিয়ভাবে সতর্কবার্তা পায়, যা তাদেরকে নির্দিষ্ট পরীক্ষা এবং এর মেট্রিকগুলো খতিয়ে দেখতে নির্দেশ দেয়।

  • রিপোর্টিং: আরও ভালো দৃশ্যমানতার জন্য, টেস্ট রিপোর্ট এবং ড্যাশবোর্ডে মার্জিনাল পাস স্ট্যাটাসগুলো ItsTestSummary রিপোর্টে PASS* হিসেবে স্পষ্টভাবে নির্দেশিত থাকে, যা not_yet_mandated টেস্টগুলোর জন্য Fail* এর অনুরূপ। যেহেতু টেস্টটি নির্ধারিত থ্রেশহোল্ডের মধ্যে পাস হতে থাকে, তাই এটি আরও বিভ্রান্তি এড়ানোর জন্য একটি সবুজ স্ট্যাটাস বজায় রাখে। PASS* স্ট্যাটাসটি শুধুমাত্র একটি টেস্ট ক্লাসের জন্য প্রযোজ্য, পুরো সিনের জন্য নয়। উদাহরণস্বরূপ, test_jitter এবং test_metadata PASS* হলেও Scene_0-কে PASS হিসেবে বিবেচনা করা যেতে পারে।

  • পর্যবেক্ষণ: কোনো ডিভাইসে যে পরীক্ষাগুলো অল্পের জন্য পাস করে, সেগুলোর পারফরম্যান্স ডেটা সংগ্রহ করা হয়। এর ফলে, যদি এই পরীক্ষাগুলো পাস PASS অবস্থায় চলে আসে, তবে OEM-দের দ্বারা ভবিষ্যতে করা ক্যামেরার উন্নতিগুলো পর্যবেক্ষণ করা সম্ভব হয়।

নিম্নলিখিতটি 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 পরীক্ষার দৃঢ়তা ও নির্ভরযোগ্যতা বৃদ্ধি করা, যার ফলস্বরূপ একটি স্থিতিশীল ও উচ্চ-মানের পণ্য তৈরি হয়।