相机 ITS 测试

本页面全面列出了相机图像测试套件 (ITS) 下的各项测试,相机图像测试套件是 Android 兼容性测试套件 (CTS) 验证程序的一部分。ITS 测试是功能测试,这意味着它们不衡量图像质量,而是衡量所有已宣传的相机功能是否按预期运行。开发者和测试人员可以通过本文档了解各项测试的作用以及如何调试测试失败。

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

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

请参阅各个部分,了解每个场景的描述。

scene0

Scene0 测试不需要特定的场景信息。但是,手机在进行陀螺仪和振动测试时必须保持静止。

test_jitter

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

已测试的 API

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

test_jitter_plot.png

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

test_metadata

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

已测试的 API

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

test_request_capture_match

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

已测试的 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 收敛。有关相机测试装置的更详细说明,请参阅 Camera ITS-in-a-box

scene1

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

test_ae_precapture_trigger

测试使用预拍摄触发器时的 AE 状态机。捕获五个手动请求,AE 处于禁用状态。最后一个请求具有 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_capture

验证整个拍摄管道是否可以跟上全尺寸拍摄和 CPU 时间的速度。

已测试的 API

通过:拍摄一连串全尺寸图像,检查是否丢帧以及图像亮度。

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) 补偿。此测试以八个步长增加曝光,并检查测得的亮度与预期亮度。预期值根据未应用 EV 补偿的图像的图像亮度计算得出,如果计算值超过实际图像值范围,则预期值将饱和。如果预期值和测得的值不匹配,或者图像在五个步长内过度曝光,则测试失败。

已测试的 API

通过:图像显示曝光增加,但在五个步长内没有过度曝光。

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

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

已测试的 API

通过:亮度随 EV 补偿设置的增加而增加,并且为每个 EV 补偿设置捕获的八帧具有稳定的亮度值。

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure_x_iso

测试当 ISO 和曝光时间变化时是否实现了恒定的曝光。拍摄一系列照片,这些照片的 ISO 和曝光时间经过选择以相互平衡。结果应具有相同的亮度,但在整个序列中,图像应变得更嘈杂。验证样本像素平均值是否彼此接近。确保图像未钳制为 0 或 1(这将使它们看起来像水平线)。也可以通过在配置文件中设置 debug 标志来使用 RAW 图像运行此测试。

已测试的 API

通过:图像具有相同的亮度,但随着 ISO 的升高而变得更嘈杂。当 ISO*曝光 的值在测试的增益空间内恒定时,RGB 平面是平坦的。

失败机制

  • test_exposure_plot_means.png 中,随着增益乘数值(x 轴)的增加,归一化的 RGB 平面平均值(y 轴)开始偏离低增益乘数值。

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 的有限设备上也能通过。此测试检查 YUV 图像一致性,而帧速率检查在 CTS 中。

已测试的 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 = 统一,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(红色提升)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg(蓝色提升)

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:HQ,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_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

通过: 快速 >= 关闭,高质量 >= 快速,高质量 >> 关闭

Typical SNR vs NR_MODE plot

典型的 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_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_num_faces

测试人脸检测。

已测试的 API

通过: 找到三张人脸。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

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 格式捕获两张图像,其纵横比与不超过 1920x1440 分辨率的最大 JPEG 格式相同。将 jpeg.quality 设置为 100 并捕获双表面请求。将两张图像都转换为 RGB 数组,并计算两张图像之间 3D 均方根 (RMS) 差异。

此外,此测试验证所有受支持的流用例的 YUV 输出与使用 STILL_CAPTURE 用例的 YUV 输出合理地相似。

已测试的 API

通过: STILL_CAPTURE 用例的 YUV 和 JPEG 图像的 RMS(信号的均方根值)差异小于 3%;所有受支持用例的 YUV 图像与 STILL_CAPTURE 用例的 YUV 图像的 RMS 差异小于 10%。

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 捕获延迟。

通过: 对于主摄像头,在 ITS 照明条件 (3000K) 下通过 ITS 相机 PerformanceTest 测量的 1080p 分辨率,必须具有 camera2 JPEG 捕获延迟 < 1000 毫秒。

