攝影機 ITS

相機圖像測試套件 (ITS) 是一種架構,可針對 Android 相機產生的圖片執行測試。在 ITS 中,每項測試的大致目標都是 以特定方式設定相機,拍攝一或多張畫面 檢查這些畫面,看看是否包含預期的圖像資料。許多測試都需要將相機對準特定目標圖表,或以特定亮度進行照明。

ITS 位於 CTS 驗證器測試控管工具中的 cts/apps/CameraITS。 裝置必須通過與支援功能對應的 ITS 測試 相機架構針對第三方應用程式通告,做為 CTS 的一部分。

設定

如要執行 ITS 測試,必須先設定下列項目:

  • 測試裝置 (DUT)
  • 主機 (例如 Linux 桌上型電腦或筆記型電腦)
  • 相機拍攝的場景

受測試裝置 (DUT) 設定

如要設定 DUT,請按照下列步驟操作:

  1. 透過 USB 將 DUT 連接至主機。
  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

主機設定

進行 ITS 測試時,主機必須透過 USB 連線至 DUT,並能使用 ADB 進行裝置控制和通訊,以及安裝必要的軟體。

如要設定主體機器,請確認已安裝下列軟體。

Android SDK 平台工具

必須安裝 Android SDK 平台工具,且 ADB 必須安裝在 在主機上執行的殼層或終端機的執行路徑 這類機制更為快速Android SDK 平台工具公開發布的版本: 看 SDK 平台工具版本資訊

Python

主體必須安裝 Python。建議您使用隨附的 Python 發行版,確保支援相容的版本。如要進一步瞭解特定版本應安裝哪些 Python 和套件版本,請參閱相機 ITS 對應版本的版本資訊。

莫比

針對 Android 12 以上版本,Mobly 測試架構 。Mobly 可讓您在 its_base_test 類別中設定 DUT 和圖表平板電腦。如要安裝 Mobly 測試架構,請執行:

pip install mobly

環境設定

如要設定測試環境,請執行以下指令:

cd CameraITS
source build/envsetup.sh

這個指令會檢查 Python 安裝,設定 PYTHONPATH 環境變數,並針對 utils/*.py 模組執行單元測試。如果終端機中沒有顯示任何錯誤,表示環境已準備好執行 ITS 測試。

場景設定

如要設定場景,建議您使用 設定相機 ITS 提升自動化程度、可靠性與測試效率。內建 ITS 測試固定圈可滿足各種燈光、中心度和圖表變化需求 ITS。此外,ITS-in-a-box 是相機擴充功能測試的必要條件。

如要手動測試,請確認下列事項:

  • 鄧白氏環球編碼在三腳架上
  • DUT 會指向每項測試的正確場景。(ITS 測試指令碼) 在新模式開始測試之前,提供提示變更場景設定 。
  • DUT 已透過 USB 連線至主機。
  • 測試執行期間,DUT 不會移動。
  • 該場景使用不起波動的穩定光源。(錯誤做法) 使用螢光燈,因為這樣會閃爍畫面)。

ITS 測試指令碼會顯示提示,要求使用者變更場景 再以新情境啟動測試。

必須設定手機方向,讓相機拍攝的圖片不旋轉。最簡單的檢查方式,就是使用 scene2 中的臉部場景。大多數手機的橫向方向為後置鏡頭,逆時針旋轉為前置鏡頭,順時針旋轉則為後置鏡頭。

設定檔

使用 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 執行 檔案值。如果有相機或場景的指令列值,這些 會覆寫 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 場景設定檔.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 Verifer 應用程式。在測試選單中選取 相機 ITS 測試

  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)
    

    每次執行指令碼都會輸出記錄,顯示 PASSFAILFAIL*SKIPFAIL* 表示測試失敗,但由於測試尚未強制執行,因此測試會向 CtsVerifier 回報為 PASSSKIP 表示裝置未宣傳所測試的基礎功能,因此測試通過。適用對象 例如,當裝置並非透過相機介面通告時 可支援 DNG,因此系統會略過與擷取 DNG 檔案相關的測試 做為 PASS

  3. 如要確認測試是否符合測試規定,請輕觸 綠色勾號按鈕。CTS Verifier 中的「Camera ITS Test」項目 「測試」選單會變成綠色,代表手機已通過相機 ITS 測試。

平行 DUT 測試

搭載 Android 14 以上版本的裝置支援平行處理功能 DUT 測試。這樣一來,您就可以同時使用多個測試架測試 DUT,加快整體測試速度。舉例來說,平行測試可讓您在單一環境中測試相機 0 裝置 1 和 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 指令碼。這會輸出 C 程式碼片段。適用對象 如要進一步瞭解如何設定相機和拍攝環境,請參閱 tools 目錄中的 DngNoiseModel.pdf 文件。

  2. 如要為裝置實作雜訊模型,請將 C 程式碼片段剪下並貼到相機 HAL。

噪音模型驗證

tests/scene1_1/test_dng_noise_model.py 自動化 ITS 測試會驗證雜訊值 。