相機 ITS

Camera Image Test Suite (ITS) 是一種對圖片執行測試的架構 Android 相機產生的 3D 模型在 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 和套件版本,請參閱 相應版本的相機 ITS 版本資訊。

莫比

針對 Android 12 以上版本,Mobly 測試架構 。Mobly 可讓你在 its_base_test 類別。如要安裝 Mobly 測試架構,請執行:

pip install mobly

環境設定

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

cd CameraITS
source build/envsetup.sh

這個指令會檢查 Python 安裝,設定 PYTHONPATH 環境變數,並針對 utils/*.py 模組執行單元測試。如果答案為「否」 錯誤會顯示於終端機,且環境已準備好執行 ITS 測試。

場景設定

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

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

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

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

務必設定手機方向,讓相機在沒有 並輪替金鑰要確認這一點,最簡單的方法是使用 場景 2。大多數手機都有橫向的手機, 手機已將後置鏡頭逆時針旋轉,並順時針旋轉 前置鏡頭。

設定檔

使用 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 情境 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 sensor fusionbox,請執行:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

多個 testbeds 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 範例檔案。最低價格: 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* 表示測試失敗 但由於測試尚未完成,系統會將測試回報為 PASS 轉換為 CtsVerifierSKIP 表示測試已通過,原因如下: 裝置並未通告要測試的基礎功能。適用對象 例如,當裝置並非透過相機介面通告時 可支援 DNG,因此系統會略過與擷取 DNG 檔案相關的測試 做為 PASS

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

平行 DUT 測試

搭載 Android 14 以上版本的裝置支援平行處理功能 DUT 測試。這麼做可讓您與多個 rig 並行測試 DUT,加快執行速度 舉例來說,平行測試可讓您在單一環境中測試相機 0 裝置 1 和 1 拍攝。所有測試皆為平行測試 測試工作階段會在參照 DUT 的 CTS Verifier 工作階段中匯總。 您必須使用 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"

如要同時執行 testbeds,請使用以下指令:

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. 如要為每個攝影機產生雜訊模型,請執行 dng_noise_model.py 指令碼位於 tools 目錄內。這會輸出 C 程式碼片段。適用對象 如要進一步瞭解如何設定相機和拍攝環境,請參閱 tools 目錄中的 DngNoiseModel.pdf 文件。

  2. 如要實作裝置的雜訊模型,請剪下及貼上 C 程式碼 安裝到相機 HAL 中

雜訊模型驗證

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