test_camera_launch_perf_class

根据 CDD 中 第 2.2.7.2 节“相机” 中的规定,测试 S 性能等级的相机启动延迟。

通过: 对于主摄像头,在 ITS 照明条件 (3000K) 下通过 CTS 相机 PerformanceTest 测量的 camera2 启动延迟(打开相机到第一帧预览帧)必须 < 600 毫秒。

test_default_camera_hdr

测试对于性能等级 15,默认相机捕获是否为 Ultra HDR,如 CDD 的 第 2.2.7.2 节“相机” 中所规定。

通过: 对于性能等级 15 设备,默认相机包捕获必须为 Ultra HDR。

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 具有三张人脸,背景为白色,服装为白色。这些人脸具有广泛的肤色范围,并且与背景形成高对比度。

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_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_imu_drift

测试惯性测量单元 (IMU) 在设备静止并捕获高清预览时,是否在 30 秒内具有稳定的输出。

已测试的 API

通过

  • 陀螺仪的漂移在测试时间内小于 0.01 弧度。
  • 陀螺仪读数的方差在测试时间内小于 1E-7 rad2/s2/Hz。
  • 旋转向量的漂移在测试时间内小于 0.01 弧度。
  • (尚未强制要求)陀螺仪的漂移小于每秒 1 度。

test_imu_drift_gyro_drift.png

test_imu_drift_gyro_drift.png

test_imu_drift_rotation_vector_drift.png

test_imu_drift_rotation_vector_drift.png

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

失败机制

  • lens_moving: True (android.hardware.camera2.CaptureResult#LENS_STATE = 1) 在 test_log.DEBUG 中仅在清晰度未变化的帧中声明。
  • 与最佳焦距的前几帧或最小焦距的最后几帧相比,test_log.DEBUG 中具有 lens_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 中的测试可能对对齐敏感,因此从 15 开始,您可以使用工具目录中的 check_alignment.py 来启用 DUT 和图表对齐检查。

scene4

scene4

test_30_60fps_preview_fov_match

测试 30 FPS 和 60 FPS 预览视频是否具有相同的 FoV。该测试捕获两个视频,一个为 30 FPS,另一个为 60 FPS。从每个视频中选择一个代表性帧并进行分析,以确保两个视频中的 FoV 变化在规格范围内。测试圆的纵横比是否保持恒定,圆的中心是否保持稳定,以及圆的半径是否保持恒定。

已测试的 API

通过: 图像未拉伸,图像中心差异不超过 3%,并且 30 FPS 和 60 FPS 视频之间的最大纵横比变化不超过 7.5%

失败机制

  • 30 FPS 视频中的圆与 60 FPS 视频中的圆在尺寸上差异很大。
  • 捕获图像中的圆被处理管道扭曲。
  • 由于极端的纵横比捕获请求减小了图像的高度或宽度,因此捕获图像中的圆被裁剪。
  • 捕获图像中的圆中心有反射,并且看起来没有完全填充。

test_aspect_ratio_and_crop

测试图像管道中的图像是否被扭曲或意外裁剪。拍摄所有格式的圆的图片。验证圆是否未扭曲,圆是否未从图像中心移动,以及圆的尺寸是否未随不同的纵横比或分辨率错误地变化。

已测试的 API

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

失败机制

  • 相机未与平板电脑上显示的场景中心的圆对齐。
  • 捕获图像中的圆被处理管道扭曲。
  • 较低分辨率的图像在图像管道中被双重裁剪,从而在高分辨率和低分辨率图像之间创建不同的 FoV。
  • 由于极端的纵横比捕获请求减小了图像的高度或宽度,因此捕获图像中的圆被裁剪。
  • 捕获图像中的圆中心有反射,并且看起来没有完全填充。

test_multi_camera_alignment

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

已测试的 API

通过: 与使用摄像头校准数据和焦距捕获的图像相比,投影图像中的圆心和尺寸符合预期。

失败机制

  • LENS_INTRINSIC_CALIBRATIONLENS_POSE_TRANSLATIONLENS_POSE_ROTATION 是设计值,而不是实际的校准数据。
  • 摄像头系统不适用于测试设置。例如,使用 RFoV 测试装置测试广角和超广角摄像头系统。有关更多信息,请参阅 Camera ITS-in-a-box FAQ1

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 中的测试可能对对齐敏感,因此从 15 开始,您可以使用工具目录中的 check_alignment.py 来启用 DUT 和图表对齐检查。

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) 差异小于测试中设置的阈值。

