相机 ITS 测试

本页面提供了相机图像测试套件 (ITS) 下的完整测试列表;ITS 是 Android 兼容性测试套件 (CTS) 验证程序的一部分。ITS 测试属于功能测试,这意味着它们不会测量图像画质,而是会测试所有通告的相机功能是否都能按预期运行。借助本文档,开发者和测试人员可以了解各个测试的用途,以及如何调试测试失败情况。

相机 ITS 按必需的相机属性、API 级别和媒体性能等级 (MPC) 级别控制测试。对于 API 级别,ITS 使用 ro.product.first_api_level 来控制在特定 API 级别中添加的测试,用于针对较低 API 级别的功能测试负面用户体验。对于在特定 API 级别中添加的需要新硬件功能的功能,ITS 使用 ro.vendor.api_level 来控制测试。如果为设备定义了 ro.odm.build.media_performance_class,则 ITS 需要根据 MPC 级别运行特定的测试。

测试按场景分组,如下所示:

  • scene0:拍摄元数据、抖动、陀螺仪、振动
  • scene1:曝光、感光度、EV 补偿、YUV 与 JPEG/RAW
  • scene2:人脸检测、需要彩色场景或完全黑暗的测试
  • scene3:边缘增强、镜头移动
  • Scene4:宽高比、剪裁、视野范围
  • scene5:镜头阴影
  • scene6:缩放
  • scene_extensions:相机扩展
  • sensor_fusion:相机/陀螺仪时间偏差

有关每个场景的说明,请参阅各个部分。

scene0

scene0 测试不需要具体的场景信息。但是,执行陀螺仪和振动测试时,手机必须静止不动。

test_burst_capture

用于验证整个拍摄流水线是否能跟上全尺寸拍摄的速度和 CPU 运行速度。

测试的 API:

通过:连拍多张全尺寸图像,相机的运行速度足够快,能避免超时。

test_capture_result_dump

用于测试手动拍摄操作能否返回拍摄结果,然后转储相应结果。

测试的 API:

通过:完成拍摄并转储拍摄结果。

test_gyro_bias

用于测试当设备处于静止状态时,陀螺仪是否有稳定的输出。系统会用 20 个数据点的平均值绘制数据。

测试的 API:

通过:随着时间的推移,陀螺仪读数的增量小于 0.01。

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

用于测量相机时间戳中的抖动。

测试的 API:

通过:帧之间至少有 30 毫秒的增量。

test_jitter_plot.png

test_jitter_plot.png(注意较小的 y 轴范围。此图中的抖动实际上较小。)

test_metadata

用于测试元数据条目的有效性。查看拍摄结果和相机特征对象。此测试使用 auto_capture_request 曝光值和增益值,因为图像内容并不重要。

测试的 API:

通过:硬件级别、rollingShutterSkewframeDuration 标记、timestampSourcecroppingTypeblackLevelPatternpixel_pitch、FoV、超焦距存在并且具有有效值。

test_param_sensitivity_burst

用于测试在连拍过程中是否正确应用了 android.sensor.sensitivity 参数。仅检查输出元数据。

测试的 API:

通过:输出数据的容错率低于 0.2%。

test_read_write

用于通过读取拍摄元数据来测试设备是否写入了正确的曝光值和增益值。

测试的 API:

通过:所有照片中的读取和写入值均一致。

test_sensor_events

用于测试通告支持传感器融合的设备是否会查询并输出传感器事件。传感器应为加速度计、陀螺仪和磁力计。此测试仅在屏幕开启时有效,这意味着设备不处于待机模式。

测试的 API:

通过:收到每个传感器的事件。

test_solid_color_test_pattern

用于测试是否会在屏蔽相机时正确生成纯色测试图案。 如果支持相机屏蔽功能,则必须支持纯色测试图案。 如果不支持相机屏蔽功能,则只会在通告该功能时测试纯色测试图案。

如果支持 RAW 图像,也会测试颜色分配。所测试的颜色为黑色、白色、红色、蓝色和绿色。对于不支持 RAW 图像的相机,仅测试黑色。

测试的 API:

通过:支持的纯色测试图案是正确的颜色,且图像中的差异较小。

test_test_pattern

用于测试 android.sensor.testPatternMode 参数是否拍摄了每个有效测试图案的帧,并检查是否针对纯色和彩条正确生成了帧。此测试包括以下步骤:

  1. 拍摄所有受支持的测试图案的图像。
  2. 对纯色测试图案和彩条执行简单的正确性检查。

测试的 API:

通过:正确生成支持的测试图案。

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

用于使用线性色调映射来测试从 RAW 到 YUV 的测试图案转换。此测试使用需要 android.sensor.testPatternMode = 2 (COLOR_BARS) 为色调映射转换生成完美的图像图案。确保流水线采用具有线性色调映射和理想图像输入的适当颜色输出(依赖于 test_test_patterns)。

测试的 API:

