Android Camera Image Test Suite (ITS) 是 Android Compatibility Test Suite (CTS) Verifier 的一部分,包含用于验证图像内容的测试。CTS Verifier 通过 Camera ITS-in-a-box 支持 ITS 测试自动化;对人工测试的支持涵盖所有 Android 设备外形规格。
ITS-in-a-box 具有以下优势
- 自动化。测试期间无需人工干预。
- 易于问题排查。测试环境的一致性减少了设置错误,并提高了可重复性。
- 效率。能够重试单个相机/场景,从而提高测试执行效率。
开始使用
ITS-in-a-box 由一个塑料箱(通过计算机辅助设计 (CAD) 图纸激光切割而成)、一个图表平板电脑和一个被测设备 (DUT) 组成。下表介绍了各种可用的 ITS-in-a-box 装置的功能和规格。
装置 | 图表距离 | DUT 相机 FoV 范围(大约) | 功能 |
---|---|---|---|
模块化底座装置 | 22 厘米 | 60° - 120° |
|
模块化底座装置和长焦扩展装置 | 22 厘米 - 100 厘米* | 10° - 120° | |
WFoV ITS-in-a-box | 22 厘米 | 60° - 120° |
|
RFoV ITS-in-a-box | 31 厘米 | 60° - 90° |
|
*长焦扩展装置的长度可以针对不同的图表距离进行调整。 |
若要开始使用 Camera ITS-in-a-box,请执行以下操作
配置平板电脑
本部分提供有关设置平板电脑以用于 Camera ITS 测试的逐步说明,这些测试位于 CameraITS
目录中。这些说明以 Pixel C 平板电脑为例。如需了解平板电脑的要求和建议,请参阅平板电脑要求。
注意:Camera ITS Python 脚本会自动在平板电脑上设置以下选项
设置 > 显示 > 休眠 > 30 分钟无活动后
自适应亮度 > 关闭
- 为平板电脑充电并开机。如果系统提示设置帐号,请跳过(Camera ITS 不需要任何与平板电脑配对的帐号)。
- 将平板电脑更新到 Android 7.0 或更高版本。Android 6.x 和更低版本不支持 Camera ITS。
- 启用开发者模式。
- 返回设置,然后选择开发者选项。
启用选项 - 开启
- 保持唤醒状态
- USB 调试(允许主机在调试模式下运行平板电脑。首次将平板电脑连接到主机时,平板电脑会提示允许 USB 调试吗?如果平板电脑未显示调试提示,请断开连接,然后重新连接平板电脑。)
停用选项 - 自动系统更新
- 通过 USB 验证应用
- 通过运行
$ adb devices
列出可用设备,从而确定 DUT 和图表 ID。要确定device_id
和chart_id
,请插入和拔下设备,并观察连接和断开连接的设备。 - 执行三次测试运行,以抑制可能会遮盖平板电脑屏幕上的图表的提示和用户提示。
- 将平板电脑正面朝上放在桌子上(请勿将平板电脑连接到箱子的背板)。
- 运行以下命令
场景 2 和场景 3 需要平板电脑显示图像,因此平板电脑会提示允许云端硬盘访问您设备上的照片、媒体和文件吗?按允许清除此提示(并阻止未来提示)。python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
- 再次运行该命令。平板电脑会提示保留此文件的副本吗?并建议使用 Google 云端硬盘。按云端硬盘图标,然后按取消上传到云端硬盘,清除此提示(并阻止未来提示)。
- 最后,运行
tools/run_all_tests.py
并确认场景是否随着脚本在不同场景之间循环而自动更改。虽然大多数测试都会失败(因为相机未对准图表),但您可以验证平板电脑是否正确地循环切换场景,而不会在屏幕上显示任何提示或其他弹出窗口。
运行测试
在运行 ITS-in-a-box 之前,请确保您的测试设置包括以下硬件和软件
- 一 (1) 个 ITS-in-a-box
- 一 (1) 台高分辨率 10 英寸平板电脑,用于显示场景,S/N:5811000011
- 一 (1) 个安装了 CTS Verifier 7.0_8+ 应用的 DUT。DUT 示例
- 一 (1) 部 Pixel NOF26W,用于后置摄像头 (0) 测试,S/N:FA6BM0305016。要安装 CTS Verifier 应用,请解压缩
android-cts-verifier.zip
,然后运行adb -s FA6BM0305016 install -r -g android-cts-verifier/CtsVerifier.apk
- 一 (1) 部 Pixel NOF26W,用于后置摄像头 (0) 测试,S/N:FA6BM0305016。要安装 CTS Verifier 应用,请解压缩
运行基于平板电脑的场景
要运行场景 0 到 4、6 和后置摄像头上的 scene_change
cd android-cts-verifier/CameraITS
. build/envsetup.sh
python tools/run_all_tests.py camera=0
示例

