Camera ITS-in-a-Box

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°
  • 占地面积更小
  • 前部有大孔径切口,无需切口即可进行多摄像头系统测试,而不会遮挡辅助摄像头
  • 装置可以旋转 90°
  • 模块化底座装置和长焦扩展装置 22 厘米 - 100 厘米* 10° - 120°
  • 前部有大孔径切口
  • 支持测试具有较长最小对焦距离的相机(大多数长焦相机)
  • WFoV ITS-in-a-box 22 厘米 60° - 120°
  • 占地面积大,可实现许多 DUT 安装位置
  • 支持平板电脑等大型 DUT
  • RFoV ITS-in-a-box 31 厘米 60° - 90°
  • 图表平板电脑
  • 内部照明系统
  • *长焦扩展装置的长度可以针对不同的图表距离进行调整。

    若要开始使用 Camera ITS-in-a-box,请执行以下操作

    1. 购买或构建 模块化WFoVRFoV ITS-in-a-box。
    2. 配置平板电脑,安装 Camera ITS 软件。
    3. 运行测试.
    4. 获取 DUT 的结果

    配置平板电脑

    本部分提供有关设置平板电脑以用于 Camera ITS 测试的逐步说明,这些测试位于 CameraITS 目录中。这些说明以 Pixel C 平板电脑为例。如需了解平板电脑的要求和建议,请参阅平板电脑要求

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

    1. 为平板电脑充电并开机。如果系统提示设置帐号,请跳过(Camera ITS 不需要任何与平板电脑配对的帐号)。
    2. 将平板电脑更新到 Android 7.0 或更高版本。Android 6.x 和更低版本不支持 Camera ITS。
    3. 启用开发者模式
    4. 返回设置,然后选择开发者选项
      启用选项
      • 开启
      • 保持唤醒状态
      • USB 调试(允许主机在调试模式下运行平板电脑。首次将平板电脑连接到主机时,平板电脑会提示允许 USB 调试吗?如果平板电脑未显示调试提示,请断开连接,然后重新连接平板电脑。)
      停用选项
      • 自动系统更新
      • 通过 USB 验证应用
    5. 通过运行 $ adb devices 列出可用设备,从而确定 DUT 和图表 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-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
        

    运行基于平板电脑的场景

    要运行场景 0 到 4、6 和后置摄像头上的 scene_change

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

    示例

    Camera 0 S/N: FA6BM0305016
    图 1. 相机 0 S/N:FA6BM0305016

    重试场景

    您可以重试单个相机的场景

    • 要重试单个相机上的场景
      python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
      

    运行场景 5

    场景 5 需要特殊设置和特定照明(有关详情,请参阅 CTS Verifier 中的 CameraITS.pdf,您可以在兼容性测试套件下载中下载该文件)。您必须单独(在箱子外)运行场景 5。

    camera scene 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
    

    获取结果

    您可以在测试期间查看结果,并将完成的结果另存为报告。

    • 查看结果。要将 Camera ITS 结果另存为报告
      1. 通过并保存报告。
        camera ITS report
        图 3. Camera ITS 报告
      2. 从设备中提取报告
        adb -s FA6BM0305016 pull /sdcard/verifierReports
        
      3. 解压缩报告文件并查看 test_result.xml
        camera ITS reports
        图 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 修订版 1CameraITS/tests 目录中测试 RFoV 相机的平板电脑场景测试。RFoV 的定义为60° < FoV < 90°。对于更大的 FoV 相机,光线可能会出现在图像中,或者图表可能会在 FoV 中覆盖太小的区域,从而影响测试结果。

    WFoV ITS-in-a-box 修订版 2CameraITS/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 及更低版本中运行单个场景

    1. 通过在 tools/run_all_tests.py 中添加 scenes 标志来加载场景
      python tools/run_all_tests.py device=# camera=# chart=# scenes=#
      
    2. 在场景记录为已加载到 stdout 后,按 Control+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 报告结果。

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

    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:报告测试错误时应包含哪些信息?

    报告测试错误时,请包括测试生成的文件和图像。

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

    另请附上错误报告。在有问题的测试失败后,使用以下命令生成错误报告,并将生成的 zip 文件附加到错误报告。

    adb -s device_id bugreport
    

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

    如果您的相机无法在 25 厘米的距离处对焦,请移除传感器融合盒的图表安装面板。将图表放置在被测设备可以对焦的距离处,并在 config.yml 中将 chart_distance 更改为被测设备和图表之间测量的距离。图 5 显示了在这种情况下如何测量图表距离的示例。

    sensor_fusion TELE testing example6
    图 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.pySUB_CAMERA_TESTS 常量下列出。