通过:YUV 和 RAW 看起来彼此相似。

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

用于测试图像和移动传感器事件是否在同一时域中。

测试的 API:

通过:移动时间戳介于两个图像时间戳之间。

test_vibration_restriction

用于测试设备的振动是否符合预期。

测试的 API:

通过:相机音频限制 API 将设备设置为静音后,设备不会振动。

scene1

scene1 是一种灰色图。灰色图表必须覆盖相机视野范围的中心 30%。该灰色图预计会适度质询 3A(自动曝光、自动白平衡和自动对焦),因为中心区域没有任何特征。不过,拍摄请求会指定整个场景,其中包含足够 3A 进行收敛的特征。

RFoV 相机可以在 WFoV 或 RFoV 测试装置内进行测试。如果在 WFoV 测试装置内测试 RFoV 相机,该图会按 ⅔ 的比例缩放,以确保 FoV 中灰色图的部分边界能够帮助 3A 进行收敛。 如需详细了解相机测试装置,请参阅相机盒装 ITS

scene1

scene1:全尺寸图(左)。按 ⅔ 的比例缩放后的图(右)。

test_3a

用于使用具有中等挑战性的目标测试 3A 的收敛。

测试的 API:

通过:3A 会进行收敛且返回的 3A 值有效。

test_ae_af

用于分别测试 3A 自动曝光 (AE) 和自动对焦 (AF) 算法。

测试的 API:

通过:3A 会进行收敛且返回的 3A 值合法。

test_ae_precapture_trigger

用于在使用预拍触发器时测试 AE 状态机。在 AE 停用的情况下拍摄 5 个手动请求。最后一个请求具有 AE 预拍触发器,该触发器应被忽略,因为 AE 已被停用。

测试的 API:

通过:AE 会收敛。

test_auto_vs_manual

用于测试自动拍摄的照片和手动拍摄的照片看起来是否相同。

测试的 API:

通过:每个拍摄结果中报告的手动白平衡增益和变形都与相机 3A 算法中的自动白平衡 estimate 一致。

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

用于测试设备是否可以生成全黑和全白的图像。拍摄两张照片,第一张用极低的增益和极短的曝光,得到一张黑色的照片;第二张用极高的增益和极长的曝光,得到一张白色的照片。

测试的 API:

通过:生成黑色图像和白色图像。白色图像的饱和通道的 RGB 值为 [255, 255, 255],并且误差范围小于 1% 的差值。

test_black_white_black test_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

使用手动拍摄设置连拍 5 次,共拍摄 50 张图像,然后检查这些图像是否完全相同。此测试可用于识别是否有零星的帧以不同方式处理或有伪影。

测试的 API:

通过:图像在视觉上和 RGB 值上完全相同。

未通过:每次连拍开始时 RGB 平均图都出现一个峰值或谷值。

  • first_API_level 低于 30 时,公差为 3%
  • first_API_level 为 30 或更高时,公差为 2%

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

用于测试 CaptureResult 对象中是否返回有效的数据。依次执行自动拍摄、手动拍摄和自动拍摄。

测试的 API:

通过:元数据适用于所有拍摄,并且手动设置不会泄露到第二次自动拍摄中。绘制出拍摄的镜头阴影校正。

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

用于测试 RAW 数据流是否无法剪裁。

测试的 API:

通过:YUV 图像的中心区域被剪裁掉了,但 RAW 图像没有。

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

用于测试剪裁区域的呈现效果。截取一整张图像,并创建涉及 5 个不同区域(角落和中心)的小块图片。截取 5 个区域的图像并设置剪裁。比较小块图片和剪裁图像值。

测试的 API:

通过:剪裁区域的图像与对应于剪裁图像的小块图片一致。

test_dng_noise_model

用于验证 DNG 原始模型参数是否正确。该图描述了在一系列感光度下拍摄的原始照片中灰色卡片中心小块图片的测量方差,然后将这些值与相机 HAL 中的 DNG 噪声模型在每个感光度下预计会有的方差进行比较(基于拍摄结果对象中返回的 O,S 参数)。如需详细了解 DNG 噪声模型,请下载这篇介绍 DNG 噪声模型的文档。

测试的 API:

通过:DNG 原始模型参数正确无误。预期的 RGB 值与实际测量的 RGB 值一致。

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

用于测试是否应用了曝光值 (EV) 补偿。该测试通过 8 步提高曝光量,并检查测得的亮度与预期亮度的对比情况。预期值根据未应用 EV 补偿的图片的亮度计算得出,如果计算得出的值超过图片实际值的范围,预期值会达到饱和。如果预期值与测量值不匹配,或图像在 5 步内过度曝光,测试会失败。

测试的 API:

通过:图像在 5 步内逐步提高曝光量,且未出现过度曝光的情况。

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

测试是否使用通过 CONTROL_AE_COMPENSATION_STEP 创建的范围应用了 EV 补偿。在每个补偿值时都会捕获 8 帧。