test_zoom

测试相机变焦行为。在变焦范围内进行捕获,并检查圆圈是否随着相机放大而变大。对于每种格式(YUV、JPEG),使用相同的相机捕获会话来收敛 3A 并进行捕获。

已测试的 API

通过: 捕获的圆的相对尺寸相对于请求的变焦比率是准确的,以确保相机正在正确变焦。

test_zoom

test_zoom 以找到最接近中心的圆的轮廓。

test_low_latency_zoom

测试相机低延迟变焦行为。使用 android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) 在变焦范围内进行捕获,并检查输出图像中的圆圈是否与捕获元数据中的变焦比率匹配。使用相同的相机捕获会话来收敛 3A 并进行捕获。

已测试的 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 (变焦后)

test_preview_zoom

测试每个预览帧的变焦比率是否与相应的捕获元数据匹配。该测试在变焦范围内获取预览帧,并找到最接近中心的圆的轮廓。然后,该测试检查选定的圆是否变大,以及当相机放大时,圆心是否远离图像中心。

已测试的 API

通过: 对于所有预览帧,选定圆的相对尺寸对于相应捕获结果的报告变焦比率是准确的。对于所有预览帧,选定圆与图像中心之间的相对距离对于相应捕获结果的报告变焦比率是准确的。

test_zoom

test_preview_zoom 图像显示最接近中心的选定圆

test_session_characteristics_zoom

测试 CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION 中列出的所有受支持会话配置的变焦比率范围。对于这些配置中的每一个,如果 CameraDeviceSetup#isSessionConfigurationSupported 返回 true,则测试验证 CameraDeviceSetup#getSessionCharacteristics 中返回的变焦比率范围是否可以达到。

已测试的 API

通过: 对于 CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION 中列出的每个受支持的 SessionConfiguration,最小和最大变焦比率都可以达到。

scene7

Scene7 是一个矩形框架,分为四个相等的象限,每个象限填充不同的颜色。矩形中心是一个倾斜边缘图表,用于清晰度检查。四个 ArUco 标记与矩形的四个外角对齐,以帮助获得不同变焦比率下主矩形框架的准确坐标。

scene7

scene7

test_multi_camera_switch

此测试验证在不同变焦比率下进行预览录制期间,超广角 (UW) 镜头和广角 (W) 镜头之间的切换是否产生相似的 RGB 值。

该测试在预定义的范围内使用不同的变焦比率来执行动态预览录制,并识别物理摄像头发生变化的点。此点标志着从 UW 镜头到 W 镜头的交叉。

对在交叉点和交叉点之前捕获的帧进行自动曝光 (AE)、自动白平衡 (AWB) 和自动对焦 (AF) 分析。

AE 检查确保 UW 和 W 镜头图像的亮度变化在预期范围内。AWB 检查验证 UW 和 W 镜头图像的 R/G 和 B/G 比率是否在阈值范围内。AF 检查基于 UW 和 W 镜头图像之间的平均梯度幅度评估清晰度估计值。

已测试的 API

通过: 要使测试通过,AE、AWB 和 AF 检查都必须通过。以下是每个检查的标准

  • AE 检查:UW 和 W 镜头图像之间的亮度变化必须小于 0.5%。
  • AWB 检查:UW 和 W 镜头图像的 R/G 和 B/G 值之间的差异必须小于 0.5%。
  • AF 检查:UW 和 W 镜头图像之间的图像清晰度变化必须小于 2%。

scene8

Scene8 是一个矩形框架,分为四个相等的区域,每个区域都包含一张使用不同曝光拍摄或叠加不同颜色阴影(蓝色阴影、增加曝光、减少曝光、黄色阴影)的人像。四个 ArUco 标记与矩形的四个外角对齐,以获得主矩形框架的准确坐标。

