相机盒装 ITS

Android 相机图像测试套件 (ITS) 是 Android 兼容性测试套件 (CTS) 验证程序的一部分,其中包含用于验证图像内容的测试。CTS 验证程序支持使用相机盒装 ITS 来自动执行 ITS 测试;支持对所有类型的 Android 设备进行手动测试。

盒装 ITS 具有以下优势:

  • 自动化。在测试期间不需要人为干预。
  • 可以轻松排查问题。测试环境的一致性可以减少设置错误并提高问题可重现性。
  • 高效。能够针对单个相机/场景进行重试,提高测试执行效率。

开始使用

盒装 ITS 由一个根据计算机辅助设计 (CAD) 图纸激光切割而成的塑料盒、一部图表平板电脑和一部被测设备 (DUT) 组成。下表介绍了可用的不同盒装 ITS 装置的功能和规格。

装置 图表距离 DUT 相机 FoV 范围(大约) 功能
模块化底座装置 22cm 60° - 120°
  • 尺寸更小
  • 前置大光圈切口,可在不遮挡辅助摄像头的情况下进行多摄像头系统测试
  • 可以将装置旋转 90°
  • 模块化底座装置和远摄扩展装置 22cm - 100cm* 10° - 120°
  • 前置大光圈切口
  • 支持测试最小焦距较长的相机(大多数远摄相机)
  • WFoV 盒装 ITS 22cm 60° - 120°
  • 大尺寸,可支持多种 DUT 安装位置
  • 支持平板电脑等尺寸较大的 DUT
  • RFoV 盒装 ITS 31cm 60° - 90°
  • 图表平板电脑
  • 内部照明系统
  • *远摄扩展装置长度可根据不同的图表距离进行调整。

    如需开始使用相机盒装 ITS,请执行以下操作:

    1. 购买或组装 modularWFoVRFoV 盒装 ITS。
    2. 使用 CameraITS 软件配置平板电脑
    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 报告

    平板电脑要求

    对于 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)
    平板电脑 OS
    版本
    Google
    Pixel C
    10.2 2560 x 1800 9.53 x 7.05 x 0.28 96 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) 平板电脑 OS 版本
    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+

    常见问题解答

    Q1:如何确定我的设备需要哪些测试装置?

    RFoV 盒装 ITS 修订版 1 用于测试 RFoV 相机,可以运行 CameraITS/tests 目录下的平板电脑场景测试。RFoV 的定义为:60° < FoV < 90°。对于 FoV 更大的相机,图像中可能会出现光线,或者图表覆盖的 FoV 区域太小,因而会影响测试结果。

    WFoV 盒装 ITS 修订版 2 用于测试 WFoV 相机,以便在 CameraITS/tests 目录中运行平板电脑场景测试。WFoV 的定义为:FoV >= 90°。修订版 2 测试装置在功能上与修订版 1 相同,但尺寸更大。修订版 2 测试装置可用于测试 Android 9 及更高版本中的 RFoV 和 WFoV 相机。 鉴于其尺寸更大,如果 DUT 是平板电脑,那么修订版 2 是理想的选择

    模块化基础装置用于测试 WFoV 相机,以便在 CameraITS/tests 目录中运行平板电脑场景测试。WFoV 的定义为:FoV >= 90°。模块化基础装置可用于测试搭载 Android 9 及更高版本的设备的 RFoV 和 WFoV 相机。它还支持可以附加的远摄扩展装置,以便测试最小焦距较长的远摄相机。模块化基础装置在功能上与 WFoV 盒装 ITS 相同,但尺寸更小。

    传感器融合盒可以通过 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 或更高版本
    4 75° + 95° + 20° 模块化底座、远摄扩展装置和传感器融合 Android 9 或更高版本
    5 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 常量下。