测试的 API:

通过:EV 补偿设置增加后拍摄亮度增加,并且为每项 EV 补偿设置拍摄的 8 帧具有稳定的亮度值。

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure

用于测试随着 ISO 和曝光时间的变化,是否可以实现恒定的曝光。拍摄一系列照片,通过选择 ISO 和曝光时间来实现彼此平衡。结果应具有相同的亮度,但在该序列中,图像应该变得更嘈杂。验证样本像素平均值是否接近。确保图像不会固定为 0 或 1(这会使它们看起来像平坦的线条)。此外,您还可以通过在配置文件中设置 debug 标志来使用 RAW 映像运行测试。

测试的 API:

通过:图像具有相同的亮度,但 ISO 越高,图像会越嘈杂。在被测增益空间上 ISO *曝光量不变的情况下,RGB 平面是平坦的。

test_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult=1.00 test_exposure_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

用于测试转换后的 YUV 图像和设备 JPEG 图像看起来是否相同。该测试截取图像中心 10% 的区域并计算其 RGB 值,然后验证它们是否一致。

测试的 API:

通过:每张图像之间的平均 RGB 差值低于 3%。

test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg
test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

用于测试 FULLLEVEL_3 相机的设置(曝光和增益)是否固定在合适的帧上。使用连续请求拍摄一系列照片,在不同的照片之间使用不同的拍摄请求参数。检查图像是否具有预期的属性。

测试的 API:

通过:图像 [2、3、6、8、10、12、13] 增加了 ISO 或曝光量,并且 test_latching_plot_means.png 中显示出更高的 RGB 均值。

test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

用于测试设备处理是否可以反转为线性像素。让设备对准统一的目标,拍摄一系列照片。

测试的 API:

通过:R、G、B 值必须随着感光度的提升而线性增加。

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

用于测试 3A 锁定和 YUV 连拍(使用自动设置)。此测试设计为即使在没有 MANUAL_SENSORPER_FRAME_CONTROLS 的受限设备上也可以通过。当 CTS 中包含帧速率检查时,此测试会检查 YUV 图像一致性。

测试的 API:

通过:拍摄效果一致。

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_param_color_correction

用于测试设置后是否应用了 android.colorCorrection.* 参数。使用不同的变形值和增益值拍摄照片,并测试它们是否看起来也相应不同。选择变形和增益,使输出越来越红或越来越蓝。使用线性色调映射。色调映射是图像处理中使用的一种技术,用于将一组颜色映射到另一组颜色,以估算高动态范围图像在动态范围较为受限的媒介中的外观。

测试的 API:

通过:R 和 B 值根据变形而提升。

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*x 轴表示拍摄请求:0 = unity,1 = 红色增强,2 = 蓝色增强

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg(R 增强)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg(B 增强)

test_param_exposure_time

用于测试是否应用了 android.sensor.exposureTime 参数。

测试的 API:

通过:每张照片都比前一张照片亮。

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

用于测试是否应用了 android.flash.mode 参数。手动将曝光位置设置为深色侧,以便清楚地知道闪光灯是否触发,并使用线性色调映射。使用图块图像检查中心区域,查看是否有较大的渐变来验证闪光灯是否已触发。

测试的 API:

通过:图块图像的中心有一个较大的渐变,表示闪光灯已触发。

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

用于测试 android.noiseReduction.mode 参数是否在设置后正确应用。在相机光线较暗的情况下拍摄图像。使用高模拟增益以确保拍摄的图像是嘈杂的。在“NR 关闭”、“快速”和“高画质”场景下拍摄三张图像。此外,在低增益和 NR 关闭这一场景下拍摄一张图像,并将其方差作为基准。SNR(信噪比)越高,图像画质越高。

测试的 API:

通过:SNR 因不同的降噪模式而异,其表现类似下图所示。

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0:关闭;1:快速;2:高清;3:最小;4:ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

test_param_sensitivity

用于测试是否应用了 android.sensor.sensitivity 参数。该测试通过 5 步提高了感光度,每一张照片都有固定的曝光量。

测试的 API:

通过:中心 10% 区域的 RGB 均值变高,画面更亮,因为感光度更高了。

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

用于测试是否应用了 android.shading.mode 参数。

测试的 API:

通过:着色模式会切换,镜头阴影映射已按预期修改。

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

用于测试是否应用了 android.tonemap.mode 参数。为每个 R、G、B 通道应用不同的色调映射曲线,并检查输出图像是否已按预期修改。此测试包含两个测试:test1 和 test2。

测试的 API:

通过

  • test1:两个图像都具有线性色调映射,但 n=1 的渐变曲线更陡。对于 n=1 图像,G(绿色)通道更亮。
  • test2:色调映射相同,但长度不同。图像相同。
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

用于检查 RAW 感光度提升后的情况。拍摄一组具有不同感光度的 RAW 和 YUV 图像,发布 RAW 感光度提升组合,并检查输出像素均值是否与请求设置一致。