scene8

scene8

test_ae_awb_regions

测试在不同自动曝光 (AE) 和自动白平衡 (AWB) 区域进行预览录制时,RGB 和亮度值是否不同。

该测试记录一个 8 秒的预览录制,在每个象限上执行 AE 和 AWB 测光,每个象限持续两秒。然后,该测试从每个区域的预览录制中提取一帧,并使用提取的帧执行以下 AE 和 AWB 检查

  • AE 检查:验证对曝光减少区域进行测光的帧的亮度值比对曝光增加区域进行测光的帧的亮度值高出 1% 以上。这验证了在对黑暗区域进行测光时,图像会变亮。
  • AWB 检查:验证蓝色测光区域的帧中红色与蓝色之比(图像的平均 RGB 值)比黄色测光区域的帧中红色与蓝色之比高出 2% 以上。这验证了在对黄色(暖色)或蓝色(冷色)区域进行测光时,图像具有平衡的 RGB 值。

已测试的 API

通过: AE 和 AWB 检查均通过。

失败机制

  • 准确检测所有四个 ArUco 标记对于此测试至关重要。如果初始检测失败,系统将尝试使用图像的黑白版本进行第二次检测。

    ArUco markers misalignment

scene9

Scene9 由数千个随机大小和颜色的圆圈组成,以创建一个具有极低重复性的场景,从而对 JPEG 压缩算法施加压力。

scene9

scene9

test_jpeg_high_entropy

测试相机 JPEG 压缩是否在具有高熵且 JPEG 质量因子设置为 100% 的 scene9 上工作。增加变焦系数以确保平板电脑上显示的场景填充相机视场。

已测试的 API

通过: JPEG 文件已正确压缩、写入和从磁盘读取。

test_jpeg_quality

测试相机 JPEG 压缩质量。逐步调整 JPEG 质量通过 android.jpeg.quality,并确保量化表正确更改。

已测试的 API

通过: 量化矩阵随质量的提高而减小。(矩阵表示除法因子。)

test_jpeg_quality

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

test_jpeg_quality failed

失败的测试示例

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

scene_video

scene_video 场景是一个视频场景。它由四个不同颜色的圆圈组成,这些圆圈以不同的帧速率在白色背景上前后移动。

scene_video

test_preview_frame_drop

测试在动态场景中是否保持了请求的预览帧速率。此测试在所有向第三方应用公开的摄像头上运行。

已测试的 API

通过: 预览帧速率处于请求的帧速率范围的最大值,并且连续帧之间的平均变化小于测试中设置的相对容差。

scene_extensions

scene_extensions 测试用于相机扩展,必须使用 Camera ITS-in-a-Box,因为它们需要精确控制测试环境。此外,必须控制所有漏光。这可能需要用滴布覆盖测试装置、DUT 和平板电脑,并消除 DUT 前屏幕的漏光。

scene_hdr

scene_hdr 场景由左侧的人像和右侧的低对比度 QR 码组成。

scene_hdr

scene_hdr

test_hdr_extension

测试 HDR 扩展。在启用和未启用扩展的情况下进行捕获,并检查扩展是否使 QR 码更易于检测。

已测试的 API

通过: HDR 扩展减少了检测 QR 码所需的对比度变化次数,或减少了 QR 码上的渐变。

scene_low_light

scene_low_light 场景由黑色背景上不同深浅灰色的正方形网格组成,并且正方形网格由红色轮廓线限定。正方形以希尔伯特曲线方向排列。

scene_low_light

scene_low_light

test_night_extension

测试 夜间扩展。在启用扩展的情况下进行捕获,并执行以下操作

  • 检测 20 个正方形的存在
  • 计算每个正方形界定的亮度
  • 根据希尔伯特曲线网格方向,计算前 6 个正方形的平均亮度值
  • 计算连续正方形的亮度值差异(例如,正方形 2 - 正方形 1),直到正方形 5 和 6(正方形 6 - 正方形 5),并找到五个计算出的差异的平均值。