重试场景
您可以重试单个相机的场景
- 要重试单个相机上的场景
python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
运行场景 5
场景 5 需要特殊设置和特定照明(有关详情,请参阅 CTS Verifier 中的 CameraITS.pdf
,您可以在兼容性测试套件下载中下载该文件)。您必须单独(在箱子外)运行场景 5。

要在单个设备上为前置和后置摄像头运行场景 5
python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=5
python tools/run_all_tests.py device=FA6BM0305016 camera=1 scenes=5
获取结果
您可以在测试期间查看结果,并将完成的结果另存为报告。
- 查看结果。要将 Camera ITS 结果另存为报告
- 按通过并保存报告。
图 3. Camera ITS 报告 - 从设备中提取报告
adb -s FA6BM0305016 pull /sdcard/verifierReports
- 解压缩报告文件并查看
test_result.xml
。
图 4. Camera ITS 报告
- 按通过并保存报告。
平板电脑要求
对于 Android 15 及更高版本,用作 ITS 图表显示的平板电脑必须在以下平板电脑允许列表中。如需查看支持低光场景测试的平板电脑列表,请参阅支持低光场景的平板电脑。对于 Android 14 或更低版本,请参阅Android 14 及更低版本的平板电脑要求。
允许列表中的平板电脑是根据以下条件选择的
- 显示屏尺寸约为 10 英寸,屏幕分辨率高于 1920 x 1200 像素。
- 不得有任何由脉冲宽度调制 (PWM) 控制的屏幕调光引起的测量闪烁。
- 能够执行 ITS 测试发送的 adb 命令并以指示的屏幕亮度显示图表图像。
必须根据平板电脑型号在 config.yml
中设置 brightness
值。要确定您的平板电脑型号是否与允许列表中的设备名称对应,请通过运行 adb shell getprop | grep 'ro.product.device'
adb 命令打印 ro.product.device
值。
设备 | 显示屏尺寸 (英寸) |
显示屏尺寸 (像素) |
平板电脑尺寸 (英寸) |
显示 亮度 |
设备名称 (ro.product .device) |
平板电脑操作系统 版本 |
---|---|---|---|---|---|---|
Google Pixel C |
10.2 | 2560 x 1800 | 9.53 x 7.05 x 0.28 | 96 | dragon | Android 6+ |
Honor Pad 8 |
11 | 2000 x 1200 | 10.18 x 6.76 x 0.29 | 192 | HNHEY-Q | Android 12 |
Huawei MediaPad m5 |
10.8 | 2560 x 1600 | 10.18 x 6.76 x 0.29 | 192 | HWCMR09 | Android 8+ |
Lenovo Tab M10 Plus |
10.3 | 1920 x 1200 | 9.61 x 6.03 x 0.32 | 192 | X606F | Android 9+ |
Lenovo Tab P11 |
11 | 2000 x 1200 | 10.17 x 6.42 x 0.30 | 192 | J606F | Android 11+ |
Lenovo Tab P11 Gen2 |
11.5 | 2000 x 1200 | 10.59 x 6.67 x 0.29 | 192 | TB350FU | Android 13+ |
Nokia T21 |
10.4 | 2000 x 1200 | 9.74 x 6.19 x 0.30 | 192 | AGTA | Android 12+ |
Samsung Galaxy Tab A7 |
10.4 | 2000 x 1200 | 9.75 x 6.2 x 0.28 | 192 | gta4lwifi | Android 10+ |
Samsung Galaxy Tab A8 |
10.5 | 1920 x 1200 | 9.72 x 6.73 x 0.27 | 192 | gta8wifi | Android 11+ |
Samsung Galaxy Tab A9+ |
11 | 1920 x 1200 | 10.12 x 6.64 x 0.27 | 192 | gta9pwifi | Android 13+ |
Vivo Pad2 |
12.1 | 2800 x 1968 | 10.47 x 7.54 x 0.26 | 192 | DPD2221 | Android 13+ |
Xiaomi Pad 5 |
11 | 2560 x 1600 | 10.18 x 6.76 x 0.29 | 192 | nabu | Android 13+ |
Xiaomi Redmi Pad |
10.61 | 2000 x 1200 | 9.86 x 6.22 x 0.28 | 192 | yunluo | Android 14+ |
Xiaomi Redmi Pad SE |
11 | 2560 x 1600 | 10.06 x 6.58 x 0.29 | 192 | xun | Android 13+ |
支持低光场景的平板电脑
下表列出了支持 低光场景测试的平板电脑。这些平板电脑可以达到低光场景所需的亮度级别,从而使 DUT 能够正确曝光图表。设备 | 设备名称 (ro.product.device) | 平板电脑操作系统版本 |
---|---|---|
Huawei MediaPad m5 |
HWCMR09 | Android 8+ |
Samsung Galaxy Tab A8 | gta8wifi | Android 11+ |
Samsung Galaxy Tab A9+ | gta9pwifi | Android 13+ |
Xiaomi Pad 5 | nabu | Android 13+ |
Xiaomi Redmi Pad SE |
xun | Android 13+ |
Android 14 及更低版本的平板电脑要求
平板电脑的显示屏尺寸必须约为 10 英寸,屏幕分辨率必须高于 1920 x 1200 像素。平板电脑不得使用脉冲宽度调制 (PWM) 来设置亮度级别。必须根据平板电脑型号在 config.yml
中设置 brightness
值。下表列出了建议用于 ITS 测试的平板电脑以及平板电脑适用的 DUT 的 Android 版本。
设备 | 显示屏尺寸 (英寸) |
显示屏尺寸 (像素) |
平板电脑尺寸 (英寸) |
显示 亮度 |
显示 位 |
支持的 DUT 操作系统 |
支持的 平板电脑操作系统 |
---|---|---|---|---|---|---|---|
Samsung Galaxy Tab A8 |
10.5 | 1920 x 1200 | 9.72 x 6.37 x 0.27 | 192 | 8 | Android 13+ | Android 11+ |
Xiaomi Pad 5 |
11 | 2560 x 1600 | 10.03 x 6.55 x 0.27 | 1024 | 11 | Android 12+ | 仅限 Android 11 |
Lenovo Tab M10 Plus |
10.3 | 1920 x 1200 | 9.61 x 6.03 x 0.32 | 192 | 8 | Android 12+ | Android 9+ |
Samsung Galaxy Tab A7 |
10.4 | 2000 x 1200 | 9.75 x 6.2 x 0.28 | 192 | 8 | Android 12+ | Android 10+ |
Chuwi Hi9 Air 10.1 |
10.1 | 2560 x 1600 | 9.52 x 6.77 x 0.31 | 192 | 8 | Android 7+ | Android 8+ |
Asus ZenPad 3 |
9.7 | 2048 x 1536 | 9.47 x 6.44 x 0.28 | 192 | 8 | Android 7+ | Android 6+ |
Huawei MediaPad m5 |
10.8 | 2560 x 1600 | 10.18 x 6.76 x 0.29 | 192 | 8 | Android 7+ | Android 8+ |
Google Pixel C |
10.2 | 2560 x 1800 | 9.53 x 7.05 x 0.28 | 96 | 8 | Android 7+ | Android 6+ |
Sony Xperia Z4 |
10.1 | 2560 x 1600 | 10 x 6.57 x 0.24 | 192 | 8 | Android 7+ | Android 5+ |
常见问题解答
问题 1:如何确定我的设备需要哪些测试装置?
RFoV ITS-in-a-box 修订版 1 在 CameraITS/tests
目录中测试 RFoV 相机的平板电脑场景测试。RFoV 的定义为60° < FoV < 90°。对于更大的 FoV 相机,光线可能会出现在图像中,或者图表可能会在 FoV 中覆盖太小的区域,从而影响测试结果。
WFoV ITS-in-a-box 修订版 2 在 CameraITS/tests
目录中测试 WFoV 相机的平板电脑场景测试。WFoV 的定义为 FoV >= 90°。修订版 2 测试装置在功能上与修订版 1 相同,但更大。修订版 2 测试装置可以测试 Android 9 及更高版本中的 RFoV 和 WFoV 相机。考虑到更大的占地面积,如果 DUT 是平板电脑,则修订版 2 是理想之选
模块化底座装置 在 CameraITS/tests
目录中测试 WFoV 相机的平板电脑场景测试。WFoV 的定义为 FoV >= 90°。模块化底座装置可以测试运行 Android 9 及更高版本的设备的 RFoV 和 WFoV 相机。它还支持长焦扩展装置,该装置可以连接以测试具有较长最小对焦距离的长焦相机。模块化底座装置在功能上与 WFoV ITS-in-a-box 相同,但体积更小。
传感器融合箱 使用 scenes=sensor_fusion
中的测试来测试相机/陀螺仪时序偏移和多摄像头系统帧同步。REALTIME
功能标志需要小于 1 毫秒的相机/陀螺仪时序偏移。
对于静态 ITS 测试,可以使用单个装置测试多摄像头设备;如果相机具有 REALTIME
功能标志,则可以使用传感器融合装置测试多摄像头设备。
下表提供了一组示例配置。
示例 | 相机 FoV | REALTIME? | 推荐装置 | 备注 |
---|---|---|---|---|
1 | 75° | 否 | 模块化底座、修订版 1 或修订版 2 | Android 7.0 或更高版本 |
2 | 75° | 是 | 模块化底座、修订版 1 或修订版 2 和传感器融合 | Android 9 或更高版本 |
3 | 75° + 95° | 是 | 模块化底座或修订版 2 和传感器融合 | Android 9 或更高版本 |
4 | 75° + 95° + 20° | 是 | 模块化底座和长焦扩展装置以及传感器融合 | Android 9 或更高版本 |
5 | 75° + 95° 平板电脑 | 否 | 修订版 2 | Android 9 或更高版本 |
问题 2:如何指定正在使用的测试装置?
要指定正确的测试装置,请确保图表距离参数正确。修订版 1 测试装置 (RFoV) 的图表距离为 31 厘米,修订版 2 装置 (WFoV) 的图表距离为 22 厘米。默认情况下,图表距离设置为 31 厘米。
Android 10 到 Android 11
要在 Android 10 到 11 中识别正确的测试装置,请在命令行中添加dist
标志。dist
的默认值为 31
。运行以下命令以更改 chart_distance
参数。python tools/run_all_tests.py ... chart=# dist=22
Android 12 及更高版本
要在 Android 12 及更高版本中识别正确的测试装置,您可以编辑 config.yml 文件以更改chart_distance
参数。edit config.yml chart_distance: 31.0 → chart_distance: 22.0
问题 3:如何控制平板电脑亮度?
默认情况下,平板电脑亮度设置为 96。
要在运行 Android 7.0 到 Android 9 的平板电脑上更改亮度,请运行
edit tools/wake_up_screen.py DISPLAY_LEVEL=96 → DISPLAY_LEVEL=192
要在运行 Android 10 到 11 的平板电脑上更改亮度,可以通过在命令行中添加 brightness
标志来更改值
python tools/run_all_tests.py device=# camera=# chart=# brightness=192
要在运行 Android 12 及更高版本的平板电脑上更改亮度,请运行
edit config.yml brightness: 96 → brightness: 192
问题 4:如何调试单个测试?
可以单独运行测试以进行调试,但除非运行整个场景,否则不会向 CtsVerifier.apk
报告结果。
要在 Android 11 及更低版本中运行单个场景
- 通过在
tools/run_all_tests.py
中添加scenes
标志来加载场景python tools/run_all_tests.py device=# camera=# chart=# scenes=#
-
在场景记录为已加载到
stdout
后,按 Control+C 停止测试。如果屏幕上已显示正确的场景,请唤醒屏幕
python tools/wake_up_screen.py screen=#
-
运行单个测试。
python tests/scene#/test_*.py device=# camera=#
然后会在本地目录中生成绘图,并将
stdout
和stderr
打印到屏幕。要获取更多调试信息,请将
print
语句添加到脚本。要增加调试的测试输出,请添加debug=True
标志。python tests/scene#/test_*.py device=# camera=# debug=True
当运行 tools/run_all_tests.py
时,结果会打印到本地屏幕,图像会保存在本地目录中,而不是生成的 /tmp/tmp###
目录中。
要在 Android 12 及更高版本中运行单个场景
-
编辑
config.yml
文件。edit config.yml camera: <camera-id> → camera: 0 scene: <scene-name> → scene: scene1_1
-
运行单个测试。
python tools/run_all_tests.py -c config.yml --test_bed TEST_BED_TABLET_SCENES
结果会按运行时间排序后打印在 /tmp/logs/mobly/TEST_BED_TABLET_SCENES/
目录中。
问题 5:为什么需要将失败的测试作为整个场景运行,而不是单独重新运行测试?
可以单独运行测试以进行调试,但除非运行整个场景,否则不会向 CtsVerifier.apk
报告结果。
Camera ITS 确保第三方应用具有兼容的相机接口。与单元测试类似,每个测试都强调相机中的单个规范。为了捕获不可靠的行为,这些测试预计会作为一个场景的整体通过。例如,虽然单个不可靠的测试可能会通过重新运行整个场景,但多个不可靠的测试很难通过。
作为一个极端的例子,考虑一个场景中有 10 个测试,每个测试返回 PASS
的概率为 50% 的情况。通过单独运行每个测试,操作员很有可能使相机通过 Camera ITS。但是,如果将测试聚合为一个场景运行,则该场景通过的概率仅为 0.1%。
问题 6:如何运行单个场景或重新排序运行场景?
默认情况下,脚本 tools/run_all_tests.py
按顺序运行所有场景。但是,可以单独运行场景或按指定顺序运行场景,并将其报告给 CtsVerifier.apk
。
要在 Android 11 及更低版本中运行单个场景(例如,场景 2)或按特定顺序运行多个场景
python tools/run_all_tests.py device=# camera=# chart=# scenes=2
python tools/run_all_tests.py device=# camera=# chart=# scenes=3,2
要在 Android 12 及更高版本中运行单个场景或按特定顺序运行多个场景
python tools/run_all_tests.py scenes=2
python tools/run_all_tests.py scenes=3,2
其他参数在 config.yml
文件中设置。
问题 7:许多场景 1 测试在使用平板电脑设置时失败,但在使用纸质图表时通过。这是怎么回事?
确保平板电脑和测试环境符合以下规格。
平板电脑规格
确保平板电脑符合以下规格
- 显示屏尺寸(英寸):10 英寸
- 显示屏尺寸(像素):大于 1920 x 1200 像素
有关详情,请参阅平板电脑要求。
平板电脑亮度
如果平板电脑显示屏亮度太低,测试可能无法获得正确的结果。
有关详情,请参阅如何控制平板电脑亮度?
箱体照明水平(需要照度计)
确保平板电脑开口处的目标照度值介于 100 到 300 勒克斯之间。
如果照度水平过高,scene1/test_param_flash_mode.py
会返回 FAIL
。如果照度水平过低,则多个测试会失败。
问题 8:如何调试传感器融合测试?
确保您在
dialout
群组中。groups | egrep ‘dialout'
确保传感器融合控制器已连接,方法是确定 Microchip Technology 是否已连接到 USB 端口。
lsusb … Bus 003 Device 004: ID 04d8:fc73 Microchip Technology, Inc. …
多次运行测试,以获取具有以下命令的测试尝试分布。
在 Android 11 及更低版本中
python tools/run_sensor_fusion_box.py device=A camera=0 num_runs=10 rotator=default
在 Android 12 及更高版本中
python tools/run_sensor_fusion_box.py num_runs=10
其他参数在
config.yml
文件中设置。运行输出位于在
sensor_fusion_#
文件夹下创建的/tmp/tmp###
文件夹中,其中#
是运行编号。常见的失败原因包括- 手机未正确居中。
- 在图像中找不到足够的特征(通常是 FoV 或照明问题)。
- 返回的
FAIL
有效,必须更正相机和陀螺仪之间的时序偏移。
问题 9:报告测试错误时应包含哪些信息?
报告测试错误时,请包括测试生成的文件和图像。
- 如果您通过
tools/run_all_tests.py
运行测试,请将压缩后的/tmp/
目录附加到错误报告。 - 如果您单独运行测试,请将所有屏幕输出和生成的图像附加到错误报告。
另请附上错误报告。在有问题的测试失败后,使用以下命令生成错误报告,并将生成的 zip 文件附加到错误报告。
adb -s device_id bugreport
问题 10:如何使用最小对焦距离导致 25 厘米图表距离处图像模糊的相机运行 sensor_fusion 测试场景?
如果您的相机无法在 25 厘米的距离处对焦,请移除传感器融合盒的图表安装面板。将图表放置在被测设备可以对焦的距离处,并在 config.yml
中将 chart_distance
更改为被测设备和图表之间测量的距离。图 5 显示了在这种情况下如何测量图表距离的示例。

edit config.yml chart_distance: 25 → chart_distance: DISTANCE_BETWEEN_DUT_AND_CHART
问题 11:对于最小对焦距离在 31 厘米图表距离处产生模糊图像的相机,我该如何运行平板电脑测试场景?
如果您的相机在 31 厘米(RFoV 测试装置的深度)处测试时无法生成足够清晰的图像,请将您的相机安装在装置前方一定距离处,以使图表场景能够以更清晰的图像填充大约 60% 的相机视野 (FoV)。此距离可以小于相机的最小对焦距离。将 config.yml
中的 chart_distance
保留为 31 厘米。平板电脑上的图表缩放由相机 FoV 决定,如下表所示
相机 FoV | 图表缩放因子 |
---|---|
60 > FoV > 40 | 0.67x |
40 > FoV > 25 | 0.5x |
FoV < 25 | 0.33x |
问题 12:使用逻辑多摄像头 API,哪些测试在哪些摄像头上运行?
如果您的相机使用 REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
,则所有受支持的 ITS 测试都在顶层逻辑摄像头上运行。ITS 测试的子集在物理子摄像头上运行,这些测试在 tools/run_all_tests.py
的 SUB_CAMERA_TESTS
常量下列出。