测试的 API:

通过:RAW 图像随感光度提升而变暗,而 YUV 图像的亮度保持不变。

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

拍摄一组增益越来越高的原始图像,并测量噪声。在连拍中只拍摄原始照片。

测试的 API:

通过:随着增益的增加,每张照片都比前一张照片嘈杂。

使用中心统计网格单元的方差。

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

拍摄一组曝光时间越来越长的原始图像,并测量像素值。

测试的 API:

通过:增加 ISO(增益)会使像素对光线更加敏感,因此该图会向左移动。

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ 为 1 毫秒,10¹ 为 10 毫秒,10⁻¹ 为 0.1 毫秒)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

拍摄一组感光度越来越高的原始图像,并测量图像中心 10% 区域的噪声(方差)。用于测试是否每张照片都比前一张照片嘈杂。

测试的 API:

通过:方差随每张照片而增加。

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

用于测试是否已针对重新处理请求应用 android.noiseReduction.mode。在相机光线较暗的情况下拍摄重新处理后的图像。使用高模拟增益以确保拍摄的图像是嘈杂的。在“NR 关闭”、“快速”和“高画质”场景下拍摄三张重新处理后的图像。在低增益和 NR 关闭这一场景下拍摄一张重新处理后的图像,并将其方差作为基准。

测试的 API:

通过:快速 >= 关闭,高清 >= 快速,高清 >> 关闭

典型的 SNR 与 NR_MODE 对比图

典型的 SNR 与 NR_MODE 对比图

test_tonemap_sequence

用于使用不同的色调映射曲线测试一系列照片。使用线性色调映射拍摄 3 张手动照片。使用默认色调映射拍摄 3 张手动照片。计算每个连续帧对之间的增量。

测试的 API:

通过:有 3 个完全相同的帧,后跟一个由 3 个完全相同的帧组成的不同集合。

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

用于测试图像拍摄的所有报告尺寸和格式是否都正常。使用带有线性色调映射的手动请求,使 YUV 和 JPEG 在由 image_processing_utils 模块转换时看起来一样。默认情况下,图像不会保存,但可通过启用 debug_mode 来保存。

测试的 API:

通过:在经过 RGB 转换后的图像中,所有图像中心的最大 RMS(信号均方根值)差为最高分辨率 YUV 图像的 3%。

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

用于测试图像拍摄的报告尺寸和格式是否都正常。

测试的 API:

通过:测试完成并返回所请求的图像。

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

用于测试能否以 YUV 和 JPEG 输出形式拍摄单个帧。使用带有线性色调映射的手动请求,使 YUV 和 JPEG 在由 image_processing_utils 模块转换时看起来一样。

测试的 API:

通过:YUV 和 JPEG 图像类似,并且其 RMS(信号均方根值)差小于 1%。

test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

用于测试能否以 RAW/RAW10/RAW12 和 YUV 输出形式拍摄单个帧。使用带有线性色调映射的手动请求,这样 RAW 和 YUV 预计可以保持不变。比较经过 RGB 转换后的图像的中心 10% 的 RGB 值。记录 android.shading.mode

测试的 API:

通过:YUV 和 RAW 图像类似,并且其 RMS(信号均方根值)差小于 3.5%。

test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

scene2_a

scene2_a 中包含三个人脸,背景均为灰色,身穿中性服装。这些人脸经过精心选择,涵盖了多种肤色。 为使人脸检测以最佳方式运行,图表必须采用正确的屏幕方向。

scene2_a

scene2_a

test_auto_flash

用于测试在黑暗环境中是否会触发自动闪光灯。通过检查图块图像的中心是否有较大的渐变,验证是否触发了自动闪光灯。如需触发自动闪光灯,必须关闭测试装置中的平板电脑和灯。平板电脑会在测试时被关闭,灯则可以通过 Arduino 控制器自动关闭。场景必须完全保持黑暗,测试才能正常运行。因此,后部平板电脑开口必须完全被场景平板电脑覆盖,并且前部开口必须由开孔和 DUT 手机覆盖,以防止杂质光进入测试装置。

测试的 API:

通过:图块图像的中心有一个较大的渐变,表示自动闪光灯已触发。

test_autoframing

用于测试相机设备的自动取景行为。进行大变焦,使得场景中的人脸都不可见,通过将 CaptureRequest 中的 AUTOFRAMING 设为 True 来启用自动取景模式;并验证当状态收敛时(即 CaptureResult 中的 AUTOFRAMING_STATE 设为 AUTOFRAMING_STATE_CONVERGED),是否可以检测到原始场景中的所有人脸。

测试的 API:

通过:所有三张人脸都检测到。

test_display_p3

用于测试使用 ColorSpaceProfiles API 以 JPEG 格式拍摄 Display P3 图像。测试拍摄的 JPEG 在其标头中是否包含适当的 ICC 色彩特性文件,以及图像是否包含 sRGB 色域之外的颜色。