已测试的 API

通过: 前 6 个正方形的平均亮度值必须至少为 85,并且连续正方形(直到正方形 5 和 6)的平均亮度值差异必须至少为 17。

以下亮度图显示了通过测试的结果。

scene_low_light_night_pass

test_low_light_boost_extension

测试 低光增强 AE 模式。如果 Camera2 支持低光增强 AE 模式,则将为 Camera2 执行此测试。如果支持夜间模式相机扩展并且该扩展支持低光增强 AE 模式,则还将为夜间模式相机扩展执行此测试。此测试将 AE 模式设置为低光增强,从预览中获取一帧,并执行以下操作

  • 检测 20 个框的存在
  • 计算每个框界定的亮度
  • 根据希尔伯特曲线网格方向,计算前 6 个正方形的平均亮度值
  • 计算连续正方形的亮度值差异(例如,正方形 2 - 正方形 1),直到正方形 5 和 6(正方形 6 - 正方形 5),并找到五个计算出的差异的平均值。

已测试的 API

Pass: 前 6 个方块的平均亮度值必须至少为 70,并且连续方块(直至第 5 和第 6 个方块)之间的平均亮度值差异必须至少为 17。

scene_flash

scene_flash 测试需要在传感器融合箱中黑暗的场景下进行。

test_auto_flash

测试在黑暗场景中,后置和前置摄像头是否会触发自动闪光。对于前置摄像头,自动闪光使用屏幕照亮场景,而不是物理闪光单元。此测试通过检查启用自动闪光后,图块图像的中心是否更亮来验证自动闪光是否已触发。要触发自动闪光,必须关闭测试装置中的灯。可以使用 Arduino 控制器自动关闭灯。场景必须完全黑暗,测试才能正常工作。Jetpack Camera App (JCA) 必须在测试前安装在设备上。后置摄像头的自动闪光依赖于 AE 状态触发,但前置摄像头的自动闪光不依赖于 AE,并且始终触发。

已测试的 API

Pass: 对于所有摄像头,启用自动闪光后,图块图像的中心都比原始场景图像更亮。

test_flash_strength

测试 SINGLE 模式下的闪光强度控制是否正确实现。

验证设备在使用 SINGLE 模式的相机期间是否支持闪光强度控制,闪光强度是否会随着请求的不同强度级别而变化。验证闪光强度控制是否适用于不同的 AE_MODES。例如,如果自动曝光模式为 ONOFF,则闪光强度级别会对亮度产生影响;如果模式为 ON_AUTO_FLASH,则闪光强度级别对亮度没有影响。要进行测试,必须关闭测试装置中的灯。可以使用 Arduino 控制器自动关闭灯。场景必须完全黑暗,测试才能正常工作。

已测试的 API

通过

当自动曝光模式为 ONOFF 时,图像块的亮度会随着闪光强度级别从无闪光增加到 FLASH_SINGLE_STRENGTH_MAX_LEVEL 而增加。当自动曝光模式为 ON_AUTO_FLASH 时,随着闪光强度级别从无闪光增加到 FLASH_SINGLE_STRENGTH_MAX_LEVEL,图像块的亮度差异在容差范围内。

test_led_snapshot

测试 LED 快照不会使图像饱和或染色。

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

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

已测试的 API

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

test_preview_min_frame_rate

测试预览帧率在黑暗场景中是否正确降低。为了使此测试正常工作,测试装置中的灯必须由控制器关闭或由测试操作员手动关闭。

已测试的 API

Pass: 预览帧率处于请求的帧率范围的最小值,并且帧之间的变化小于测试中设置的绝对容差。

test_torch_strength

测试 TORCH 模式下的闪光强度控制是否正确实现。

验证设备在使用 TORCH 模式的相机期间是否支持闪光强度控制,手电筒强度是否会随着请求的不同强度级别而变化。验证闪光强度控制是否适用于不同的 AE_MODES。例如,如果自动曝光模式为 ONOFF,则闪光强度级别会对亮度产生影响;如果模式为 ON_AUTO_FLASH,则闪光强度级别对亮度没有影响。验证在模拟视频拍摄会话的连拍期间,手电筒强度是否保持不变。要进行测试,必须关闭测试装置中的灯。可以使用 Arduino 控制器自动关闭灯。场景必须完全黑暗,测试才能正常工作。

