कैमरा आई.टी.एस

कैमरा इमेज टेस्ट सूट (आईटीएस) एंड्रॉइड कैमरे द्वारा निर्मित छवियों पर परीक्षण चलाने के लिए एक रूपरेखा है। आईटीएस में प्रत्येक परीक्षण का सामान्य लक्ष्य कैमरे को एक विशिष्ट तरीके से कॉन्फ़िगर करना, एक या अधिक शॉट्स कैप्चर करना और यह देखने के लिए शॉट्स की जांच करना है कि उनमें अपेक्षित छवि डेटा है या नहीं। कई परीक्षणों के लिए कैमरे को एक विशिष्ट लक्ष्य चार्ट पर इंगित करने या एक विशिष्ट तीव्रता पर रोशन करने की आवश्यकता होती है।

ITS cts/apps/CameraITS में CTS सत्यापनकर्ता परीक्षण हार्नेस में स्थित है। उपकरणों को सीटीएस के सबसेट के रूप में तीसरे पक्ष के ऐप्स के लिए कैमरा फ्रेमवर्क द्वारा विज्ञापित समर्थित सुविधाओं के अनुरूप आईटीएस परीक्षण पास करना होगा।

स्थापित करना

ITS परीक्षण चलाने के लिए, निम्नलिखित सेट अप करना होगा:

  • परीक्षणाधीन एक उपकरण (DUT)
  • एक होस्ट मशीन (उदाहरण के लिए, एक लिनक्स डेस्कटॉप या लैपटॉप)
  • एक दृश्य जिसे कैमरा फोटोग्राफ करता है

परीक्षणाधीन डिवाइस (DUT) सेटअप

DUT स्थापित करने के लिए, इन चरणों का पालन करें:

  1. DUT को USB पर होस्ट मशीन से कनेक्ट करें।
  2. होस्ट को ADB पर DUT तक पहुंचने की अनुमति प्रदान करें।
  3. डिवाइस पर CTS वेरिफायर ऐप ( CtsVerifier.apk ) इंस्टॉल करें। अधिक जानकारी के लिए, सीटीएस सत्यापनकर्ता का उपयोग करना देखें।

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk
    

होस्ट सेटअप

इसके लिए आवश्यक है कि होस्ट मशीन USB के माध्यम से DUT से कनेक्ट हो, डिवाइस नियंत्रण और संचार के लिए ADB का उपयोग करने में सक्षम हो, और आवश्यक सॉफ़्टवेयर स्थापित हो।

अपनी होस्ट मशीन सेट करने के लिए, सुनिश्चित करें कि निम्नलिखित सॉफ़्टवेयर स्थापित है।

एंड्रॉइड एसडीके प्लेटफ़ॉर्म टूल्स

एंड्रॉइड एसडीके प्लेटफ़ॉर्म टूल इंस्टॉल होना चाहिए और एडीबी होस्ट मशीन पर चल रहे शेल या टर्मिनल के निष्पादन योग्य पथ में होना चाहिए। एंड्रॉइड एसडीके प्लेटफ़ॉर्म टूल के सार्वजनिक रिलीज़ संस्करण के लिए, एसडीके प्लेटफ़ॉर्म टूल रिलीज़ नोट्स देखें।

अजगर

होस्ट मशीन पर पायथन स्थापित होना चाहिए। हम संगत संस्करणों के लिए समर्थन सुनिश्चित करने के लिए बंडल किए गए पायथन वितरण का उपयोग करने की सलाह देते हैं। किसी विशिष्ट रिलीज़ के लिए कौन से पायथन और पैकेज संस्करण स्थापित करने हैं, इसके विवरण के लिए, संबंधित रिलीज़ के लिए कैमरा आईटीएस रिलीज़ नोट्स देखें।

गतिशील

Android 12 और उच्चतर के लिए, Mobly परीक्षण फ़्रेमवर्क स्थापित होना चाहिए। मोबली आपको its_base_test क्लास में एक DUT और चार्ट टैबलेट सेट करने की सुविधा देता है। मोबली परीक्षण ढाँचा स्थापित करने के लिए, चलाएँ:

pip install mobly

पर्यावरण सेटअप

परीक्षण वातावरण स्थापित करने के लिए, चलाएँ:

cd CameraITS
source build/envsetup.sh