测试的 API:

通过:JPEG 包含 Display P3 ICC 色彩特性文件和 sRGB 色域之外的颜色。

test_effects

拍摄帧以获取支持的相机效果,并检查这些效果是否正确生成。该测试仅检查效果 OFFMONO,但会保存图像以获取所有受支持的效果。

测试的 API:

通过:拍摄具有 OFF 效果的场景图像,以及效果设置为 MONO 的单色图像。

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

用于测试不同的输出格式组合。

测试的 API:

通过:所有组合都已成功捕获。

test_jpeg_quality

用于测试相机 JPEG 压缩质量。通过 android.jpeg.quality 逐步提高 JPEG 画质,并确保量化表正确更改。

测试的 API:

通过:量化矩阵随着画质的提高而降低(矩阵表示除法因子)。

test_jpeg_quality

Pixel 4 后置摄像头亮度/色度 DQT 矩阵平均值与 JPEG 画质的关系

test_jpeg_quality 失败

测试失败示例

请注意,对于画质极低的图像(jpeg.quality 低于 50),量化矩阵中的压缩量没有提高。

test_num_faces

用于测试执行人脸检测的能力。

测试的 API:

通过:找到三个人脸。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_preview_min_frame_rate

用于测试在黑暗环境中是否正确降低预览帧速率为使此测试正常运行,必须由控制器关闭测试装置中的灯或由测试操作员手动关闭。

测试的 API:

通过:预览帧速率是所请求帧速率范围的最小值,并且帧之间的变化小于测试中设置的绝对公差。

test_reprocess_uv_swap

用于测试 YUV 重新处理不会交换 U 和 V 平面。检测方法为计算经过重新处理的图像与未经重新处理的拍摄图像之间的绝对差总和 (SAD)。如果交换经过重新处理的拍摄图像的输出 U 平面和 V 平面导致 SAD 增加,系统会假定输出具有正确的 U 平面和 V 平面。

测试的 API:

通过:U 平面和 V 平面不交换。

test_reprocess_uv_swap

test_reprocess_uv_swap.png

scene2_b

test_num_faces

用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。

测试的 API:

通过:找到 3 个人脸。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

使用最大的通用 YUV 和 JPEG 格式拍摄两张图片,这些图片的宽高比与最大 JPEG 格式相同,且分辨率不超过 1920x1440。将 jpeg.quality 设置为 100,并捕获双重 surface 请求。将两张图片转换为 RGB 数组,并计算两张图片之间的 3D 均方根 (RMS) 差。

测试的 API:

通过:YUV 和 JPEG 图像类似,并且其 RMS(信号均方根值)差小于 1%。

scene2_c

test_num_faces

用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。

测试的 API:

通过:找到 3 个人脸。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

按照 CDD 中 2.2.7.2 相机一节的规定,为 S 性能等级测试 JPEG 拍摄延迟时间。

通过:根据 CTS 摄像头性能测试在 ITS 照明条件 (3000K) 下对这两种主摄像头的测量,在分辨率为 1080p 的情况下,摄像头 2 的 JPEG 拍摄延迟必须小于 1000 毫秒。

test_camera_launch_perf_class

按照 CDD 中 2.2.7.2 相机一节的规定,为 S 性能等级测试相机启动延迟时间。

通过:根据 CTS 摄像头性能测试在 ITS 照明条件 (3000K) 下对这两种主摄像头的测量,摄像头 2 的启动延迟(从打开摄像头到第一个预览帧)必须小于 600 毫秒。

scene2_d

test_num_faces

用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。

测试的 API:

通过:找到 3 个人脸。

scene2_e

test_continuous_picture

系统会使用拍摄请求第一个设置 android.control.afMode = 4 (CONTINUOUS_PICTURE). 拍摄 50 个 VGA 分辨率帧。

测试的 API:

通过:3A 系统在 50 帧拍摄结束时稳定下来。

test_num_faces

用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。

测试的 API:

通过:找到 3 个人脸。

scene2_f

scene2_f 中有 3 张人脸,背景为白色,衣服为白色。人脸有多种肤色,并且与背景形成鲜明对比。

scene2_f.png

scene2_f

test_num_faces

用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。

测试的 API:

通过:找到 3 个人脸。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scene3

Scene3 使用 ISO12233 图卡,并且大多数测试都使用图卡提取器方法从场景中查找图卡。因此,大多数已保存的图像并不像场景 1、2、4 的图像那样有边框,而是只有图卡。 图表的方向必须正确,图表查找器才能以最佳方式运作。

test_3a_consistency

用于测试 3A 一致性。

测试的 API:

通过:3A 针对曝光、增益、AWB(自动白平衡)和 FD(焦距对焦距离)三者在公差范围内收敛。

test_edge_enhancement

