本页面提供了相机图像测试套件 (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:缩放
- scene7:多相机开关
- scene8:AE 和 AWB 区域测光
- scene9:JPEG 压缩
- scene_extensions:相机扩展
- scene_flash:自动闪光,最小帧速率
- scene_video:丢帧
- sensor_fusion:相机/陀螺仪时间偏差
- feature_combination:功能组合
有关每个场景的说明,请参阅各个部分。
scene0
scene0 测试不需要具体的场景信息。但是,执行陀螺仪和振动测试时,手机必须静止不动。
test_jitter
用于测量相机时间戳中的抖动。
测试的 API:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
通过:帧之间至少有 30 毫秒的增量。
test_jitter_plot.png(注意较小的 y 轴范围。此图中的抖动实际上较小。)
test_metadata
用于测试元数据条目的有效性。查看拍摄结果和相机特征对象。此测试使用 auto_capture_request
曝光值和增益值,因为图像内容并不重要。
测试的 API:
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
通过:硬件级别、rollingShutterSkew
、frameDuration
标记、timestampSource
、croppingType
、blackLevelPattern
、pixel_pitch
、FoV、超焦距存在并且具有有效值。
test_request_capture_match
用于通过读取拍摄元数据来测试设备是否写入了正确的曝光值和增益值。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
通过:所有照片中的请求和拍摄元数据值均一致。
test_sensor_events
用于测试通告支持传感器融合的设备是否会查询并输出传感器事件。传感器应为加速度计、陀螺仪和磁力计。此测试仅在屏幕开启时有效,这意味着设备不处于待机模式。
测试的 API:
通过:收到每个传感器的事件。
test_solid_color_test_pattern
用于测试是否会在屏蔽相机时正确生成纯色测试图案。 如果支持相机屏蔽功能,则必须支持纯色测试图案。 如果不支持相机屏蔽功能,则只会在通告该功能时测试纯色测试图案。
如果支持 RAW 图像,也会测试颜色分配。所测试的颜色为黑色、白色、红色、蓝色和绿色。对于不支持 RAW 图像的相机,仅测试黑色。
测试的 API:
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
通过:支持的纯色测试图案是正确的颜色,且图像中的差异较小。
test_test_pattern
用于测试 android.sensor.testPatternMode
参数是否拍摄了每个有效测试图案的帧,并检查是否针对纯色和彩条正确生成了帧。此测试包括以下步骤:
- 拍摄所有受支持的测试图案的图像。
- 对纯色测试图案和彩条执行简单的正确性检查。
测试的 API:
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
通过:正确生成支持的测试图案。
test_test_patterns_2.jpg
test_tonemap_curve
用于使用线性色调映射来测试从 RAW 到 YUV 的测试图案转换。此测试使用需要 android.sensor.testPatternMode = 2
(COLOR_BARS) 为色调映射转换生成完美的图像图案。确保流水线采用具有线性色调映射和理想图像输入的适当颜色输出(依赖于 test_test_patterns
)。
测试的 API:
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
通过:YUV 和 RAW 看起来彼此相似。
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
用于测试图像和移动传感器事件是否在同一时域中。
测试的 API:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.hardware.Sensor#TYPE_GYROSCOPE
通过:移动时间戳介于两个图像时间戳之间。
test_vibration_restriction
用于测试设备的振动是否符合预期。
测试的 API:
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.os.Vibrator
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
通过:相机音频限制 API 将设备设置为静音后,设备不会振动。
scene1
scene1 是一种灰色图。灰色图表必须覆盖相机视野范围的中心 30%。该灰色图预计会适度质询 3A(自动曝光、自动白平衡和自动对焦),因为中心区域没有任何特征。不过,拍摄请求会指定整个场景,其中包含足够 3A 进行收敛的特征。
RFoV 相机可以在 WFoV 或 RFoV 测试装置内进行测试。如果在 WFoV 测试装置内测试 RFoV 相机,该图会按 ⅔ 的比例缩放,以确保 FoV 中灰色图的部分边界能够帮助 3A 进行收敛。 如需详细了解相机测试装置,请参阅相机盒装 ITS。
scene1:全尺寸图(左)。按 ⅔ 的比例缩放后的图(右)。
test_ae_precapture_trigger
用于在使用预拍触发器时测试 AE 状态机。在 AE 停用的情况下拍摄 5 个手动请求。最后一个请求具有 AE 预拍触发器,该触发器应被忽略,因为 AE 已被停用。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
通过:AE 会收敛。
test_auto_vs_manual
用于测试自动拍摄的照片和手动拍摄的照片看起来是否相同。
测试的 API:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
通过:每个拍摄结果中报告的手动白平衡增益和变形都与相机 3A 算法中的自动白平衡 estimate
一致。
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
test_black_white
用于测试设备是否可以生成全黑和全白的图像。拍摄两张照片,第一张用极低的增益和极短的曝光,得到一张黑色的照片;第二张用极高的增益和极长的曝光,得到一张白色的照片。
测试的 API:
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
通过:生成黑色图像和白色图像。白色图像的饱和通道的 RGB 值为 [255, 255, 255],并且误差范围小于 1% 的差值。
![]() |
![]() |
|
test_black_white_black.jpg | test_black_white_white.jpg |
test_black_white_plot_means.png
test_burst_capture
用于验证整个拍摄流水线是否能跟上全尺寸拍摄的速度和 CPU 运行速度。
测试的 API:
通过:连拍多张全尺寸图像,检查是否有掉帧和图片亮度问题。
test_burst_sameness_manual
使用手动拍摄设置连拍 5 次,共拍摄 50 张图像,然后检查这些图像是否完全相同。此测试可用于识别是否有零星的帧以不同方式处理或有伪影。
测试的 API:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
通过:图像在视觉上和 RGB 值上完全相同。
未通过:每次连拍开始时 RGB 平均图都出现一个峰值或谷值。
first_API_level
低于 30 时,公差为 3%first_API_level
为 30 或更高时,公差为 2%
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
test_capture_result
用于测试 CaptureResult
对象中是否返回有效的数据。依次执行自动拍摄、手动拍摄和自动拍摄。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
通过:元数据适用于所有拍摄,并且手动设置不会泄露到第二次自动拍摄中。绘制出拍摄的镜头阴影校正。
test_capture_result_plot_lsc_auto_ch0.png
test_crop_region_raw
用于测试 RAW 数据流是否无法剪裁。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
通过:YUV 图像的中心区域被剪裁掉了,但 RAW 图像没有。
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
用于测试剪裁区域的呈现效果。截取一整张图像,并创建涉及 5 个不同区域(角落和中心)的小块图片。截取 5 个区域的图像并设置剪裁。比较小块图片和剪裁图像值。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
通过:剪裁区域的图像与对应于剪裁图像的小块图片一致。
test_dng_noise_model
用于验证 DNG 原始模型参数是否正确。该图描述了在一系列感光度下拍摄的原始照片中灰色卡片中心小块图片的测量方差,然后将这些值与相机 HAL 中的 DNG 噪声模型在每个感光度下预计会有的方差进行比较(基于拍摄结果对象中返回的 O,S 参数)。如需详细了解 DNG 噪声模型,请下载这篇介绍 DNG 噪声模型的文档。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
通过:DNG 原始模型参数正确无误。预期的 RGB 值与实际测量的 RGB 值一致。
test_dng_noise_model_plog.png
test_ev_compensation_advanced
用于测试是否应用了曝光值 (EV) 补偿。该测试通过 8 步提高曝光量,并检查测得的亮度与预期亮度的对比情况。预期值根据未应用 EV 补偿的图片的亮度计算得出,如果计算得出的值超过图片实际值的范围,预期值会达到饱和。如果预期值与测量值不匹配,或图像在 5 步内过度曝光,测试会失败。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
通过:图像在 5 步内逐步提高曝光量,且未出现过度曝光的情况。
test_ev_compensation_advanced_plot_means.png
test_ev_compensation_basic
测试是否使用通过 CONTROL_AE_COMPENSATION_STEP
创建的范围应用了 EV 补偿。在每个补偿值时都会捕获 8 帧。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
通过:EV 补偿设置增加后拍摄亮度增加,并且为每项 EV 补偿设置拍摄的 8 帧具有稳定的亮度值。
test_ev_compensation_basic.png
test_exposure_x_iso
用于测试随着 ISO 和曝光时间的变化,是否可以实现恒定的曝光。拍摄一系列照片,通过选择 ISO 和曝光时间来实现彼此平衡。结果应具有相同的亮度,但在该序列中,图像应该变得更嘈杂。验证样本像素平均值是否接近。确保图像不会固定为 0 或 1(这会使它们看起来像平坦的线条)。此外,您还可以通过在配置文件中设置 debug
标志来使用 RAW 映像运行测试。
测试的 API:
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
通过:图像具有相同的亮度,但 ISO 越高,图像会越嘈杂。在被测增益空间上 ISO *曝光量不变的情况下,RGB 平面是平坦的。
失败机理:
- 在
test_exposure_plot_means.png
中,随着增益乘数值(x 轴)的增加,归一化 RGB 平面平均值(y 轴)开始偏离低增益乘数值。
test_exposure_plot_means.png
![]() |
![]() |
|
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_latching
用于测试 FULL
和 LEVEL_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=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=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
![]() |
|||
test_latching_i=12.jpg |
test_latching_plot_means.png
test_linearity
用于测试设备处理是否可以反转为线性像素。让设备对准统一的目标,拍摄一系列照片。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
通过:R、G、B 值必须随着感光度的提升而线性增加。
test_linearity_plot_means.png
test_locked_burst
用于测试 3A 锁定和 YUV 连拍(使用自动设置)。此测试设计为即使在没有 MANUAL_SENSOR
或 PER_FRAME_CONTROLS
的受限设备上也可以通过。当 CTS 中包含帧速率检查时,此测试会检查 YUV 图像一致性。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
通过:拍摄效果一致。
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
test_param_color_correction
用于测试设置后是否应用了 android.colorCorrection.*
参数。使用不同的变形值和增益值拍摄照片,并测试它们是否看起来也相应不同。选择变形和增益,使输出越来越红或越来越蓝。使用线性色调映射。色调映射是图像处理中使用的一种技术,用于将一组颜色映射到另一组颜色,以估算高动态范围图像在动态范围较为受限的媒介中的外观。
测试的 API:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
通过:R 和 B 值根据变形而提升。
test_param_color_correction_plot_means.png
*x 轴表示拍摄请求:0 = unity,1 = 红色增强,2 = 蓝色增强
test_param_color_correction_req=0.jpg
test_param_color_correctness_req=1.jpg(R 增强)
test_param_color_correction_req=2.jpg(B 增强)
test_param_flash_mode
用于测试是否应用了 android.flash.mode
参数。手动将曝光位置设置为深色侧,以便清楚地知道闪光灯是否触发,并使用线性色调映射。使用图块图像检查中心区域,查看是否有较大的渐变来验证闪光灯是否已触发。
测试的 API:
通过:图块图像的中心有一个较大的渐变,表示闪光灯已触发。
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
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.png
0:关闭;1:快速;2:高清;3:最小;4:ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_shading_mode
用于测试是否应用了 android.shading.mode
参数。
测试的 API:
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
通过:着色模式会切换,镜头阴影映射已按预期修改。
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
用于测试是否应用了 android.tonemap.mode 参数。为每个 R、G、B 通道应用不同的色调映射曲线,并检查输出图像是否已按预期修改。此测试包含两个测试:test1 和 test2。
测试的 API:
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
通过:
- test1:两个图像都具有线性色调映射,但 n=1 的渐变曲线更陡。对于 n=1 图像,G(绿色)通道更亮。
- test2:色调映射相同,但长度不同。图像相同。
![]() |
![]() |
|
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
test_post_raw_sensitivity_boost
用于检查 RAW 感光度提升后的情况。拍摄一组具有不同感光度的 RAW 和 YUV 图像,发布 RAW 感光度提升组合,并检查输出像素均值是否与请求设置一致。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
通过:RAW 图像随感光度提升而变暗,而 YUV 图像的亮度保持不变。
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
拍摄一组增益越来越高的原始图像,并测量噪声。在连拍中只拍摄原始照片。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
通过:随着增益的增加,每张照片都比前一张照片嘈杂。
使用中心统计网格单元的方差。
test_raw_burst_sensitivity_variance.png
test_raw_exposure
拍摄一组曝光时间越来越长的原始图像,并测量像素值。
测试的 API:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
通过:增加 ISO(增益)会使像素对光线更加敏感,因此该图会向左移动。
test_raw_exposure_s=55.png
(10⁰ 为 1 毫秒,10¹ 为 10 毫秒,10⁻¹ 为 0.1 毫秒)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_sensitivity
拍摄一组感光度越来越高的原始图像,并测量图像中心 10% 区域的噪声(方差)。用于测试是否每张照片都比前一张照片嘈杂。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
通过:方差随每张照片而增加。
test_raw_sensitivity_variance.png
test_reprocess_noise_reduction
用于测试是否已针对重新处理请求应用 android.noiseReduction.mode
。在相机光线较暗的情况下拍摄重新处理后的图像。使用高模拟增益以确保拍摄的图像是嘈杂的。在“NR 关闭”、“快速”和“高画质”场景下拍摄三张重新处理后的图像。在低增益和 NR 关闭这一场景下拍摄一张重新处理后的图像,并将其方差作为基准。
测试的 API:
通过:快速 >= 关闭,高清 >= 快速,高清 >> 关闭
典型的 SNR 与 NR_MODE 对比图
test_tonemap_sequence
用于使用不同的色调映射曲线测试一系列照片。使用线性色调映射拍摄 3 张手动照片。使用默认色调映射拍摄 3 张手动照片。计算每个连续帧对之间的增量。
测试的 API:
通过:有 3 个完全相同的帧,后跟一个由 3 个完全相同的帧组成的不同集合。
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
用于测试图像拍摄的所有报告尺寸和格式是否都正常。使用带有线性色调映射的手动请求,使 YUV 和 JPEG 在由 image_processing_utils
模块转换时看起来一样。默认情况下,图像不会保存,但可通过启用 debug_mode
来保存。
测试的 API:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
通过:在经过 RGB 转换后的图像中,所有图像中心的最大 RMS(信号均方根值)差为最高分辨率 YUV 图像的 3%。
test_yuv_jpeg_all.png
test_yuv_plus_dng
用于测试图像拍摄的报告尺寸和格式是否都正常。
测试的 API:
通过:测试完成并返回所请求的图像。
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
用于测试能否以 YUV 和 JPEG 输出形式拍摄单个帧。使用带有线性色调映射的手动请求,使 YUV 和 JPEG 在由 image_processing_utils
模块转换时看起来一样。
测试的 API:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
通过:YUV 和 JPEG 图像类似,并且其 RMS(信号均方根值)差小于 1%。
![]() |
![]() |
|
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:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.hardware.graphics.ImageFormat#RAW10
android.hardware.graphics.ImageFormat#RAW12
通过:YUV 和 RAW 图像类似,并且其 RMS(信号均方根值)差小于 3.5%。
![]() |
![]() |
|
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
scene2_a
scene2_a 中包含三个人脸,背景均为灰色,身穿中性服装。这些人脸经过精心选择,涵盖了多种肤色。 为使人脸检测以最佳方式运行,图表必须采用正确的屏幕方向。
scene2_a
test_autoframing
用于测试相机设备的自动取景行为。进行大变焦,使得场景中的人脸都不可见,通过将 CaptureRequest
中的 AUTOFRAMING
设为 True
来启用自动取景模式;并验证当状态收敛时(即 CaptureResult
中的 AUTOFRAMING_STATE
设为 AUTOFRAMING_STATE_CONVERGED
),是否可以检测到原始场景中的所有人脸。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
通过:所有三张人脸都检测到。
test_display_p3
用于测试使用 ColorSpaceProfiles
API 以 JPEG 格式拍摄 Display P3 图像。测试拍摄的 JPEG 在其标头中是否包含适当的 ICC 色彩特性文件,以及图像是否包含 sRGB 色域之外的颜色。
测试的 API:
android.hardware.camera2.params.ColorSpaceProfiles
android.hardware.camera2.params.SessionConfiguration#setColorSpace
通过:JPEG 包含 Display P3 ICC 色彩特性文件和 sRGB 色域之外的颜色。
test_effects
拍摄帧以获取支持的相机效果,并检查这些效果是否正确生成。该测试仅检查效果 OFF
和 MONO
,但会保存图像以获取所有受支持的效果。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
通过:拍摄具有 OFF
效果的场景图像,以及效果设置为 MONO
的单色图像。
test_effects_MONO.jpg
test_format_combos
用于测试不同的输出格式组合。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
通过:所有组合都已成功捕获。
test_num_faces
用于测试执行人脸检测的能力。
测试的 API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
通过:找到三个人脸。
test_num_faces_fd_mode_1.jpg
test_reprocess_uv_swap
用于测试 YUV 重新处理不会交换 U 和 V 平面。检测方法为计算经过重新处理的图像与未经重新处理的拍摄图像之间的绝对差总和 (SAD)。如果交换经过重新处理的拍摄图像的输出 U 平面和 V 平面导致 SAD 增加,系统会假定输出具有正确的 U 平面和 V 平面。
测试的 API:
android.hardware.camera2.CameraDevice#createCaptureSession
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
通过:U 平面和 V 平面不交换。
test_reprocess_uv_swap.png
scene2_b
test_num_faces
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
测试的 API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
通过:找到 3 个人脸。
test_num_faces_fd_mode_1.jpg
test_yuv_jpeg_capture_sameness
使用最大的通用 YUV 和 JPEG 格式拍摄两张图片,这些图片的宽高比与最大 JPEG 格式相同,且分辨率不超过 1920x1440。将 jpeg.quality
设置为 100,并捕获双重 surface 请求。将两张图片转换为 RGB 数组,并计算两张图片之间的 3D 均方根 (RMS) 差。
此外,该测试还将验证:所有受支持的数据流用例的 YUV 输出与 STILL_CAPTURE
用例的 YUV 具有一定的相似性。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
android.graphics.ImageFormat#JPEG
通过:STILL_CAPTURE
用例的 YUV 和 JPEG 图像的 RMS(信号均方根值)差小于 3%;所有受支持用例的 YUV 图像与 STILL_CAPTURE
用例的 YUV 图像的 RMS 差小于 10%。
scene2_c
test_num_faces
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
测试的 API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
通过:找到 3 个人脸。
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 毫秒。
test_default_camera_hdr
按照 CDD 中 2.2.7.2 相机一节的规定,为性能等级 15 测试默认相机拍摄是否为 Ultra HDR。
通过:对于性能等级 15 的设备,默认相机软件包拍摄必须是 Ultra HDR。
scene2_d
test_num_faces
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
测试的 API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
通过:找到 3 个人脸。
scene2_e
test_continuous_picture
系统会使用拍摄请求第一个设置 android.control.afMode = 4 (CONTINUOUS_PICTURE).
拍摄 50 个 VGA 分辨率帧。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
通过:3A 系统在 50 帧拍摄结束时稳定下来。
test_num_faces
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
测试的 API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
通过:找到 3 个人脸。
scene2_f
scene2_f 中有 3 张人脸,背景为白色,衣服为白色。人脸有多种肤色,并且与背景形成鲜明对比。
scene2_f
test_num_faces
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
测试的 API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
通过:找到 3 个人脸。
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.jpg
test_edge_enhancement_edge=1.jpg(快速模式)
test_edge_enhancement_edge=2.jpg(高画质模式)
test_flip_mirror
按照 CDD 7.5.2 前置摄像头 [C-1-5] 一节测试图像是否面向正确方向。
经过镜像、翻转或旋转处理的图像可以通过中心位置附近的菱形特征进行标识。
通过:图像未经过翻转、镜像或旋转。
test_flip_mirror_scene_patch.jpg
test_imu_drift
用于测试当设备处于静止状态并捕获高清预览时,惯性测量单元 (IMU) 能否保持 30 秒的稳定输出。
测试的 API:
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_GYROSCOPE
android.hardware.Sensor#TYPE_ROTATION_VECTOR
通过:
- 在测试期间,陀螺仪的漂移小于 0.01 rad。
- 在测试期间,陀螺仪读数的方差小于 1E-7 rad2/s2/Hz。
- 在测试期间,旋转矢量的漂移小于 0.01 rad。
- (尚未强制执行)陀螺仪的漂移小于每秒 1 度。
test_imu_drift_gyro_drift.png
test_imu_drift_rotation_vector_drift.png
test_landscape_to_portrait
用于测试横向传感器,验证横向到纵向覆盖功能是否正常工作。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
通过:测试能够找到具有预期旋转角度的图表(停用横向到纵向覆盖功能时,为 0 度;启用时,为 90 度)。
test_landscape_to_portrait.png
test_lens_movement_reporting
用于测试系统是否正确报告镜头移动标志。连拍 24 张图像,前 12 帧采用最佳焦距(如 3A 所示),后 12 帧采用最小焦距。在第 12 帧左右,镜头会移动,导致锐度下降。随着镜头移到最终位置,锐度最终稳定下来。在锐度介于头几帧(镜头稳定在最佳焦距)中锐度和最后几帧(镜头稳定在最小焦距)中锐度的所有帧中,都应断言镜头移动标志。镜头移动具体发生在哪一帧并不重要:您需要检查的是镜头移动时是否断言了移动标志。
测试的 API:
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#LENS_STATE
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
通过:在锐度发生了变化的帧中,镜头移动标志为 True
。
失败机理:
- 只有在锐度不变的帧中,才从
test_log.DEBUG
中断言lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) - 与采用最佳焦距的前几帧或最小焦距的后几帧相比,
test_log.DEBUG
中lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) 的帧存在锐度差异。
test_reprocess_edge_enhancement
用于测试支持的边缘增强重新处理方法是否正常工作。 处理具有指定重新处理边缘模式的拍摄请求,并将不同的模式进行比较,以便在停用了重新处理边缘模式的情况下进行拍摄。
测试的 API:
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
通过:不同边缘模式的锐度正确无误。HQ
(模式 2)比 OFF
(模式 0)更清晰,并且不同模式之间的改进类似。
test_reprocess_edge_enhancement_plot.png
scene4
Scene4 由方形内白色背景上的黑色圆圈组成。
scene4 中的测试可能会对对齐敏感,因此从 15 开始,您可以使用工具目录中的 check_alignment.py
来启用对 DUT 和图表对齐的检查。
scene4
test_30_60fps_preview_fov_match
测试 30 FPS 和 60 FPS 预览视频是否具有相同的 FoV。该测试会拍摄两个视频,一个是 30 FPS,另一个是 60 FPS。系统会从每个视频中选出一帧有代表性的画面,对其进行分析,以确保两个视频的 FoV 变化符合规范要求。测试圆圈的宽高比是否保持不变、圆圈的中心是否保持稳定,以及圆圈的半径是否保持不变。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
通过:图像未拉伸,图像中心相差不超过 3%,并且 30 FPS 的视频与 60 FPS 的视频之间的宽高比变化不超过 7.5%
失败机理:
- 30 FPS 视频中的圆圈与 60 FPS 视频中的圆圈大小明显不同。
- 所拍摄图像中的圆圈会被处理管道扭曲。
- 所拍摄图像中的圆圈遭到剪裁,原因是拍摄要求的宽高比极高,减少了图像的高度或宽度。
- 所拍摄图像中的圆圈中央有反光,看起来没有完全填满。
test_aspect_ratio_and_crop
用于测试图像在图像管道中是否扭曲或意外剪裁。拍摄各种格式的圆圈照片。验证圆圈没有扭曲、圆圈没有从图像中心移开,以及圆圈没有因不同的宽高比或分辨率而错误地改变大小。
测试的 API:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
通过:图像未拉伸,图像中心相差不超过 3%,并保留了最大的可能 FoV(视野范围)。
失败机理:
- 摄像头未与平板电脑上所捕获场景中心显示的圆圈对齐。
- 所拍摄图像中的圆圈会被处理管道扭曲。
- 分辨率较低的图像在图像管道中被二次裁剪,造成高分辨率图像和低分辨率图像的 FoV 不同。
- 所拍摄图像中的圆圈遭到剪裁,原因是拍摄要求的宽高比极高,减少了图像的高度或宽度。
- 所拍摄图像中的圆圈中央有反光,看起来没有完全填满。
test_multi_camera_alignment
用于测试与多摄像头系统的摄像头定位相关的摄像头校准参数。使用多摄像头物理子摄像头,通过其中一个物理摄像头拍摄照片。找出圆心。将圆心投影到每个摄像头的世界坐标上。比较各摄像头在世界坐标上的圆心差。将世界坐标重新投影到像素坐标上,并与原始坐标进行比较,以此来检查有效性。比较圆圈的大小,检查摄像头的焦距是否不同。
测试的 API:
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
通过:与使用相机校准数据和焦距拍摄的图像相比,投影图像中的圆心和大小符合预期。
失败机理:
LENS_INTRINSIC_CALIBRATION
、LENS_POSE_TRANSLATION
或LENS_POSE_ROTATION
是设计值,而不是实际的校准数据。- 摄像头系统不适合测试设置。例如,使用 RFoV 测试装置测试广角和超广角摄像头系统。如需了解详情,请参阅相机盒装 ITS 常见问题解答 1。
test_preview_aspect_ratio_and_crop
此测试类似于针对静态拍摄图像的 test_aspect_ratio_and_crop 测试,用于检查支持的预览格式,以确保视频画面不会被不当拉伸或剪裁。验证圆圈的宽高比是否不变、剪裁后的图像是否将圆圈保持在帧的中心位置,以及圆圈大小在固定的格式或不同的分辨率下是否不会改变(视野范围检查)。
测试的 API:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
通过:图像未拉伸,图像中心相差不超过 3%,并保留了最大的可能 FoV(视野范围)。
test_preview_stabilization_fov
检查支持的预览画面尺寸,以确保适当剪裁 FoV。该测试会拍摄两个视频,一个是将预览防抖功能设为 ON
,另一个是将预览防抖功能设为 OFF
。系统会从每个视频中选出一帧有代表性的画面,对其进行分析,以确保两个视频的 FoV 变化符合规范要求。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
通过:圆圈宽高比保持大致不变,圆圈的中心位置保持不变,并且圆圈的大小变化幅度不超过 20%。
test_video_aspect_ratio_and_crop
使用所有视频格式拍摄一个正方形内的圆圈的照片。提取关键帧,并验证圆圈的宽高比是否不变、剪裁后的图像是否将圆圈保持在中心位置,以及圆圈大小在固定的格式或不同的分辨率下是否不会改变(视野范围检查)。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
通过:视频帧未拉伸,帧中心变化不超过 3%,并保留了可能的最大 FoV(视野范围)。
scene5
Scene5 要求拍摄光线均匀的灰色场景。这需要在相机镜头上放置漫射器。我们建议使用以下漫射器:www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
。
如需准备场景,请在摄像头前方安装漫射器,然后将摄像头对准 2000 勒克斯左右的光源。为 scene5 拍摄的图像需要没有明显特征的漫射光。以下是示例图片:
scene5 拍摄图像
test_lens_shading_and_color_uniformity
用于测试是否适当地应用了镜头着色校正,以及单色均匀场景的颜色是否均匀分布。使用自动 3A 对 YUV 帧执行此测试。系统会根据 y 通道评估镜头着色。测量指定的每个样本块的平均 y 值,并通过与中心 y 值进行比较来确定测试是通过还是失败。颜色均匀测试在 r/g 和 b/g 空间内进行评估。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
通过:在图像的指定半径内,r/g 和 b/g 值的方差必须小于 20% 才能通过测试。
scene6
Scene6 是一个由小圆圈组成的网格,有个角中有一个方形,表示方向。需要使用小圆圈测试大范围内的缩放功能。
scene6 中的测试可能会对对齐敏感,因此从 15 开始,您可以使用工具目录中的 check_alignment.py
来启用对 DUT 和图表对齐的检查。
scene6
test_in_sensor_zoom
用于测试相机传感器内变焦功能的行为,该功能可生成剪裁过的 RAW 图像。
将数据流用例设置为 CROPPED_RAW
后,该测试将在变焦范围内拍摄两幅图像,即全视野范围 (FoV) RAW 图像和剪裁后的 RAW 图像。该测试会将图像转换为 RGB 数组,将完整尺寸的剪裁后 RAW 图片缩小为 SCALER_RAW_CROP_REGION
报告的大小,并计算两幅图像之间的 3D 均方根 (RMS) 差。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
通过:经过缩小的剪裁后 RAW 图像和完整尺寸 FoV RAW 图像之间的 3D 均方根 (RMS) 差小于测试中设置的阈值。
test_zoom
用于测试相机变焦行为。在变焦范围内拍摄照片,并在相机拉近时查看圆圈是否变大。 对于每种格式(YUV、JPEG),都会用相同的相机拍摄会话使 3A 收敛并进行拍摄。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
通过:捕获的圆圈的相对大小与请求的缩放比例相对照是准确的,以确保相机正确缩放。
test_zoom,用于找到最接近中心的圆圈轮廓。
test_low_latency_zoom
用于测试相机低延迟变焦行为。使用 android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
在变焦范围内拍摄图像,并检查输出图像中的圆圈与拍摄图像元数据中的缩放比例是否匹配。 使用相同的相机拍摄会话,使 3A 收敛并进行拍摄。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
通过:对照缩放比例结果元数据,所拍摄圆圈的相对大小是准确的。
test_preview_video_zoom_match
用于测试在录制和变焦时,视频预览和视频输出能否显示和录制相同的输出。计算在不同缩放比例下最靠近中心的圆圈的大小,并检查圆圈的大小是否随着缩放比例的增加而增大。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
通过:对照视频和预览中请求的缩放比例,所拍摄圆圈的相对大小是准确的。
VGA_640x480_key_frame.png(变焦前)
preview_640x480_key_frame.png(变焦前)
VGA_640x480_key_frame.png(变焦后)
preview_640x480_key_frame.png(变焦后)
test_preview_zoom
测试每个预览帧的缩放比例是否与相应的拍摄元数据相符。该测试会在变焦范围内拍摄预览帧,并查找与中心最接近的圆圈的轮廓。随后,该测试会检查所选圆圈是否变大,以及圆圈的中心是否会随着相机拉近而远离图像中心。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
通过:对于所有预览帧的相应拍摄结果的报告缩放比例,所选圆圈的相对大小是准确的。对于系统针对所有预览帧的相应拍摄结果报告的缩放比例,所选圆圈与图像中心的相对距离是准确的。
test_preview_zoom 图像,显示与中心最接近的所选圆圈
test_session_characteristics_zoom
测试 CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
中列出的所有受支持会话配置的缩放比例范围。对于上述每一种配置,如果 CameraDeviceSetup#isSessionConfigurationSupported
返回 true,则该测试可验证:CameraDeviceSetup#getSessionCharacteristics
中返回的缩放比例范围是可以达到的。
测试的 API:
android.hardware.camera2.CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
android.hardware.camera2.CameraDevice.CameraDeviceSetup#getSessionCharacteristics
通过:对于 CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
中列出的每个受支持的 SessionConfiguration
,都可以达到最小和最大缩放比例。
scene7
Scene7 是一个矩形框,分为四个相等的象限,每个象限填充的颜色各不相同。矩形的中心是一个斜边图表,用于检查锐度。四个 ArUco 标记与矩形的四个外角对齐,以便在不同的缩放比例下得到主矩形框的准确坐标。
scene7
test_multi_camera_switch
该测试可验证:在以不同缩放比例进行预览录制期间,在超广角 (UW) 和广角 (W) 镜头间切换,会得到相近的 RGB 值。
该测试使用预定义范围内的不同缩放比例进行行动态预览录制,并确定实体摄像头发生变化的点。此点标志着从超广角到广角镜头的切换。
系统会分析在交叉点和交叉点之前拍摄的帧,以确定自动曝光 (AE)、自动白平衡 (AWB) 和自动对焦 (AF) 的效果。
AE 检查可确保超广角和广角镜头图像的亮度变化均在预期范围内。AWB 检查可验证:超广角和广角镜头图像的 R/G 和 B/G 比率均在阈值范围内。AF 检查会根据超广角和广角镜头图像之间的平均梯度幅度来评估锐度估算值。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.media.CamcorderProfile
android.media.MediaRecorder
通过:要想通过测试,AE、AWB 和 AF 检查都必须通过。每项检查的标准如下:
- AE 检查:超广角和广角镜头图像之间的亮度变化必须小于 0.5%。
- AWB 检查:超广角和广角镜头图像的 R/G 和 B/G 值之间的差异必须小于 0.5%。
- AF 检查:超广角和广角镜头图像之间的图像锐度变化必须小于 2%。
scene8
Scene8 是一个矩形框架,分为四个面积相同的区域,每个区域包含一张使用不同曝光拍摄或叠加不同颜色(蓝色、曝光增加、曝光减少、黄色)的肖像。四个 ArUco 标记与矩形的四个外角对齐,以得到主矩形框的准确坐标。
scene8
test_ae_awb_regions
测试在不同的自动曝光 (AE) 和自动白平衡 (AWB) 区域进行预览录制时,RGB 和亮度值是否不同。
该测试会录制 8 秒的预览录制内容,并对每个象限进行 AE 和 AWB 测光,每个象限各 2 秒。然后,该测试会从每个区域的预览录制中提取一个帧,并使用提取的帧执行以下 AE 和 AWB 检查:
- AE 检查:验证对曝光度较低的区域进行帧测光时,与对曝光度较高的区域进行帧测光相比,亮度值是否增加了 1% 以上。该检查可验证:在对较暗区域进行测光时,图片会变亮。
- AWB 检查:验证具有蓝色测光区域的帧中(图片平均 RGB 值的)红色与蓝色的比例是否比具有黄色测光区域的帧高出 2% 以上。该检查可验证:在对黄色(暖色)或蓝色(冷色)区域测光时,图像的 RGB 值是均衡的。
测试的 API:
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AE
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
通过:AE 和 AWB 检查均通过。
失败机理:
对于此测试来说,准确检测所有四个 ArUco 标记至关重要。如果初始检测失败,系统会尝试使用黑白版的图像通过第二次检测。以下灰度模式图像表示辅助处理步骤。
scene9
Scene9 由数千个随机大小和颜色的圆圈组成,用于创建重复性极低的场景,以测试 JPEG 压缩算法。
scene9
test_jpeg_high_entropy
测试相机 JPEG 压缩在 scene9 中是否能够正常运行,并将 JPEG 品质因数设置为 100%。缩放系数会增加,以确保平板电脑上显示的场景填满相机的视野范围。
测试的 API:
通过:JPEG 文件正确压缩、写入,并从磁盘读回。
test_jpeg_quality
用于测试相机 JPEG 压缩质量。通过 android.jpeg.quality
逐步提高 JPEG 画质,并确保量化表正确更改。
测试的 API:
通过:量化矩阵随着画质的提高而降低(矩阵表示除法因子)。
Pixel 4 后置摄像头亮度/色度 DQT 矩阵平均值与 JPEG 画质的关系
测试失败示例
请注意,对于画质极低的图像(jpeg.quality 低于 50),量化矩阵中的压缩量没有提高。
scene_video
scene_video
场景是视频场景。它由四个不同颜色的圆圈组成,这些圆圈在白色背景上以不同的帧速率来回移动。
scene_video
test_preview_frame_drop
用于测试在动态场景中是否保持所请求的预览帧速率。该测试会在向第三方应用公开的所有摄像头上运行。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
通过:预览帧速率是所请求帧速率范围的最大值,并且连续帧之间的平均变化小于测试中设置的相对公差。
scene_extensions
scene_extensions
测试适用于相机扩展程序,必须使用相机盒装 ITS,因为它们需要对测试环境进行精确控制。 此外,必须防止一切漏光。这可能需要用防水布遮盖测试装置、DUT 和平板电脑,并避免 DUT 前屏幕的漏光。
scene_hdr
scene_hdr
场景左侧是人像,右侧是低对比度二维码。
scene_hdr
test_hdr_extension
测试 HDR 扩展程序。在启用和未启用该扩展程序的情况下进行拍摄,并检查扩展程序是否让二维码更容易被检测到。
测试的 API:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
通过:HDR 扩展程序可减少检测二维码所需的对比度变化次数,或减少整个二维码的梯度。
scene_low_light
scene_low_light
场景的背景为黑色,其上有一网格,该网格由数个灰度不同方块组成,且轮廓为红色。各方块以希尔伯特曲线方向排列。
scene_low_light
test_night_extension
用于测试夜间模式扩展程序。在启用该扩展程序的情况下进行拍摄,并执行以下操作:
- 检测是否存在 20 个方块
- 计算每个方块内的亮度
- 根据希尔伯特曲线网格方向,计算前 6 个方块的平均亮度值
- 计算连续方块(例如,方块 2 - 方块 1)的亮度差值,直至方块 5 和 6(方块 6 - 方块 5),并计算这 5 个所得差值的平均值。
测试的 API:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
通过:前 6 个方块的平均亮度值必须至少为 85,并且连续方块(包括第 5 个和第 6 个方块)的平均亮度值之差必须至少为 17。
以下亮度图为通过测试的结果。
test_low_light_boost_extension
测试弱光增强 AE 模式。 如果 Camera2 支持弱光增强 AE 模式,则系统会对 Camera2 执行该测试。如果夜间模式相机扩展程序受支持,且该扩展程序支持弱光增强 AE 模式,则系统也会对夜间模式相机扩展程序执行该测试。该测试会将 AE 模式设为弱光增强,从预览中获取一帧,并执行以下操作:
- 检测是否存在 20 个方块
- 计算每个方块内的亮度
- 根据希尔伯特曲线网格方向,计算前 6 个方块的平均亮度值
- 计算连续方块(例如,方块 2 - 方块 1)的亮度差值,直至方块 5 和 6(方块 6 - 方块 5),并计算这 5 个所得差值的平均值。
测试的 API:
android.hardware.camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
通过:前 6 个方块的平均亮度值必须至少为 70,并且连续方块(包括第 5 个和第 6 个方块)的平均亮度值之差必须至少为 17。
scene_flash
scene_flash
测试需要在传感器融合盒的黑暗场景中进行。
test_auto_flash
用于测试在黑暗场景中是否会触发后置和前置摄像头的自动闪光灯。对于前置摄像头,自动闪光灯会用屏幕照亮场景,而不是使用实体闪光灯元件。该测试可验证:若检查到图块图像的中心因启用自动闪光灯而变得更亮,则自动闪光灯将会触发。如需触发自动闪光灯,必须关闭测试装置中的灯。灯可以通过 Arduino 控制器自动关闭。场景必须完全保持黑暗,测试才能正常运行。在测试前,必须在设备上安装 Jetpack 相机应用 (JCA)。后置摄像头的自动闪光灯是否触发,取决于 AE 的状态;而前置摄像头的自动闪光灯不依赖于 AE,并且始终触发。
测试的 API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureRequest#FLASH_MODE
通过:在所有摄像头中,启用自动闪光灯后,图块图像的中心比原始场景图像更亮。
test_flash_strength
测试 SINGLE
模式下的闪光灯强度控制已正确实现。
验证在相机使用 SINGLE
模式期间,若设备支持闪光灯强度控制,闪光灯强度会随请求的强度级别而变化。验证闪光灯强度控制能否与不同的 AE_MODES
搭配使用。例如,如果自动曝光模式为 ON
或 OFF
,闪光灯强度级别会影响亮度;如果自动曝光模式为 ON_AUTO_FLASH
,闪光灯强度级别不会影响亮度。如需进行测试,必须关闭测试装置中的灯。灯可以通过 Arduino 控制器自动关闭。场景必须完全保持黑暗,测试才能正常运行。
测试的 API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_MAX_LEVEL
通过:
若自动曝光模式为 ON
或 OFF
,则当闪光灯强度级别从“不闪光”增加到 FLASH_SINGLE_STRENGTH_MAX_LEVEL
,图块的亮度会增加。若自动曝光模式为 ON_AUTO_FLASH
,则当闪光灯强度级别从“不闪光”增加到 FLASH_SINGLE_STRENGTH_MAX_LEVEL
,图块的亮度差异在公差范围内。
test_led_snapshot
用于测试 LED 快照是否会使图像饱和或产生色偏。
此测试在传感器融合盒中添加了一个照明控制器来控制灯光。将灯光设置为 OFF
后,测试将 AUTO_FLASH
模式设置为 ON
进行拍摄。在此拍摄期间,该测试会在 aePrecapture
触发器设置为 START
的情况下运行预拍摄序列,并将拍摄 intent 设置为 Preview
以使用闪光灯进行拍摄。
由于拍摄图像有一个明显的热点,因此该测试会计算整个拍摄的闪光图像平均值,并验证该值是否在 (68, 102) 范围内。为了检查图像是否达到合理的白平衡,该测试会计算 R/G 和 B/G 比率,并验证这些比率是否在 0.95 和 1.05 范围内。
测试的 API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
通过:R/G 和 B/G 比率在 0.95 和 1.05 之间。闪光图像平均值在 (68, 102) 范围内。
test_preview_min_frame_rate
用于测试在黑暗环境中是否正确降低预览帧速率为使此测试正常运行,必须由控制器关闭测试装置中的灯或由测试操作员手动关闭。
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
通过:预览帧速率是所请求帧速率范围的最小值,并且帧之间的变化小于测试中设置的绝对公差。
test_torch_strength
测试 TORCH
模式下的闪光灯强度控制已正确实现。
验证在相机使用 TORCH
模式期间,若设备支持手电筒强度控制,闪光灯强度会随请求强度级别而变化。验证闪光灯强度控制能否与不同的 AE_MODES
搭配使用。例如,如果自动曝光模式为 ON
或 OFF
,闪光灯强度级别会影响亮度;如果自动曝光模式为 ON_AUTO_FLASH
,闪光灯强度级别不会影响亮度。验证手电筒强度在连拍期间保持不变,以模拟视频拍摄会话。如需进行测试,必须关闭测试装置中的灯。灯可以通过 Arduino 控制器自动关闭。场景必须完全保持黑暗,测试才能正常运行。
测试的 API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_MAX_LEVEL
通过:
若自动曝光模式为 ON
或 OFF
,则当闪光灯强度级别从“不闪光”增加到 FLASH_TORCH_STRENGTH_MAX_LEVEL
,连拍图块的亮度会增加。若自动曝光模式为 ON_AUTO_FLASH
,则当闪光灯强度级别从“不闪光”增加到 FLASH_TORCH_STRENGTH_MAX_LEVEL
,连拍图块的亮度差异在公差范围内。
sensor_fusion
传感器融合测试需要手机在棋盘格图案和 ArUco 标记前沿特定方向移动。为获得最佳效果,务必将测试图表放平。未平放的图表会影响许多测试的旋转计算。图表必须以 17"x17" (43x43 cm) 的尺寸打印,才能填满传感器融合盒的背面。sensor_fusion
测试可以通过传感器融合盒来自动执行。
传感器融合图表
填满传感器融合盒背面的传感器融合图表
test_lens_intrinsic_calibration
验证镜头的光学中心会在镜头因光学防抖 (OIS) 而移动时发生固有变化。如果支持镜头固有采样,则测试镜头因光学防抖 (OIS) 而移动时,镜头固有采样的光学中心是否变化。
测试的 API:
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
通过:镜头的光学中心发生的固有变化不低于 1 像素。如果支持镜头固有采样,则镜头固有采样的光学中心发生的固有变化不低于 1 像素。
test_lens_intrinsic_calibration
图表示例,显示每一帧的主点变化情况(以像素为单位)
test_multi_camera_frame_sync
计算棋盘格内正方形的角度来确定时间戳,进而测试逻辑摄像头捕获的帧时间戳是否在 10 毫秒以内。
测试的 API:
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
通过:当手机旋转时,每个摄像头拍摄的图像之间的角度不会发生明显变化。
test_preview_distortion
测试已在使用各种缩放级别拍摄的每个预览帧中都进行了失真校正。对于每个预览帧,该测试会根据相机的内参和外参计算理想点。在示例图像中,理想点以绿色显示,实际点以红色显示。失真误差是根据实际点与理想点之间的均方根 (RMS) 像素距离计算得到的。图片上的绿色和红色高亮用于直观检测失真误差区域。
棋盘格图像,其中理想点为绿色,实际点为红色
测试的 API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.media.CamcorderProfile
android.media.MediaRecorder
通过:每个预览帧的归一化失真误差小于测试中设置的阈值。
test_preview_stabilization
用于测试使用了防抖功能的预览视频的旋转角度是否小于陀螺仪的旋转角度。
测试的 API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
通过:帧间的最大旋转角度小于陀螺仪旋转角度的 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
test_sensor_fusion_plot_rotations
:显示陀螺仪事件和相机事件的对齐情况。此图表所示的相机和陀螺仪之间的匹配移动的误差必须限制在 +/-1 毫秒内。test_sensor_fusion_plot_rotations
测试的 API:
android.hardware.camera2.CameraCharacteristics#LENS_FACING
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
通过:根据 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:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
通过:帧间的最大旋转角度小于陀螺仪旋转角度的 60%。
以下是启用和不启用防抖功能的视频示例。
启用防抖功能的视频示例
未启用防抖功能的视频示例
feature_combination
feature_combination
测试可验证:在同时启用多项摄像头功能时,各功能能否正常运行。这些测试所使用的棋盘格图像与传感器融合场景中的相同。
test_feature_combination
测试相机设备所支持的不同流组合、预览防抖、目标 FPS 范围、10-bit HDR 视频和 Ultra HDR 的所有组合。此测试非常占用内存,因此我们建议使用 RAM 至少为 128 GB 的主机。
对于 Android 15 及更高版本,配置文件包含一个 log_feature_combo_support
字段,该字段默认为 False
。当 log_feature_combo_support
字段设置为 True
时,测试会运行所有受支持的功能组合,并将结果记录到 proto 文件中,且不会导致测试失败。对于合规性测试,log_feature_combo_support
字段必须设为 False
。
测试的 API:
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest
通过:对于每一种受支持的功能组合:
- 如果预览防抖功能处于开启状态,则预览视频流会保持稳定。
- 预览帧速率在经过配置的
AE_TARGET_FPS_RANGE
范围内。 - 录制的预览视频流的色彩空间与所设置的色彩空间一致。
- Ultra HDR 拍摄具有有效的增益映射。