相機圖像測試套件 (ITS) 是一種架構,可針對 Android 相機產生的圖片執行測試。在 ITS 中,每項測試的大致目標都是 以特定方式設定相機,拍攝一或多張畫面 檢查這些畫面,看看是否包含預期的圖像資料。許多測試都需要將相機對準特定目標圖表,或以特定亮度進行照明。
ITS 位於 CTS 驗證器測試控管工具中的
cts/apps/CameraITS
。
裝置必須通過與支援功能對應的 ITS 測試
相機架構針對第三方應用程式通告,做為 CTS 的一部分。
設定
如要執行 ITS 測試,必須先設定下列項目:
- 測試裝置 (DUT)
- 主機 (例如 Linux 桌上型電腦或筆記型電腦)
- 相機拍攝的場景
受測試裝置 (DUT) 設定
如要設定 DUT,請按照下列步驟操作:
- 透過 USB 將 DUT 連接至主機。
- 授予主機透過 ADB 存取 DUT 的權限。
在裝置上安裝 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 測試。
開啟 CTS Verifer 應用程式。在測試選單中選取 相機 ITS 測試。
在主體機器上,從
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)
每次執行指令碼都會輸出記錄,顯示
PASS
、FAIL
、FAIL*
或SKIP
。FAIL*
表示測試失敗,但由於測試尚未強制執行,因此測試會向 CtsVerifier 回報為PASS
。SKIP
表示裝置未宣傳所測試的基礎功能,因此測試通過。適用對象 例如,當裝置並非透過相機介面通告時 可支援 DNG,因此系統會略過與擷取 DNG 檔案相關的測試 做為PASS
。如要確認測試是否符合測試規定,請輕觸 綠色勾號按鈕。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。
如要為每部攝影機產生雜訊模型,請在
tools
目錄中執行dng_noise_model.py
指令碼。這會輸出 C 程式碼片段。適用對象 如要進一步瞭解如何設定相機和拍攝環境,請參閱tools
目錄中的DngNoiseModel.pdf
文件。如要為裝置實作雜訊模型,請將 C 程式碼片段剪下並貼到相機 HAL。
噪音模型驗證
tests/scene1_1/test_dng_noise_model.py
自動化 ITS 測試會驗證雜訊值
。