用于测试是否正确应用了 android.edge.mode 参数。为每个边缘模式拍摄未进行重新处理的图像,并返回输出图像的锐度和拍摄结果元数据。处理具有指定边缘模式、感光度、曝光时间、焦距和输出表面参数的拍摄请求。

通过HQ 模式 (2) 比 OFF 模式 (0) 更清晰。FAST 模式 (1) 比 OFF 模式更清晰。HQ 模式比 FAST 模式更清晰,或这两种模式一样清晰。

测试的 API:

受影响的相机参数

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg(快速模式)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg(高画质模式)

test_flip_mirror

按照 CDD 7.5.2 前置摄像头 [C-1-5] 一节测试图像是否面向正确方向。

经过镜像、翻转或旋转处理的图像可以通过中心位置附近的菱形特征进行标识。

通过:图像未经过翻转、镜像或旋转。

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_landscape_to_portrait

用于测试横向传感器,验证横向到纵向覆盖功能是否正常工作。

测试的 API:

通过:测试能够找到具有预期旋转角度的图表(停用横向到纵向覆盖功能时,为 0 度;启用时,为 90 度)。

test_landscape_to_portrait

test_landscape_to_portrait.png

test_lens_movement_reporting

用于测试系统是否正确报告镜头移动标志。连拍 24 张图像,前 12 帧采用最佳焦距(如 3A 所示),后 12 帧采用最小焦距。在第 12 帧左右,镜头会移动,导致锐度下降。随着镜头移到最终位置,锐度最终稳定下来。在锐度介于头几帧(镜头稳定在最佳焦距)中锐度和最后几帧(镜头稳定在最小焦距)中锐度的所有帧中,都应断言镜头移动标志。镜头移动具体发生在哪一帧并不重要:您需要检查的是镜头移动时是否断言了移动标志。

测试的 API:

通过:在锐度发生了变化的帧中,镜头移动标志为 True

