相机盒装 ITS

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,请执行以下操作:

  1. 购买或组装 WFoVRFoV 盒装 ITS。
  2. 使用相机 ITS 软件配置平板电脑
  3. 运行测试
  4. 从 DUT 中获取结果

配置平板电脑

本部分提供了有关如何设置平板电脑,以用于 CameraITS 目录中的相机 ITS 测试的分步说明。这里以 Pixel C 平板电脑为例进行说明。如需了解有关平板电脑的要求和建议,请参阅针对平板电脑的要求

注意:相机 ITS Python 脚本会自动在平板电脑上为您设置以下选项:
设置 > 显示 > 休眠 > 无操作 30 分钟后
自适应亮度 > 关闭

  1. 为平板电脑接通电源并开机。如果系统提示您设置账号,请跳过(相机 ITS 不需要与平板电脑配对任何账号)。
  2. 将平板电脑更新为 Android 7.0 或更高版本。Android 6.x 及更低版本不支持相机 ITS。
  3. 启用开发者模式
  4. 返回设置并选择开发者选项
    启用选项
    • 开启
    • 不锁定屏幕
    • USB 调试(这样可以允许主机在调试模式下运行平板电脑。当您首次将平板电脑连接到主机时,平板电脑会提示“是否允许 USB 调试?”。如果平板电脑没有显示该调试提示,请断开平板电脑的连接,然后再重新连接。)
    停用选项
    • 自动系统更新
    • 通过 USB 验证应用
  5. 通过运行 $ adb devices 列出可用设备来确定 DUT ID 和图表 ID。如需确定 device_idchart_id,请插上再拔下设备并观察连接和断开连接的设备。
  6. 执行三次测试,以隐藏可能会遮盖平板电脑屏幕上的图表的提示信息和用户提示。
    1. 将平板电脑正面朝上放在桌子上(不要将平板电脑安装到盒子的后板)。
    2. 运行以下命令:
      python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
      
      场景 2 和 3 要求平板电脑显示图像,因此平板电脑会提示您“是否允许云端硬盘访问您设备上的照片、媒体和文件?”。允许以清除此提示(并防止以后再次显示提示)。
    3. 再次运行该命令。平板电脑会提示您“是否保留此文件的副本?”,并建议保存到 Google 云端硬盘。按“云端硬盘”图标,然后按取消来拒绝上传到云端硬盘,以此清除此提示(并防止以后再次显示提示)。
    4. 最后,运行 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
      

运行基于平板电脑的场景

针对后置摄像头运行场景 0-4、6 和 scene_change:

cd android-cts-verifier/CameraITS
. build/envsetup.sh
python tools/run_all_tests.py camera=0

示例:

相机 0 序列号:FA6BM0305016
图 1. 相机 0 序列号:FA6BM0305016

重新运行场景

您可以针对单个相机重新运行场景:

  • 针对单个摄像头重新运行场景:
    python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
    

运行场景 5

场景 5 需要进行特殊的设置以满足特定的照明要求。如需了解详情,请参阅 CTS 验证程序中的 CameraITS.pdf,您可以在兼容性测试套件下载页面中进行下载。您必须单独运行场景 5(在盒子外部)。

相机场景 5
图 2. 相机场景 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 结果另存为报告:
    1. 通过按钮并保存报告。
      相机 ITS 报告
      图 3. 相机 ITS 报告
    2. 从设备中提取报告:
      adb -s FA6BM0305016 pull /sdcard/verifierReports
      
    3. 解压缩报告文件并查看 test_result.xml
      相机 ITS 报告
      图 4. 相机 ITS 报告

针对平板电脑的要求

平板电脑的显示屏尺寸必须为 10 英寸左右,并且屏幕分辨率必须大于 1920 x 1200 像素。必须根据平板电脑型号在 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 修订版 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 及更低版本中运行单个场景,请执行以下操作:

  1. 通过在 tools/run_all_tests.py 中添加 scenes 标志来加载场景:
    python tools/run_all_tests.py device=# camera=# chart=# scenes=#
    
  2. 在场景被记录为已加载到 stdout 后,按 Ctrl+C 停止测试。

    如果屏幕上已经显示正确场景,请唤醒屏幕:

    python tools/wake_up_screen.py screen=#
    
  3. 运行单个测试。

    python tests/scene#/test_*.py device=# camera=#

    然后,系统会在本地目录下生成图片,并将 stdoutstderr 输出到屏幕上。

    如需了解有关调试的详细信息,请将 print 语句添加到脚本中。如需增加用于调试的测试输出,请添加 debug=True 标志。

    python tests/scene#/test_*.py device=# camera=# debug=True

运行 tools/run_all_tests.py 时,系统会将结果输出到本地屏幕,并将图像保存到本地目录(而不是生成的 /tmp/tmp### 目录)中。

如需在 Android 12 中运行单个场景,请执行以下操作:

  1. 修改 config.yml 文件。

    edit config.yml
    camera: <camera-id> → camera:  0
    scene: <scene-name> → scene: scene1_1
  2. 运行单个测试。

    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:如何调试传感器融合测试?

  1. 确保您位于 dialout 组中。

    groups | egrep ‘dialout'
  2. 确定 Microchip Technology 是否连接到 USB 端口,以此来确保传感器融合控制器已连接。

    lsusb
    …
    Bus 003 Device 004: ID 04d8:fc73 Microchip Technology, Inc.
    …
    
  3. 使用以下命令多次运行测试,以获得测试尝试的分布情况。

    在 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### 文件夹中,其中 # 是指运行编号。常见的失败原因如下:

    1. 手机未准确位于中心位置。
    2. 未在图像中发现足够特征(通常是 FoV 或光线问题)。
    3. 返回的 FAIL 有效,必须纠正相机和陀螺仪之间的定时偏差。

问题 9:报告测试 bug 时应提供哪些信息?

报告测试 bug 时,请提供为测试生成的文件和图像。

  1. 如果您通过 tools/run_all_tests.py 运行测试,请将压缩后的 /tmp/ 目录附加到 bug 信息中。
  2. 如果您单独运行测试,请将所有屏幕输出和生成的图像附加到 bug 信息中。

此外,还应提供 bug 报告。相关测试失败后,请运行以下命令来生成 bug 报告,并将生成的 ZIP 文件附加到 bug 信息中。

adb -s device_id bugreport

问题 10:如何使用焦距最小、在 25 厘米的图表距离处产生模糊图像的相机来运行 sensor_fusion 测试场景?

如果相机在 25 厘米的距离处无法聚焦,请拆除传感器融合盒的图表安装面板。请将图表放在 DUT 可以聚焦的距离处,并将 config.yml 中的 chart_distance 改为 DUT 与图表之间的距离。图 5 举例说明了如何在这种情况下测量图表距离。

sensors_fusion TELE 测试示例
图 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 常量下。