相机 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) 组成。您可以使用宽视场 (WFoV) ITS-in-a-box,它能够测试 WFoV(FoV > 90 度)和 RFoV(FoV < 90 度)相机,或常规视场-view (RFoV) ITS-in-a-box。

要开始使用相机 ITS-in-a-box:

  1. 购买或构建WFoVRFoV ITS-in-a-box。
  2. 使用 Camera ITS 软件配置平板电脑
  3. 运行测试
  4. 从 DUT获取结果

配置平板电脑

本节提供设置平板电脑以与位于CameraITS目录中的Camera ITS 测试一起使用的分步说明。这些说明使用 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 要求平板电脑显示图像,因此平板电脑会提示允许 Drive 访问您设备上的照片、媒体和文件? .按允许清除此提示(并防止将来出现提示)。
    3. 再次运行该命令。平板电脑提示保留此文件的副本?并建议使用 Google Drive。清除此提示(并防止将来出现提示),方法是按驱动器图标,然后按取消以上传到驱动器。
    4. 最后,运行tools/run_all_tests.py并确认当脚本在不同场景中循环时场景会自动变化。虽然大多数测试都失败了(因为相机没有指向图表),但您可以验证平板电脑是否正确地在场景中循环,而不会在屏幕上显示任何提示或其他弹出窗口。

运行测试

在运行 ITS-in-a-box 之前,请确保您的测试设置包括以下硬件和软件:

  • 一 (1) 个 ITS-in-a-box
  • 一 (1) 个用于显示场景的高分辨率 10" 平板电脑,序列号: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

例子:

相机 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 像素。 brightness值必须根据平板型号在config.yml中设置。下表列出了推荐的用于 ITS 测试的平板电脑以及适用于平板电脑的 DUT 的 Android 版本。

设备显示屏尺寸
(英寸)
显示屏尺寸
(像素)
平板电脑尺寸
(英寸)
展示
亮度
支持的 DUT
操作系统
三星 Galaxy Tab A8 10.5 1920 x 1200 9.72 x 6.37 x 0.27 192安卓 13+
小米平板 5 11 2560 x 1600 10.03 x 6.55 x 0.27 192安卓 12+
联想 Tab M10 Plus 10.3 1920 x 1200 9.61 x 6.03 x 0.32 192安卓 12+
三星 Galaxy Tab A7 10.4 2000 x 1200 9.75 x 6.2 x 0.28 192安卓 12+
Chuwi Hi9 Air 10.1 10.1 2560 x 1600 9.52 x 6.77 x 0.31 192安卓 7+
华硕 ZenPad 3 9.7 2048 x 1536 9.47 x 6.44 x 0.28 192安卓 7+
华为MediaPad m5 10.8 2560 x 1600 10.18 x 6.76 x 0.29 192安卓 7+
像素 C 10.2 2560 x 1800 9.53 x 7.05 x 0.28 96安卓 7+
索尼 Xperia Z4 10.1 2560 x 1600 10×6.57×0.24 192安卓 7+

常见问题 (FAQ)

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

RFoV ITS-in-a-box 修订版 1CameraITS/tests目录中测试 RFoV 摄像机的场景 0 到场景 4 测试。 RFoV 定义为60° < FoV < 90° 。对于较大的 FoV 相机,灯光可能会出现在图像中,或者图表可能会覆盖 FoV 中太小的区域,从而影响测试结果。

WFoV ITS-in-a-box 修订版 2CameraITS/tests目录中测试 WFoV 摄像机的场景 0 到场景 4 测试。 WFoV 定义为FoV >= 90° 。它在功能上与修订版 1 相同,但更大。修订版 2 测试台可以在 Android 9 及更高版本中测试 RFoV 和 WFoV 摄像头。

传感器融合盒通过scenes=sensor_fusion中的测试测试相机/陀螺仪时间偏移和多相机系统帧同步。 REALTIME功能标志和 VR/AR 应用程序需要小于 1 毫秒的相机/陀螺仪时间偏移。