失败机理:

  • 只有在锐度不变的帧中,才从 test_log.DEBUG 中断言 lens_moving: True (android.hardware.camera2.CaptureResult#LENS_STATE = 1)
  • 与采用最佳焦距的前几帧或最小焦距的后几帧相比,test_log.DEBUGlens_moving: False (android.hardware.camera2.CaptureResult#LENS_STATE = 0) 的帧存在锐度差异。

test_reprocess_edge_enhancement

用于测试支持的边缘增强重新处理方法是否正常工作。 处理具有指定重新处理边缘模式的拍摄请求,并将不同的模式进行比较,以便在停用了重新处理边缘模式的情况下进行拍摄。

测试的 API:

通过:不同边缘模式的锐度正确无误。HQ(模式 2)比 OFF(模式 0)更清晰,并且不同模式之间的改进类似。

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 由方形内白色背景上的黑色圆圈组成。

scene4

scene4

test_aspect_ratio_and_crop

用于测试图像在图像管道中是否扭曲或意外剪裁。拍摄各种格式的圆圈照片。验证圆圈没有扭曲、圆圈没有从图像中心移开,以及圆圈没有因不同的宽高比或分辨率而错误地改变大小。

测试的 API:

通过:图像未拉伸,图像中心相差不超过 3%,并保留了最大的可能 FoV(视野范围)。

失败机理:

  • 所拍摄图像中的圆圈会被处理管道扭曲。
  • 分辨率较低的图像在图像管道中被二次裁剪,造成高分辨率图像和低分辨率图像的 FoV 不同。
  • 所拍摄图像中的圆圈遭到剪裁,原因是拍摄要求的宽高比极高,减少了图像的高度或宽度。
  • 所拍摄图像中的圆圈中央有反光,看起来没有完全填满。

test_multi_camera_alignment

用于测试与多摄像头系统的摄像头定位相关的摄像头校准参数。使用多摄像头物理子摄像头,通过其中一个物理摄像头拍摄照片。找出圆心。将圆心投影到每个摄像头的世界坐标上。比较各摄像头在世界坐标上的圆心差。将世界坐标重新投影到像素坐标上,并与原始坐标进行比较,以此来检查有效性。比较圆圈的大小,检查摄像头的焦距是否不同。

测试的 API:

通过:与使用相机校准数据和焦距拍摄的图像相比,投影图像中的圆心和大小符合预期。

失败机理:

  • LENS_INTRINSIC_CALIBRATIONLENS_POSE_TRANSLATIONLENS_POSE_ROTATION 是设计值,而不是实际的校准数据。
  • 摄像头系统不适合测试设置。例如,使用 RFoV 测试装置测试广角和超广角摄像头系统。如需了解详情,请参阅相机盒装 ITS 常见问题解答 1

test_preview_aspect_ratio_and_crop

此测试类似于针对静态拍摄图像的 test_aspect_ratio_and_crop 测试,用于检查支持的预览格式,以确保视频画面不会被不当拉伸或剪裁。验证圆圈的宽高比是否不变、剪裁后的图像是否将圆圈保持在帧的中心位置,以及圆圈大小在固定的格式或不同的分辨率下是否不会改变(视野范围检查)。

测试的 API:

通过:图像未拉伸,图像中心相差不超过 3%,并保留了最大的可能 FoV(视野范围)。

test_preview_stabilization_fov

检查支持的预览画面尺寸,以确保适当剪裁 FoV。该测试会拍摄两个视频,一个是将预览防抖功能设为 ON,另一个是将预览防抖功能设为 OFF。系统会从每个视频中选出一帧有代表性的画面,对其进行分析,以确保两个视频的 FoV 变化符合规范要求。

测试的 API:

通过:圆圈宽高比保持大致不变,圆圈的中心位置保持不变,并且圆圈的大小变化幅度不超过 20%。

test_video_aspect_ratio_and_crop

使用所有视频格式拍摄一个正方形内的圆圈的照片。提取关键帧,并验证圆圈的宽高比是否不变、剪裁后的图像是否将圆圈保持在中心位置,以及圆圈大小在固定的格式或不同的分辨率下是否不会改变(视野范围检查)。

测试的 API:

通过:视频帧未拉伸,帧中心变化不超过 3%,并保留了可能的最大 FoV(视野范围)。

scene5

Scene5 要求拍摄光线均匀的灰色场景。这需要在相机镜头上放置漫射器。我们建议使用以下漫射器:www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168

如需准备场景,请在摄像头前方安装漫射器,然后将摄像头对准 2000 勒克斯左右的光源。为 scene5 拍摄的图像需要没有明显特征的漫射光。以下是示例图片:

scene5

scene5 拍摄图像

test_lens_shading_and_color_uniformity

用于测试是否适当地应用了镜头着色校正,以及单色均匀场景的颜色是否均匀分布。使用自动 3A 对 YUV 帧执行此测试。系统会根据 y 通道评估镜头着色。测量指定的每个样本块的平均 y 值,并通过与中心 y 值进行比较来确定测试是通过还是失败。颜色均匀测试在 r/g 和 b/g 空间内进行评估。

测试的 API:

通过:在图像的指定半径内,r/g 和 b/g 值的方差必须小于 20% 才能通过测试。

scene6

Scene6 是一个由小圆圈组成的网格,有个角中有一个方形,表示方向。需要使用小圆圈测试大范围内的缩放功能。

scene6

scene6

test_in_sensor_zoom

用于测试相机传感器内变焦功能的行为,该功能可生成剪裁过的 RAW 图像。

将数据流用例设置为 CROPPED_RAW 后,该测试将在变焦范围内拍摄两幅图像,即全视野范围 (FoV) RAW 图像和剪裁后的 RAW 图像。该测试会将图像转换为 RGB 数组,将完整尺寸的剪裁后 RAW 图片缩小为 SCALER_RAW_CROP_REGION 报告的大小,并计算两幅图像之间的 3D 均方根 (RMS) 差。

测试的 API:

通过:经过缩小的剪裁后 RAW 图像和完整尺寸 FoV RAW 图像之间的 3D 均方根 (RMS) 差小于 1%。

test_zoom

用于测试相机变焦行为。在变焦范围内拍摄照片,并在相机拉近时查看圆圈是否变大。

测试的 API:

通过:捕获的圆圈的相对大小与请求的缩放比例相对照是准确的,以确保相机正确缩放。

test_zoom

test_zoom,用于找到最接近中心的圆圈轮廓。

test_low_latency_zoom

用于测试相机低延迟变焦行为。使用 android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) 在变焦范围内拍摄图像,并检查输出图像中的圆圈与拍摄图像元数据中的缩放比例是否匹配。

测试的 API:

通过:对照缩放比例结果元数据,所拍摄圆圈的相对大小是准确的。

test_preview_video_zoom_match

用于测试在录制和变焦时,视频预览和视频输出能否显示和录制相同的输出。计算在不同缩放比例下最靠近中心的圆圈的大小,并检查圆圈的大小是否随着缩放比例的增加而增大。

测试的 API:

通过:对照视频和预览中请求的缩放比例,所拍摄圆圈的相对大小是准确的。

VGA_640x480_key_frame.png

VGA_640x480_key_frame.png(变焦前)

preview_640x480_key_frame.png

preview_640x480_key_frame.png(变焦前)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png(变焦后)

preview_640x480_key_frame_zoomed.png

preview_640x480_key_frame.png(变焦后)

scene_extensions

scene_extensions 测试适用于相机扩展程序,必须使用相机盒装 ITS,因为它们需要对测试环境进行精确控制。

scene_hdr

scene_hdr 场景左侧是人像,右侧是低对比度二维码。

scene_hdr

scene_hdr

test_hdr_extension

测试 HDR 扩展程序。在启用和未启用该扩展程序的情况下进行拍摄,并检查扩展程序是否让二维码更容易被检测到。

测试的 API:

通过:HDR 扩展程序可减少检测二维码所需的对比度变化次数,或减少整个二维码的梯度。

scene_night

scene_night 场景由一个白色圆圈和内部四个较小的圆圈组成,背景均为黑色。右上角的小圆圈比其他小圆圈颜色更深,以指示方向。

scene_night

scene_night

test_night_extension

用于测试夜间模式扩展程序。在启用和未启用该扩展程序的情况下进行拍摄,并检查以下方面:

  • 启用夜间模式扩展程序后,拍摄用时更长。
  • 启用夜间模式扩展程序后,拍摄画面更亮,或者场景伪影的外观得到改善。

测试的 API:

通过:与未启用夜间模式扩展程序的拍摄相比,启用夜间模式扩展程序的拍摄至少要多花 0.5 秒。拍摄亮度必须至少提高 10%,或者场景中的灰点必须比周围圆圈的中心低 20 个像素值。

sensor_fusion

传感器融合测试需要手机在棋盘格图案前沿特定方向移动。为获得最佳效果,务必将测试图表放平。未平放的图表会影响许多测试的旋转计算。sensor_fusion 测试可以通过传感器融合盒来自动执行。

棋盘格

棋盘格图像

test_multi_camera_frame_sync

计算棋盘格内正方形的角度来确定时间戳,进而测试逻辑摄像头捕获的帧时间戳是否在 10 毫秒以内。

测试的 API:

通过:当手机旋转时,每个摄像头拍摄的图像之间的角度不会发生明显变化。

test_preview_stabilization

用于测试使用了防抖功能的预览视频的旋转角度是否小于陀螺仪的旋转角度。

测试的 API:

通过:帧间的最大旋转角度小于陀螺仪旋转角度的 70%。

以下是启用和不启用防抖功能的视频示例。

  • 启用防抖功能的视频示例

  • 未启用防抖功能的视频示例

test_sensor_fusion

针对 AR 和 VR 应用测试相机和陀螺仪之间的时间戳差异。手机在棋盘格图案前面旋转 90 度 10 次。旋转一次再回到原位大约用时 2 秒。如果没有陀螺仪或未启用时间戳来源 REALTIME 参数,则会跳过此测试。

test_sensor_fusion 测试会生成很多图表。在调试方面,最重要的两个图表为:

  • test_sensor_fusion_gyro_events:在测试期间显示手机的陀螺仪事件。如果在 x 和 y 方向上发生移动,则意味着手机在安装板上未架稳,这会降低通过测试的概率。图表中的周期数取决于保存帧时的写入速度。

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations:显示陀螺仪事件和相机事件的对齐情况。此图表所示的相机和陀螺仪之间的匹配移动的误差必须限制在 +/-1 毫秒内。

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

测试的 API:

通过:根据 CDD 7.3.9 高保真传感器 [C-2-14] 一节,相机和陀螺仪时间戳的偏移量小于 1 毫秒。

失败机理:

  • 偏移错误:相机陀螺仪偏移未正确校准到 +/-1 毫秒的范围内。
  • 丢帧:管道速度不够快,无法连续拍摄 200 帧。
  • 套接字错误:adb 无法可靠地连接到 DUT 足够长的时间来执行测试。
  • 图表未平放。在 test_sensor_fusion_plot_rotations 曲线图中,陀螺仪和摄像头旋转的帧数变化很大,因为摄像头旋转经过图表中不平整的部分。
  • 摄像头未平放。test_sensor_fusion_gyro_events 曲线图显示了 X 平面和 Y 平面的移动情况。这种故障在前置摄像头中更为常见,因为后置摄像头通常与手机机身的其余部分有一个凸起,在将手机后部安装到安装板上时会产生倾斜。

test_video_stabilization

用于测试使用了防抖功能的视频的旋转角度是否小于陀螺仪的旋转角度。

测试的 API:

通过:帧间的最大旋转角度小于陀螺仪旋转角度的 60%。

以下是启用和不启用防抖功能的视频示例。

  • 启用防抖功能的视频示例

  • 未启用防抖功能的视频示例

test_led_snapshot

用于测试 LED 快照是否会使图像饱和或产生色偏。

此测试在传感器融合盒中添加了一个照明控制器来控制灯光。将灯光设置为 OFF 后,测试将 AUTO_FLASH 模式设置为 ON 进行拍摄。在此拍摄期间,该测试会在 aePrecapture 触发器设置为 START 的情况下运行预拍摄序列,并将拍摄 intent 设置为 Preview 以使用闪光灯进行拍摄。

由于拍摄图像有一个明显的热点,因此该测试会计算整个拍摄的闪光图像平均值,并验证该值是否在 (68, 102) 范围内。为了检查图像是否达到合理的白平衡,该测试会计算 R/G 和 B/G 比率,并验证这些比率是否在 0.95 和 1.05 范围内。

测试的 API:

通过:R/G 和 B/G 比率在 0.95 和 1.05 之间。闪光图像平均值在 (68, 102) 范围内。