相机盒装 ITS

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

盒装 ITS 具有以下优势:

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

使用入门

盒装 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 android-cts-verifier/CtsVerifier.apk
          

运行场景 0-4

针对后置摄像头运行场景 0-4:

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

示例:

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

重试场景

您可以针对单个摄像头重新运行场景:

  • 针对单个摄像头重新运行场景:
        python tools/run_all_tests.py device=FA6BM0305016 chart=5811000011 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 英寸左右,并且屏幕分辨率必须大于 2000 x 1500 像素。必须根据平板电脑型号在 CameraITS/tools/wake_up_screen.py 中设置 DISPLAY_LEVEL 值。下表列出了建议用于 ITS 测试的平板电脑。

设备 屏幕尺寸
(英寸)
分辨率
(像素)
平板电脑尺寸
(英寸)
显示级别 操作系统
Asus ZenPad 3 9.7 2048 x 1536 9.47 x 6.44 x 0.28 192 Android 6.0
Huawei MediaPad m5 10.8 2560 x 1600 10.18 x 6.76 x 0.29 192 Android 8.0
Pixel C 10.2 2560 x 1800 9.53 x 7.05 x 0.28 96 Android 8.0
Samsung S3 9.7 2048 x 1536 10.76 x 6.65 x 0.24 192 Android 7.0
Sony Xperia Z4 10.1 2560 x 1600 10 x 6.57 x 0.24 192 Android 7.0

常见问题解答 (FAQ)

问题 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 功能标记和 VR/AR 应用要求相机/陀螺仪的定时偏差小于 1 毫秒。

可以使用用于静态 ITS 测试的单个装置以及传感器融合装置(如果相机具有 REALTIME 功能标记)来测试多摄像头设备。

下表提供了一组配置示例。

示例 相机 FoV 是否具有 REALTIME? 推荐装置 备注
1 75° 修订版 1 Android 7.0 或更高版本
2 75° 修订版 1 + 传感器融合 Android 9 或更高版本
3 75° + 95° 修订版 2 + 传感器融合 Android 9 或更高版本

问题 2:如何调试单个测试?

可以出于调试的目单独运行各个测试,但是只有运行整体场景时,系统才会将测试结果报告给 CtsVerifier.apk。运行 tools/run_all_tests.py 时,系统会将结果输出到本地屏幕,并将图像保存到本地目录(而不是生成的 /tmp/tmp### 目录)中。

要运行单个场景,请执行以下操作:

  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

问题 3:为什么需要将失败的测试合并为一个整体场景运行,而不是单独重新运行每个测试?

可以出于调试的目单独运行各个测试,但是只有运行整体场景时,系统才会将测试结果报告给 CtsVerifier.apk

相机 ITS 确保第三方应用具有兼容的摄像头接口。与单元测试类似,每个测试侧重于相机的一个方面。为了捕获不可靠的行为,这些测试应在一个整体场景测试中全部通过。例如,虽然在重新运行整体场景时单个不可靠测试可能会通过,但多个不可靠测试却很难通过。

以一种极端情况为例,假设某个场景中有 10 个测试,每个测试都有 50% 的概率返回 PASS。如果单独运行每个测试,则操作人员使相机通过相机 ITS 测试的概率会很高。但是,如果将这些测试作为一个场景整体运行,则整个场景通过测试的概率只有 0.1%。

问题 4:如何运行单个场景或重新排列场景运行顺序?

默认情况下,脚本 tools/run_all_tests.py 按顺序运行所有场景。但是,也可以单独运行各个场景或按指定顺序运行场景,并将结果报告给 CtsVerifier.apk

要运行单个场景(例如场景 2),请运行以下命令:

    python tools/run_all_tests.py device=# camera=# chart=# scenes=2
    

要按特定顺序运行多个场景,请运行以下命令:

    python tools/run_all_tests.py device=# camera=# chart=# scenes=3,2
    

问题 5:场景 1 中的许多测试在采用平板电脑设置时会失败,但在采用纸质图表时会通过。这是怎么回事?

确保平板电脑和测试环境符合以下规格要求。

平板电脑规格要求

确保平板电脑符合以下规格要求:

  • 屏幕尺寸(英寸):10 英寸
  • 分辨率(像素):大于 2000 x 1400 像素

如需了解更多详情,请参阅平板电脑要求

平板电脑亮度

如果平板电脑显示屏亮度过低,测试可能会无法获得正确的结果。要提高运行 Android 7.0 及更高版本的平板电脑的亮度,请运行以下命令:

    edit tools/wake_up_screen.py
    DISPLAY_LEVEL=96 → DISPLAY_LEVEL=192
    

盒子的光照强度(需要照度计)

确保平板电脑开口处的目标勒克斯值介于 100 到 300 之间。

如果勒克斯值过高,scene1/test_param_flash_mode.py 会返回 FAIL。如果勒克斯值过低,多个测试会失败。

问题 6:在采用 WFoV 盒装 ITS 修订版 2 时,为什么场景中出现了视野之外的对象?

图表可能未正确调整。图表调整适用于 Android 9 或更高版本。确保图表距离输入对于测试装置的版本而言正确无误。

WFoV 盒装 ITS 修订版 2

    python tools/run_all_tests.py ... chart=# dist=22
    

RFoV 盒装 ITS 修订版 1(dist=30 为默认值)

    python tools/run_all_tests.py ... chart=#
    

问题 7:如何调试传感器融合测试?

  1. 确保您位于 dialout 组中。

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

        lsusb
        …
        Bus 003 Device 004: ID 04d8:fc73 Microchip Technology, Inc.
        …
        
  3. 通过以下命令多次运行测试,以获得多次测试结果:

        python tools/run_sensor_fusion_box.py device=A camera=0 num_runs=10 rotator=default
        

    运行输出将存储在 sensor_fusion_# 文件夹下的 /tmp/tmp### 文件夹中,其中 # 是指运行编号。常见的失败原因如下:

    1. 手机未正确地居中放置。
    2. 未在图像中找到足够的内容项(通常是 FoV 或光照问题)。
    3. 返回的 FAIL 有效,必须纠正相机和陀螺仪之间的定时偏差。

问题 8:报告测试错误时应提供哪些信息?

报告测试错误时,请提供为测试生成的文件和图片。

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

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

    adb -s device_id bugreport