如果相机具有REALTIME功能标志,则可以使用单个设备进行静态 ITS 测试和传感器融合设备测试多相机设备。

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

例子相机 FoV即时的?推荐钻机笔记
1 75°第 1 版Android 7.0 或更高版本
2 75°是的Rev 1 + 传感器融合安卓 9 或更高版本
3 75° + 95°是的Rev 2 + 传感器融合安卓 9 或更高版本

Q2:如何指定正在使用的测试台?

要指定正确的测试台,请确保图表距离参数正确。 rev1 试验台 (RFoV) 的图表距离为 31 cm,rev2 试验台 (WFoV) 的图表距离为 22 cm。默认情况下,图表距离设置为 31 厘米。

安卓 10 到安卓 11

要在 Android 10 到 11 中识别正确的测试平台,请在命令行中添加dist标志。 dist的默认值为31 。运行以下命令更改chart_distance参数。
python tools/run_all_tests.py ... chart=# dist=22

安卓 12

要在 Android 12 中识别正确的测试台,您可以编辑 config.yml 文件以更改chart_distance参数。
edit config.yml
chart_distance: 31.0 → chart_distance: 22.0

Q3:如何控制平板电脑的亮度?

默认情况下,数位板亮度设置为 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

Q4:如何调试单个测试?

可以出于调试目的单独运行测试,但除非运行整个场景,否则结果不会报告给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/目录中。

Q5:为什么我需要将失败的测试作为整个场景运行,而不是单独重新运行测试?

测试可以单独运行以进行调试,但除非运行整个场景,否则结果不会报告给CtsVerifier.apk

相机 ITS 确保第三方应用程序具有兼容的相机界面。与单元测试类似,每个测试都强调相机中的单个规范。为了捕捉不可靠的行为,这些测试应该作为一个组通过整个场景。例如,虽然一个不可靠的测试可以通过整个场景的重新运行,但多个不可靠的测试很难通过。

作为一个极端的例子,考虑一个场景中有 10 个测试,每个测试都有 50% 的概率返回PASS 。通过单独运行每个测试,操作员很有可能让相机通过相机 ITS。但是,如果测试作为一个场景在聚合中运行,则该场景通过的可能性只有 0.1%。

Q6:如何运行单个场景或重新排序运行场景?

默认情况下,脚本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文件中设置。

Q7:许多场景 1 测试在数位板设置中失败,但在纸质图表中通过。怎么了?

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

平板电脑规格

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

  • 显示尺寸(英寸):10 英寸
  • 显示尺寸(像素):大于 1920 x 1200 像素

有关更多详细信息,请参阅平板电脑要求

平板电脑亮度

如果数位板显示屏亮度过低,测试可能无法获得正确结果。

有关详细信息,请参阅如何控制数位板亮度?

箱体照明水平(需要照度计)

确保平板打开时的目标勒克斯值在 100 到 300 之间。

如果勒克斯级别太高, scene1/test_param_flash_mode.py返回FAIL 。如果勒克斯水平太低,则多次测试失败。

Q8:如何调试传感器融合测试?

  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
    

    在安卓 12 中:

    python tools/run_sensor_fusion_box.py num_runs=10
    

    附加参数在config.yml文件中设置。

    运行输出位于sensor_fusion_#文件夹下创建的/tmp/tmp###文件夹中,其中#是运行编号。失败的常见原因有:

    1. 手机没有正确居中。
    2. 在图像中找不到足够的特征(通常是 FoV 或照明问题)。
    3. 返回的FAIL有效,需要修正相机和陀螺仪的时间偏差。

Q9:报告测试错误时我应该包含哪些信息?

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

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

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

adb -s device_id bugreport

Q10:如何去除 16:10 平板电脑上遮挡场景的导航栏?

对于宽高比为 16:10(或更大)的平板电脑,导航栏可能会遮挡部分场景。要隐藏导航栏,请对平板电脑使用以下 adb 命令。

adb -s device_id shell settings put global policy_control immersive.full=*