已测试的 API

通过

当自动曝光模式为 ONOFF 时,图像连拍块的亮度会随着闪光强度级别从无闪光增加到 FLASH_TORCH_STRENGTH_MAX_LEVEL 而增加。当自动曝光模式为 ON_AUTO_FLASH 时,随着闪光强度级别从无闪光增加到 FLASH_TORCH_STRENGTH_MAX_LEVEL,图像连拍块的亮度差异在容差范围内。

sensor_fusion

传感器融合测试需要在棋盘格图案和 ArUco 标记前进行特定的手机移动。为获得最佳效果,请确保测试图表平放安装。不平的图表会影响许多测试的旋转计算。图表必须通过以 17"x17" (43x43 厘米) 打印来填充传感器融合箱的背面。sensor_fusion 测试可以使用 传感器融合箱 自动化进行。

Sensor fusion chart

传感器融合图表

Sensor fusion chart in Rig

填充传感器融合箱背面的传感器融合图表

test_lens_intrinsic_calibration

测试当镜头因光学图像稳定 (OIS) 而移动时,镜头固有参数的光学中心是否会发生变化。如果支持镜头固有参数样本,则测试当镜头因光学图像稳定 (OIS) 而移动时,镜头固有参数样本的光学中心是否会发生变化。

已测试的 API

Pass: 镜头固有参数的光学中心变化了一个像素或更多像素。如果支持镜头固有参数样本,则镜头固有参数样本的光学中心变化了一个像素或更多像素。

test_lens_intrinsic_calibration_example.png

test_lens_intrinsic_calibration 图表的示例,显示了每帧像素中主点的变化

test_multi_camera_frame_sync

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

已测试的 API

Pass: 当手机旋转时,来自每个摄像头的图像之间的角度没有明显变化。

test_preview_distortion

测试在各种变焦级别下拍摄的每个预览帧中,畸变是否都得到校正。对于每个预览帧,测试基于相机内在参数和外在参数计算理想点。在示例图像中,理想点以绿色显示;实际点以红色显示。畸变误差根据实际点和理想点之间的均方根 (RMS) 像素距离计算。图像上的绿色和红色高亮用于直观地检测畸变误差区域。

test_preview_distortion_example.jpg

带有理想点(绿色)和实际点(红色)的棋盘格图像

已测试的 API

Pass: 每个预览帧的标准化畸变误差都小于测试中设置的阈值。

test_preview_stabilization

测试稳定的预览视频的旋转度小于陀螺仪。

已测试的 API

Pass: 帧的最大角度旋转度小于陀螺仪旋转度的 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

Pass: 根据 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

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

以下是带有和不带稳定功能的示例视频。

  • 带有稳定功能的示例视频

  • 不带稳定功能的示例视频

feature_combination

feature_combination 测试验证当同时启用多个相机功能时,这些功能是否正常工作。这些测试使用与 传感器融合场景 中使用的棋盘格图像相同的图像。

test_feature_combination

测试相机设备支持的不同流组合、预览稳定功能、目标 FPS 范围、10 位 HDR 视频和 Ultra HDR 的所有组合。此测试非常消耗内存,因此我们建议使用至少 128 GB RAM 的主机。

对于 Android 15 及更高版本,配置文件包含一个 log_feature_combo_support 字段,该字段默认为 False。当 log_feature_combo_support 字段设置为 True 时,测试运行所有受支持的功能组合,并将结果记录到 proto 文件中,而不会使测试失败。对于合规性测试,log_feature_combo_support 字段必须设置为 False

已测试的 API

Pass: 对于每个受支持的功能组合

  • 如果预览稳定功能已开启,则预览流是稳定的。
  • 预览帧率落在配置的 AE_TARGET_FPS_RANGE 范围内。
  • 录制的预览流的色彩空间与设置的色彩空间匹配。
  • Ultra HDR 拍摄具有有效的增益图。