यह कमांड पायथन इंस्टॉलेशन की जांच करता है, PYTHONPATH पर्यावरण चर सेट करता है, और utils/*.py मॉड्यूल पर यूनिट परीक्षण चलाता है। यदि टर्मिनल पर कोई त्रुटि मुद्रित नहीं होती है, तो वातावरण ITS परीक्षण चलाने के लिए तैयार है।

यदि आपको त्रुटि संदेश libtinfo.so.6: no version information available (required by /bin/sh) रनटाइम पर दिखाई देता है, तो libtinfo.so.6 फ़ाइल का नाम बदलने के लिए निम्न कमांड चलाएँ।

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

दृश्य सेटअप

दृश्यों को सेट करने के लिए, हम परीक्षण में स्वचालन, विश्वसनीयता और दक्षता में आसानी के लिए कैमरा आईटीएस-इन-द-बॉक्स सेटअप का उपयोग करने की सलाह देते हैं। आईटीएस-इन-द-बॉक्स टेस्ट रिग्स आईटीएस के लिए सभी प्रकाश व्यवस्था, सेंटरिंग और चार्ट बदलने की आवश्यकताओं का समर्थन करते हैं। साथ ही, कैमरा एक्सटेंशन परीक्षण के लिए ITS-in-a-box आवश्यक है।

मैन्युअल परीक्षण के लिए, निम्नलिखित सुनिश्चित करें:

  • DUT एक तिपाई पर है
  • प्रत्येक परीक्षण के लिए DUT को सही स्थान पर इंगित किया गया है। (आईटीएस परीक्षण स्क्रिप्ट नए दृश्य में परीक्षण शुरू करने से पहले दृश्य सेटअप को बदलने के लिए संकेत प्रदान करती है।)
  • DUT USB पर होस्ट मशीन से जुड़ा है।
  • परीक्षण चलाने के दौरान DUT हिलता नहीं है।
  • दृश्य एक स्थिर, गैर-उतार-चढ़ाव वाले प्रकाश स्रोत से प्रकाशित होता है। (फ़्लोरोसेंट लाइट का उपयोग न करें क्योंकि इससे झिलमिलाहट उत्पन्न होती है।)

ITS परीक्षण स्क्रिप्ट एक संकेत प्रदर्शित करती है जो उपयोगकर्ता को नए दृश्य में परीक्षण शुरू करने से पहले दृश्य सेटअप बदलने के लिए कहती है।

फ़ोन का ओरिएंटेशन सेट किया जाना चाहिए ताकि कैमरा बिना घुमाव के तस्वीरें ले सके। इसे जांचने का सबसे आसान तरीका दृश्य 2 में चेहरे के दृश्यों से है। अधिकांश फोन में फोन लैंडस्केप ओरिएंटेशन में होता है, जिसमें रियर कैमरे के लिए फोन को वामावर्त घुमाया जाता है और फ्रंट कैमरे के लिए फोन को वामावर्त घुमाया जाता है।

कॉन्फ़िगरेशन फ़ाइलें

मोबली फ्रेमवर्क का उपयोग करते हुए, आपको मोबली टेस्टबेड को परिभाषित करने के लिए एक 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

सेंसर_फ़्यूज़न दृश्य config.yml फ़ाइल

निम्नलिखित sensor_fusion परीक्षणों के लिए config_yml फ़ाइल का एक उदाहरण है। sensor_fusion परीक्षण के लिए, कीवर्ड SENSOR_FUSION परीक्षण नाम में होना चाहिए। एंड्रॉइड 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 फ़ाइल

निम्नलिखित एक उदाहरण 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 परीक्षण कैसे चलाएं.

परीक्षणों का आह्वान

डिवाइस, होस्ट मशीन (पर्यावरण सहित) और भौतिक दृश्य स्थापित होने के बाद, निम्नलिखित प्रक्रिया का उपयोग करके आईटीएस परीक्षण चलाएं।

  1. सीटीएस वेरिफ़र ऐप खोलें। परीक्षण मेनू में, कैमरा ITS टेस्ट चुनें।

  2. होस्ट मशीन से, CameraITS/ निर्देशिका से आईटीएस परीक्षण चलाएँ। उदाहरण के लिए, फ्रंट और रियर कैमरे वाले डिवाइस के लिए, निम्न कमांड चलाएँ:

    python tools/run_all_tests.py
    

    स्क्रिप्ट config.yml फ़ाइल के आधार पर कैमरों और परीक्षण दृश्यों के माध्यम से दोहराई जाती है। डिबगिंग सेटअप के लिए, हम सबसे तेज़ टर्नअराउंड के लिए एकल परीक्षण के साथ scene2 दृश्यों में से एक को चलाने की सलाह देते हैं।

    मैन्युअल परीक्षण के लिए, प्रत्येक दृश्य पर आईटीएस परीक्षणों के सेट को चलाने से पहले, स्क्रिप्ट वर्तमान दृश्य की एक तस्वीर लेती है, इसे जेपीईजी के रूप में सहेजती है, कंसोल पर जेपीईजी का पथ प्रिंट करती है, और उपयोगकर्ता से पुष्टि करने के लिए कहती है। छवि ठीक है. यह कैप्चर और पुष्टि प्रवाह तब तक लूप करता है जब तक उपयोगकर्ता पुष्टि नहीं करता कि छवि ठीक है। इस प्रवाह में निम्नलिखित संदेश हैं.

    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, या SKIP दिखाते हुए एक लॉग प्रिंट करता है, जहां SKIP इंगित करता है कि परीक्षण पास हो गया था क्योंकि डिवाइस ने परीक्षण की जा रही अंतर्निहित क्षमता का विज्ञापन नहीं किया था। उदाहरण के लिए, यदि कोई उपकरण कैमरा इंटरफेस के माध्यम से विज्ञापन नहीं करता है कि वह डीएनजी का समर्थन करता है, तो डीएनजी फ़ाइल कैप्चर से संबंधित परीक्षणों को छोड़ दिया जाता है और पास के रूप में गिना जाता है।

  3. यह स्वीकार करने के लिए कि परीक्षण परीक्षण आवश्यकताओं को पूरा करते हैं, हरे चेक मार्क बटन पर टैप करें। सीटीएस सत्यापनकर्ता परीक्षण मेनू में कैमरा आईटीएस टेस्ट प्रविष्टि फिर हरी हो जाती है और यह दर्शाती है कि फोन ने कैमरा आईटीएस पास कर लिया है।

समानांतर DUT परीक्षण

Android 14 या उच्चतर चलाने वाले डिवाइस समानांतर DUT परीक्षण का समर्थन करते हैं। यह आपको समग्र परीक्षण में तेजी लाने के लिए कई रिग्स के समानांतर डीयूटी का परीक्षण करने की सुविधा देता है। उदाहरण के लिए, समानांतर परीक्षण आपको एक ही समय में एक रिग में कैमरा 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

डीएनजी शोर मॉडल

जो उपकरण RAW या DNG कैप्चर करने की क्षमता का विज्ञापन करते हैं, उन्हें प्रत्येक रॉ शॉट के कैप्चर परिणाम मेटाडेटा में एक शोर मॉडल प्रदान करना होगा। इस शोर मॉडल को समर्थन का दावा करने वाले डिवाइस पर प्रत्येक कैमरे (उदाहरण के लिए, फ्रंट और बैक कैमरे) के लिए कैमरा एचएएल में एम्बेड किया जाना चाहिए।

शोर मॉडल कार्यान्वयन

शोर मॉडल लागू करने के लिए, शोर मॉडल उत्पन्न करने और मॉडल को कैमरा एचएएल में एम्बेड करने के लिए इन चरणों का पालन करें।

  1. प्रत्येक कैमरे के लिए शोर मॉडल उत्पन्न करने के लिए, tools निर्देशिका में dng_noise_model.py स्क्रिप्ट चलाएँ। यह एक C कोड स्निपेट आउटपुट करता है। कैमरा और कैप्चर वातावरण कैसे सेट करें, इस बारे में अधिक जानकारी के लिए, tools निर्देशिका में DngNoiseModel.pdf दस्तावेज़ देखें।

  2. डिवाइस के लिए शोर मॉडल लागू करने के लिए, C कोड स्निपेट को कैमरा HAL में काटें और चिपकाएँ।

शोर मॉडल सत्यापन

tests/scene1_1/test_dng_noise_model.py स्वचालित ITS परीक्षण यह सत्यापित करके शोर मॉडल को मान्य करता है कि कैमरा डेटा में दिए गए शॉट एक्सपोज़र और लाभ के लिए शोर मान सही है।