Android 相机图像测试套件 (ITS) 是 Android 兼容性测试套件 (CTS) 验证程序的一部分,其中包含用于验证图像内容的测试。CTS 验证程序支持使用相机盒装 ITS 来自动执行 ITS 测试;支持对所有类型的 Android 设备进行手动测试。
盒装 ITS 具有以下优势:
- 自动化。在测试期间不需要人为干预。
- 可以轻松排查问题。测试环境的一致性可以减少设置错误并提高问题可重现性。
- 高效。能够针对单个相机/场景进行重试,提高测试执行效率。
开始使用
盒装 ITS 由一个根据计算机辅助设计 (CAD) 图纸激光切割而成的塑料盒、一部图表平板电脑和一部被测设备 (DUT) 组成。您可以使用宽视野 (WFoV) 盒装 ITS,也可以使用常规视野 (RFoV) 盒装 ITS。宽视野 (WFoV) 盒装 ITS 既能测试 WFoV (FoV > 90°) 相机,也能测试 RFoV (FoV < 90°) 相机。
如需开始使用相机盒装 ITS,请执行以下操作:
配置平板电脑
本部分提供了有关如何设置平板电脑,以用于 CameraITS
目录中的相机 ITS 测试的分步说明。这里以 Pixel C 平板电脑为例进行说明。如需了解有关平板电脑的要求和建议,请参阅针对平板电脑的要求。
注意:相机 ITS Python 脚本会自动在平板电脑上为您设置以下选项:
设置 > 显示 > 休眠 > 无操作 30 分钟后
自适应亮度 > 关闭
- 为平板电脑接通电源并开机。如果系统提示您设置账号,请跳过(相机 ITS 不需要与平板电脑配对任何账号)。
- 将平板电脑更新为 Android 7.0 或更高版本。Android 6.x 及更低版本不支持相机 ITS。
- 启用开发者模式。
- 返回设置并选择开发者选项。
启用选项 - 开启
- 不锁定屏幕
- USB 调试(这样可以允许主机在调试模式下运行平板电脑。当您首次将平板电脑连接到主机时,平板电脑会提示“是否允许 USB 调试?”。如果平板电脑没有显示该调试提示,请断开平板电脑的连接,然后再重新连接。)
停用选项 - 自动系统更新
- 通过 USB 验证应用
- 通过运行
$ adb devices
列出可用设备来确定 DUT ID 和图表 ID。如需确定device_id
和chart_id
,请插上再拔下设备并观察连接和断开连接的设备。 - 执行三次测试,以隐藏可能会遮盖平板电脑屏幕上的图表的提示信息和用户提示。
- 将平板电脑正面朝上放在桌子上(不要将平板电脑安装到盒子的后板)。
- 运行以下命令:
python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
场景 2 和 3 要求平板电脑显示图像,因此平板电脑会提示您“是否允许云端硬盘访问您设备上的照片、媒体和文件?”。按允许以清除此提示(并防止以后再次显示提示)。 - 再次运行该命令。平板电脑会提示您“是否保留此文件的副本?”,并建议保存到 Google 云端硬盘。按“云端硬盘”图标,然后按取消来拒绝上传到云端硬盘,以此清除此提示(并防止以后再次显示提示)。
- 最后,运行
tools/run_all_tests.py
并确认当前场景会随着脚本循环自动变换为其他场景。虽然大多数测试都会失败(因为未将相机对准图表),但您可以验证平板电脑能否正确地循环播放场景,而不会在屏幕上显示任何提示或其他弹出式内容。
运行测试
在运行盒装 ITS 之前,请确保您的测试设置包含以下硬件和软件:
- 一 (1) 个盒装 ITS
- 一 (1) 台用于显示场景的高分辨率 10 英寸平板电脑,序列号:5811000011
- 一 (1) 部安装了 CTS 验证程序 7.0_8+ 应用的 DUT。DUT 示例:
- 一 (1) 部用于测试后置摄像头 (0) 的 Pixel NOF26W,序列号:FA6BM0305016。如需安装 CTS 验证程序应用,请解压缩
android-cts-verifier.zip
,然后运行adb -s FA6BM0305016 install -r -g android-cts-verifier/CtsVerifier.apk
- 一 (1) 部用于测试后置摄像头 (0) 的 Pixel NOF26W,序列号:FA6BM0305016。如需安装 CTS 验证程序应用,请解压缩
运行基于平板电脑的场景
针对后置摄像头运行场景 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 验证程序中的 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
获取结果
您可以在测试期间查看结果,并将完成的结果另存为报告。
- 查看结果。将相机 ITS 结果另存为报告:
- 按通过按钮并保存报告。
图 3. 相机 ITS 报告 - 从设备中提取报告:
adb -s FA6BM0305016 pull /sdcard/verifierReports
- 解压缩报告文件并查看
test_result.xml
。
图 4. 相机 ITS 报告
- 按通过按钮并保存报告。
平板电脑要求
平板电脑的显示屏尺寸必须为 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+ |
常见问题解答
Q1:如何确定我的设备需要哪些测试装置?
RFoV 盒装 ITS 修订版 1 用于测试 RFoV 相机,可以运行
CameraITS/tests
目录下的场景 0-4 测试。RFoV 的定义为:60° < FoV < 90°。对于 FoV 更大的相机,图像中可能会出现光线,或者图表覆盖的 FoV 区域太小,因而会影响测试结果。
WFoV 盒装 ITS 修订版 2 用于测试 WFoV 相机,可以运行
CameraITS/tests
目录下的场景 0-4 测试。WFoV 的定义为:FoV >= 90°。它的功能与修订版 1 相同,但视野更大。修订版 2 测试装置可用于测试 Android 9 及更高版本中的 RFoV 和 WFoV 相机。
传感器融合盒可以通过 scenes=sensor_fusion
中的测试来测试相机/陀螺仪的定时偏差以及多摄像头系统的帧同步。REALTIME
功能标志要求相机/陀螺仪的定时偏差小于 1 毫秒。
如果相机具有 REALTIME
功能标志,则可以通过用于静态 ITS 测试的单个装置以及传感器融合装置来测试多摄像头设备。
下表提供了一组配置示例。
示例 | 相机 FoV | 是否具有 REALTIME? | 推荐装置 | 备注 |
---|---|---|---|---|
1 | 75° | 否 | 修订版 1 或 2 | 搭载 Android 7.0 或更高版本 |
2 | 75° | 是 | 修订版 1 或 2 + 传感器融合 | Android 9 或更高版本 |
3 | 75° + 95° | 是 | 修订版 2 + 传感器融合 | Android 9 或更高版本 |
问题 2:如何指定使用哪个测试装置?
为了指定正确的测试装置,应确保图表距离参数正确无误。rev1 测试装置 (RFoV) 的图表距离为 31 厘米,rev2 装置 (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
后,按 Ctrl+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
。
相机 ITS 确保第三方应用具有兼容的摄像头接口。与单元测试类似,每个测试侧重于相机的一项规范。为了捕获不可靠的行为,这些测试应在一个整体场景测试中全部通过。例如,虽然在重新运行整体场景时单个不可靠测试可能会通过,但多个不可靠测试却很难通过。
以一种极端情况为例,假设某个场景中有 10 个测试,每个测试都有 50% 的概率返回 PASS
。如果单独运行每个测试,则操作人员使相机通过相机 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:报告测试 bug 时应提供哪些信息?
报告测试 bug 时,请提供为测试生成的文件和图像。
- 如果您通过
tools/run_all_tests.py
运行测试,请将压缩后的/tmp/
目录附加到 bug 信息中。 - 如果您单独运行测试,请将所有屏幕输出和生成的图像附加到 bug 信息中。
此外,还应提供 bug 报告。相关测试失败后,请运行以下命令来生成 bug 报告,并将生成的 ZIP 文件附加到 bug 信息中。
adb -s device_id bugreport
问题 10:如何使用焦距最小、在 25 厘米的图表距离处产生模糊图像的相机来运行 sensor_fusion 测试场景?
如果相机在 25 厘米的距离处无法聚焦,请拆除传感器融合盒的图表安装面板。请将图表放在 DUT 可以聚焦的距离处,并将 config.yml
中的 chart_distance
改为 DUT 与图表之间的距离。图 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.67 倍 |
40 > FoV > 25 | 0.5 倍 |
FoV < 25 | 0.33 倍 |
问题 12:使用逻辑多相机 API 时,您可以针对哪些相机运行哪些测试?
如果相机使用 REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
,则所有受支持的 ITS 测试都将在顶级逻辑相机上运行。ITS 测试的一部分在物理子摄像头上运行,这些测试列在 tools/run_all_tests.py
中的 SUB_CAMERA_TESTS
常量下。