Camera XTS 处理笔记
共 25165字,需浏览 51分钟
·
2024-07-13 08:08
和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
常用测试步骤(下面均以CTS为例)
打开终端,进入 cts 包 tools目录下
执行 ./cts-tradefed 进入cts测试
:~/XTS/CTS/14/R3/android-cts-14_r3-linux/android-cts/tools$ ./cts-tradefed
==================
Notice:
We collect anonymous usage statistics in accordance with our Content Licenses (https://source.android.com/setup/start/licenses), Contributor License Agreement (https://opensource.google.com/docs/cla/), Privacy Policy (https://policies.google.com/privacy) and Terms of Service (https://policies.google.com/terms).
==================
Android Compatibility Test Suite 14_r3 (11432042)
Use "help" or "help all" to get more information on running commands.
07-12 17:06:45 I/DeviceManager: Detected new device 1b696b3e
cts-tf >
常用命令
1. 全跑命令
run cts --plan CTS -s devices id
2.单独跑某个module
run cts -m module
Camera CTS 模块:
run cts -s 手机序列号 -m CtsCameraTestCases
Camera GSI模块:
run cts-on-gsi -s 手机序列号 -m CtsCameraTestCases
Camera VTS 模块:
run vts -s 手机序列号 -m VtsHalCameraProviderV2_4TargetTest
camera GTS模块:
run gts -s 手机序列号 -m GtsCameraTestCases
3. 单跑某个module下的一个类
run cts -m module -t classname
Camera CTS 模块:
run cts -s 手机序列号 -m CtsCameraTestCases -t fail模块
Camera GSI模块:
run cts-on-gsi -s 手机序列号 -m CtsCameraTestCases -t fail模块
Camera VTS 模块:
run vts -s 手机序列号 -m VtsHalCameraProviderV2_4TargetTest -t fail模块
camera GTS模块:
run gts -s 手机序列号 -m GtsCameraTestCases -t fail模块
4. 查看已经跑过的记录
l r 罗列出之前跑过的记录,包裹Session ID ,pass 项,Fail 项等,方便后续复测。
5. 复测之前跑过的fail 项
run retry --retry Sessionid
6. run cts --help 查看CTS更多指令
CTS
Google 官方文档
https://source.android.google.cn/docs/compatibility/cts?hl=zh-cn
测试命令
camera 模块全测命令:
run cts -s 手机序列号 -m CtsCameraTestCases
Camera 单独模块测试命令
run cts -s 手机序列号 -m CtsCameraTestCases -t fail模块
GTS
测试命令
Camera 模块全测命令:
run gts -s 手机序列号 -m GtsCameraTestCases
Camera 单独模块测试命令
run gts -s 手机序列号 -m GtsCameraTestCases -t fail模块
GSI
GKI-GSI 刷Google System 镜像
刷机后刷镜像: Google system.img
adb reboot bootloader
fastboot reboot fastboot
// 刷 google system img
fastboot flash system system.img
#fastboot flash system [GSI system.img] #signed_signed_asop_arm64_img-xxx(gsi包里的)
fastboot reboot bootloader
fastboot -w
fastboot reboot
GKI-GSI 测试指令:
camera 模块全测命令
run cts-on-gsi -s 手机序列号 -m CtsCameraTestCases
单模块 测试命令
run cts-on-gsi -s 手机序列号 -m CtsCameraTestCases -t fail模块
OKI-GSI 刷Google bootimage 镜像
刷机后刷镜像 boot.img
adb reboot bootloader
fastboot reboot fastboot
////////////google boot img
fastboot flash boot signed-gsi_arm64-img-11114065\boot-5.10.img
#fastboot flash boot [GKI 2.0 boot-5.10~5.15.img(版本路径里的)
fastboot reboot bootloader
fastboot -w
fastboot reboot
OKI-GSI 测试指令:
camera 模块全测命令
run cts-validation -s 手机序列号 -m CtsCameraTestCases
单模块 测试命令
run cts-validation -s 手机序列号 -m CtsCameraTestCases -t fail模块
VTS
GKI-VTS 刷Google System +vendor_boot 镜像
刷机后刷镜像 system.img vendor_boot-debug.img
adb reboot bootloader
fastboot reboot fastboot
// google system img
fastboot flash system system.img
// 需要更换vendor_boot debug img
fastboot flash vendor_boot vendor_boot-debug.img
#fastboot flash system [GSI system.img] #signed_signed_asop_arm64_img-xxx(gsi包里的)
#fastboot flash vendor_boot [in version patch vendor_boot-debug.img ] (版本路径里面)
fastboot reboot bootloader
fastboot -w
fastboot reboot
GKI-VTS 测试指令:
camera 模块全测命令
run vts -s 手机序列号 -m VtsHalCameraProviderV2_4TargetTest
单模块 测试命令
run vts -s 手机序列号 -m VtsHalCameraProviderV2_4TargetTest -t fail模块
OKI-GSI 刷Google boot+vendor boot
刷机后刷镜像 boot-5.10.img vendor_boot-debug.img
adb reboot bootloader
fastboot reboot fastboot
// google boot img
fastboot flash boot boot-5.10.img
// 需要更换vendor_boot debug img
fastboot flash vendor_boot vendor_boot-debug.img
# fastboot flash boot [GKI 2.0 boot-5.10~5.15.img(版本路径里的)
# fastboot flash vendor_boot [in version patch vendor_boot-debug.img ] (symbol压缩包里面,需要单独下)
fastboot reboot bootloader
fastboot -w
fastboot reboot
OKI-GSI 测试指令:
camera 模块全测命令
run run vts-validation -s 手机序列号 -m VtsHalCameraProviderV2_4TargetTest
单模块 测试命令
run run vts-validation -s 手机序列号 -m VtsHalCameraProviderV2_4TargetTest -t fail模块
ITS
Google 官方参考文档
https://source.android.google.cn/docs/compatibility/cts/camera-its-tests?hl=zh-cn#scene0
测试方法
1. 配置灯箱,测试机器,平板等等
修改 config.yml 文件,将测试机,以及平板的device id 替换,将测试图片push 到平板中,开启灯箱进行测试。
TestBeds:
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z---> 修改 用来测试的手机的device id
label: dut
- serial: 5B16001229-->修改为灯箱中用于存放图片的平板device id
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # "True" or "False"; quotes needed
lighting_cntl: <controller-type> # "arduino" or "None"; quotes needed
lighting_ch: <controller-channel>
camera: 0
foldable_device: "False". # set "True" if testing foldable
scene: <scene-name> # if <scene-name> runs all scenes
# SENSOR_FUSION 配置
Testbeds
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z---> 修改 用来测试的手机的device id
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino
rotator_ch: 1
camera: 0
2. source 环境
执行source build/envsetup.sh
:~/XTS/ITS/14/R3/test/android-cts-verifier-14_r3-linux_x86-arm/android-cts-verifier/CameraITS$ source build/envsetup.sh
CAMERA_ITS_TOP=/home/XTS/ITS/14/R3/test/android-cts-verifier-14_r3-linux_x86-arm/android-cts-verifier/CameraITS
*****Please execute below adb command on your dut before running the tests*****
adb -s <device_id> shell am compat enable ALLOW_TEST_API_ACCESS com.android.cts.verifier
3. 安装CTS verifier apk
安装apk 并按提示执行 adb -s <device_id> shell am compat enable ALLOW_TEST_API_ACCESS com.android.cts.verifier
:~/XTS/ITS/14/R3/test/android-cts-verifier-14_r3-linux_x86-arm/android-cts-verifier/$ adb install -r -g CtsVerifier.apk
:~/XTS/ITS/14/R3/test/android-cts-verifier-14_r3-linux_x86-arm/android-cts-verifier/CameraITS$ adb -s 33e86118B3240 shell am compat enable ALLOW_TEST_API_ACCESS com.android.cts.verifier
Enabled change 166236554 for com.android.cts.verifier.
4. ITS 相机主要测试场景
scene0:拍摄元数据、抖动、陀螺仪、振动
scene0 测试不需要具体的场景信息。但是,执行陀螺仪和振动测试时,手机必须静止不动。
scene1:曝光、感光度、EV 补偿、YUV 与 JPEG/RAW
scene2:人脸检测、需要彩色场景或完全黑暗的测试
scene3:边缘增强、镜头移动
Scene4:宽高比、剪裁、视野范围
scene5:镜头阴影
scene6:缩放
scene_extensions:相机扩展
sensor_fusion:相机/陀螺仪时间偏差
5. 单场景测试命令
后摄像头单个场景测试
比如需要测试后摄 场景0 ,可以执行下面命令
python tools/run_all_tests.py camera=0 scenes=0
:~/XTS/ITS/14/R3/android-cts-verifier-14_r3-linux_x86-arm/android-cts-verifier/CameraITS$ python tools/run_all_tests.py camera=0 scenes=0
INFO:root:Saving test_bed_tablet_scenes output files to: /tmp/CameraITS_705uiw4u
INFO:root:Running ITS on device: 33e86118B3240, camera(s): ['0'], scene(s): ['scene0']
INFO:root:camera: 0, scene(s): ['scene0']
INFO:root:Using config_vfytn673.yml as temporary config yml file
INFO:root:Running tests for scene0 with camera 0
INFO:root:PASS scene0/test_burst_capture.py
... ...
6. 多场景测试命令
后摄像头多场景测试:
python tools/run_all_tests.py camera=0 scenes=0,1,2,3,4,6
:~/XTS/ITS/14/R3/test/android-cts-verifier-14_r3-linux_x86-arm/android-cts-verifier/CameraITS$ python tools/run_all_tests.py camera=0 scenes=0,1,2,3,4,6
INFO:root:Saving test_bed_tablet_scenes output files to: /tmp/CameraITS_hb57s37g
INFO:root:Running ITS on device: 33e86118B3240, camera(s): ['0'], scene(s): ['scene0', 'scene1_1', 'scene1_2', 'scene2_a', 'scene2_b', 'scene2_c', 'scene2_d', 'scene2_e', 'scene2_f', 'scene3', 'scene4', 'scene6']
INFO:root:camera: 0, scene(s): ['scene0', 'scene1_1', 'scene1_2', 'scene2_a', 'scene2_b', 'scene2_c', 'scene2_d', 'scene2_e', 'scene2_f', 'scene3', 'scene4', 'scene6']
INFO:root:Using config__v2_mhgn.yml as temporary config yml file
INFO:root:Running tests for scene0 with camera 0
INFO:root:PASS scene0/test_burst_capture.py
INFO:root:PASS scene0/test_capture_result_dump.py
INFO:root:PASS scene0/test_gyro_bias.py
INFO:root:PASS scene0/test_jitter.py
INFO:root:PASS scene0/test_metadata.py
... ...
测试场景
1. scene0
拍摄元数据、抖动、陀螺仪、振动
scene0 测试不需要具体的场景信息。但是,执行陀螺仪和振动测试时,手机必须静止不动。测试后放置到桌面上即可
INFO:root:PASS scene0/test_burst_capture.py
用于验证整个拍摄流水线是否能跟上全尺寸拍摄的速度和 CPU 运行速度 。
通过:连拍多张全尺寸图像,相机的运行速度足够快,能避免超时
INFO:root:PASS scene0/test_capture_result_dump.py
用于测试手动拍摄操作能否返回拍摄结果,然后转储相应结果。
通过:完成拍摄并转储拍摄结果。
INFO:root:PASS scene0/test_gyro_bias.py
用于测试当设备处于静止状态时,陀螺仪是否有稳定的输出。系统会用 20 个数据点的平均值绘制数据。
通过:随着时间的推移,陀螺仪读数的增量小于 0.01
INFO:root:PASS scene0/test_jitter.py
用于测量相机时间戳中的抖动。
通过:帧之间至少有 30 毫秒的增量
INFO:root:PASS scene0/test_metadata.py
用于测试元数据条目的有效性。查看拍摄结果和相机特征对象。此测试使用 auto_capture_request 曝光值和增益值,因为图像内容并不重要。
通过:硬件级别、rollingShutterSkew、frameDuration 标记、timestampSource、croppingType、blackLevelPattern、pixel_pitch、FoV、超焦距存在并且具有有效值。
INFO:root:PASS scene0/test_param_sensitivity_burst.py
用于测试在连拍过程中是否正确应用了 android.sensor.sensitivity 参数。仅检查输出元数据。
通过:输出数据的容错率低于 0.2%。
通过:所有照片中的读取和写入值均一致。
INFO:root:PASS scene0/test_read_write.py
用于通过读取拍摄元数据来测试设备是否写入了正确的曝光值和增益值
INFO:root:PASS scene0/test_sensor_events.py
用于测试通告支持传感器融合的设备是否会查询并输出传感器事件。传感器应为加速度计、陀螺仪和磁力计。此测试仅在屏幕开启时有效,这意味着设备不处于待机模式。
通过:收到每个传感器的事件。
INFO:root:PASS scene0/test_solid_color_test_pattern.py
用于测试是否会在屏蔽相机时正确生成纯色测试图案。 如果支持相机屏蔽功能,则必须支持纯色测试图案。 如果不支持相机屏蔽功能,则只会在通告该功能时测试纯色测试图案。
如果支持 RAW 图像,也会测试颜色分配。所测试的颜色为黑色、白色、红色、蓝色和绿色。对于不支持 RAW 图像的相机,仅测试黑色。
通过:支持的纯色测试图案是正确的颜色,且图像中的差异较小。
NFO:root:PASS scene0/test_test_patterns.py
用于测试 android.sensor.testPatternMode 参数是否拍摄了每个有效测试图案的帧,并检查是否针对纯色和彩条正确生成了帧。此测试包括以下步骤:
拍摄所有受支持的测试图案的图像。
对纯色测试图案和彩条执行简单的正确性检查。
通过:正确生成支持的测试图案。
INFO:root:SKIP scene0/test_tonemap_curve.py
用于使用线性色调映射来测试从 RAW 到 YUV 的测试图案转换。此测试使用需要 android.sensor.testPatternMode = 2 (COLOR_BARS) 为色调映射转换生成完美的图像图案。确保流水线采用具有线性色调映射和理想图像输入的适当颜色输出(依赖于 test_test_patterns)。
通过:YUV 和 RAW 看起来彼此相似。
INFO:root:PASS scene0/test_unified_timestamps.py
用于测试图像和移动传感器事件是否在同一时域中。
通过:移动时间戳介于两个图像时间戳之间。
INFO:root:SKIP scene0/test_vibration_restriction.py
用于测试设备的振动是否符合预期。
通过:相机音频限制 API 将设备设置为静音后,设备不会振动。
INFO:root:11 / 11 tests passed (100.0%),2 tests skipped
INFO:root:scene tests: 13, Total tests passed: 11
2. scene1_1
scene1 是一种灰色图。灰色图表必须覆盖相机视野范围的中心 30%。该灰色图预计会适度质询 3A(自动曝光、自动白平衡和自动对焦),因为中心区域没有任何特征。不过,拍摄请求会指定整个场景,其中包含足够 3A 进行收敛的特征。
RFoV 相机可以在 WFoV 或 RFoV 测试装置内进行测试。如果在 WFoV 测试装置内测试 RFoV 相机,该图会按 ⅔ 的比例缩放,以确保 FoV 中灰色图的部分边界能够帮助 3A 进行收敛。 如需详细了解相机测试装置
INFO:root:Running tests for scene1_1 with camera 0
INFO:root:PASS scene1_1/test_3a.py
用于使用具有中等挑战性的目标测试 3A 的收敛。
通过:3A 会进行收敛且返回的 3A 值有效。
INFO:root:PASS scene1_1/test_ae_af.py
用于分别测试 3A 自动曝光 (AE) 和自动对焦 (AF) 算法。
通过:3A 会进行收敛且返回的 3A 值合法。
INFO:root:PASS scene1_1/test_ae_precapture_trigger.py
用于在使用预拍触发器时测试 AE 状态机。在 AE 停用的情况下拍摄 5 个手动请求。最后一个请求具有 AE 预拍触发器,该触发器应被忽略,因为 AE 已被停用。
通过:AE 会收敛。
INFO:root:PASS scene1_1/test_auto_vs_manual.py
用于测试自动拍摄的照片和手动拍摄的照片看起来是否相同。
通过:每个拍摄结果中报告的手动白平衡增益和变形都与相机 3A 算法中的自动白平衡 estimate 一致。
INFO:root:PASS scene1_1/test_black_white.py
用于测试设备是否可以生成全黑和全白的图像。拍摄两张照片,第一张用极低的增益和极短的曝光,得到一张黑色的照片;第二张用极高的增益和极长的曝光,得到一张白色的照片。
通过:生成黑色图像和白色图像。白色图像的饱和通道的 RGB 值为 [255, 255, 255],并且误差范围小于 1% 的差值。
INFO:root:PASS scene1_1/test_burst_sameness_manual.py
使用手动拍摄设置连拍 5 次,共拍摄 50 张图像,然后检查这些图像是否完全相同。此测试可用于识别是否有零星的帧以不同方式处理或有伪影。
通过:图像在视觉上和 RGB 值上完全相同。
INFO:root:PASS scene1_1/test_capture_result.py
用于测试 CaptureResult 对象中是否返回有效的数据。依次执行自动拍摄、手动拍摄和自动拍摄。
通过:元数据适用于所有拍摄,并且手动设置不会泄露到第二次自动拍摄中。绘制出拍摄的镜头阴影校正。
INFO:root:PASS scene1_1/test_crop_region_raw.py
用于测试 RAW 数据流是否无法剪裁。
通过:YUV 图像的中心区域被剪裁掉了,但 RAW 图像没有。
INFO:root:SKIP scene1_1/test_crop_regions.py
用于测试剪裁区域的呈现效果。截取一整张图像,并创建涉及 5 个不同区域(角落和中心)的小块图片。截取 5 个区域的图像并设置剪裁。比较小块图片和剪裁图像值。
通过:剪裁区域的图像与对应于剪裁图像的小块图片一致。
INFO:root:FAIL scene1_1/test_dng_noise_model.py
用于验证 DNG 原始模型参数是否正确。该图描述了在一系列感光度下拍摄的原始照片中灰色卡片中心小块图片的测量方差,然后将这些值与相机 HAL 中的 DNG 噪声模型在每个感光度下预计会有的方差进行比较(基于拍摄结果对象中返回的 O,S 参数)
通过:DNG 原始模型参数正确无误。预期的 RGB 值与实际测量的 RGB 值一致。
INFO:root:FAIL scene1_1/test_ev_compensation_advanced.py
用于测试是否应用了曝光值 (EV) 补偿。该测试通过 8 步提高曝光量,并检查测得的亮度与预期亮度的对比情况。预期值根据未应用 EV 补偿的图片的亮度计算得出,如果计算得出的值超过图片实际值的范围,预期值会达到饱和。如果预期值与测量值不匹配,或图像在 5 步内过度曝光,测试会失败
通过:图像在 5 步内逐步提高曝光量,且未出现过度曝光的情况。
INFO:root:PASS scene1_1/test_ev_compensation_basic.py
测试是否使用通过 CONTROL_AE_COMPENSATION_STEP 创建的范围应用了 EV 补偿。在每个补偿值时都会捕获 8 帧。
通过:EV 补偿设置增加后拍摄亮度增加,并且为每项 EV 补偿设置拍摄的 8 帧具有稳定的亮度值。
INFO:root:PASS scene1_1/test_exposure.py
用于测试随着 ISO 和曝光时间的变化,是否可以实现恒定的曝光。拍摄一系列照片,通过选择 ISO 和曝光时间来实现彼此平衡。结果应具有相同的亮度,但在该序列中,图像应该变得更嘈杂。验证样本像素平均值是否接近。确保图像不会固定为 0 或 1(这会使它们看起来像平坦的线条)。此外,您还可以通过在配置文件中设置 debug 标志来使用 RAW 映像运行测试。
通过:图像具有相同的亮度,但 ISO 越高,图像会越嘈杂。在被测增益空间上 ISO *曝光量不变的情况下,RGB 平面是平坦的。
INFO:root:PASS scene1_1/test_jpeg.py
用于测试转换后的 YUV 图像和设备 JPEG 图像看起来是否相同。该测试截取图像中心 10% 的区域并计算其 RGB 值,然后验证它们是否一致
通过:每张图像之间的平均 RGB 差值低于 3%。
INFO:root:PASS scene1_1/test_latching.py
用于测试 FULL 和 LEVEL_3 相机的设置(曝光和增益)是否固定在合适的帧上。使用连续请求拍摄一系列照片,在不同的照片之间使用不同的拍摄请求参数。检查图像是否具有预期的属性
通过:图像 [2、3、6、8、10、12、13] 增加了 ISO 或曝光量,并且 test_latching_plot_means.png 中显示出更高的 RGB 均值。
INFO:root:PASS scene1_1/test_linearity.py
用于测试设备处理是否可以反转为线性像素。让设备对准统一的目标,拍摄一系列照片。
通过:R、G、B 值必须随着感光度的提升而线性增加。
INFO:root:PASS scene1_1/test_locked_burst.py
用于测试 3A 锁定和 YUV 连拍(使用自动设置)。此测试设计为即使在没有 MANUAL_SENSOR 或 PER_FRAME_CONTROLS 的受限设备上也可以通过。当 CTS 中包含帧速率检查时,此测试会检查 YUV 图像一致性。
通过:拍摄效果一致。
INFO:root:FAIL scene1_1/test_param_color_correction.py
用于测试设置后是否应用了 android.colorCorrection.* 参数。使用不同的变形值和增益值拍摄照片,并测试它们是否看起来也相应不同。选择变形和增益,使输出越来越红或越来越蓝。使用线性色调映射。色调映射是图像处理中使用的一种技术,用于将一组颜色映射到另一组颜色,以估算高动态范围图像在动态范围较为受限的媒介中的外观。
通过:R 和 B 值根据变形而提升。
INFO:root:PASS scene1_1/test_param_exposure_time.py
用于测试是否应用了 android.sensor.exposureTime 参数。
通过:每张照片都比前一张照片亮。
INFO:root:SKIP scene1_1/test_param_flash_mode.py
用于测试是否应用了 android.flash.mode 参数。手动将曝光位置设置为深色侧,以便清楚地知道闪光灯是否触发,并使用线性色调映射。使用图块图像检查中心区域,查看是否有较大的渐变来验证闪光灯是否已触发
通过:图块图像的中心有一个较大的渐变,表示闪光灯已触发。
INFO:root:PASS scene1_1/test_param_noise_reduction.py
用于测试 android.noiseReduction.mode 参数是否在设置后正确应用。在相机光线较暗的情况下拍摄图像。使用高模拟增益以确保拍摄的图像是嘈杂的。在“NR 关闭”、“快速”和“高画质”场景下拍摄三张图像。此外,在低增益和 NR 关闭这一场景下拍摄一张图像,并将其方差作为基准。SNR(信噪比)越高,图像画质越高。
通过:SNR 因不同的降噪模式而异,其表现类似下图所示。
INFO:root:16 / 19 tests passed (84.2%),2 tests skipped
INFO:root:scene tests: 21, Total tests passed: 27
3 . scene1_2
INFO:root:Running tests for scene1_2 with camera 0
INFO:root:PASS scene1_2/test_param_sensitivity.py
用于测试是否应用了 android.sensor.sensitivity 参数。该测试通过 5 步提高了感光度,每一张照片都有固定的曝光量。
通过:中心 10% 区域的 RGB 均值变高,画面更亮,因为感光度更高了。
INFO:root:PASS scene1_2/test_param_shading_mode.py
用于测试是否应用了 android.shading.mode 参数。
通过:着色模式会切换,镜头阴影映射已按预期修改。
INFO:root:PASS scene1_2/test_param_tonemap_mode.py
用于测试是否应用了 android.tonemap.mode 参数。为每个 R、G、B 通道应用不同的色调映射曲线,并检查输出图像是否已按预期修改。此测试包含两个测试:test1 和 test2
通过:
test1:两个图像都具有线性色调映射,但 n=1 的渐变曲线更陡。对于 n=1 图像,G(绿色)通道更亮。
test2:色调映射相同,但长度不同。图像相同。
INFO:root:PASS scene1_2/test_post_raw_sensitivity_boost.py
用于检查 RAW 感光度提升后的情况。拍摄一组具有不同感光度的 RAW 和 YUV 图像,发布 RAW 感光度提升组合,并检查输出像素均值是否与请求设置一致。
通过:RAW 图像随感光度提升而变暗,而 YUV 图像的亮度保持不变。
INFO:root:PASS scene1_2/test_raw_burst_sensitivity.py
拍摄一组增益越来越高的原始图像,并测量噪声。在连拍中只拍摄原始照片。
通过:随着增益的增加,每张照片都比前一张照片嘈杂。
INFO:root:PASS scene1_2/test_raw_exposure.py
拍摄一组曝光时间越来越长的原始图像,并测量像素值。
通过:增加 ISO(增益)会使像素对光线更加敏感,因此该图会向左移动。
INFO:root:PASS scene1_2/test_raw_sensitivity.py
拍摄一组感光度越来越高的原始图像,并测量图像中心 10% 区域的噪声(方差)。用于测试是否每张照片都比前一张照片嘈杂
通过:方差随每张照片而增加。
INFO:root:PASS scene1_2/test_reprocess_noise_reduction.py
用于测试是否已针对重新处理请求应用 android.noiseReduction.mode。在相机光线较暗的情况下拍摄重新处理后的图像。使用高模拟增益以确保拍摄的图像是嘈杂的。在“NR 关闭”、“快速”和“高画质”场景下拍摄三张重新处理后的图像。在低增益和 NR 关闭这一场景下拍摄一张重新处理后的图像,并将其方差作为基准。
通过:快速 >= 关闭,高清 >= 快速,高清 >> 关闭
INFO:root:PASS scene1_2/test_tonemap_sequence.py
用于使用不同的色调映射曲线测试一系列照片。使用线性色调映射拍摄 3 张手动照片。使用默认色调映射拍摄 3 张手动照片。计算每个连续帧对之间的增量。
通过:有 3 个完全相同的帧,后跟一个由 3 个完全相同的帧组成的不同集合。
INFO:root:PASS scene1_2/test_yuv_jpeg_all.py
用于测试图像拍摄的所有报告尺寸和格式是否都正常。使用带有线性色调映射的手动请求,使 YUV 和 JPEG 在由 image_processing_utils 模块转换时看起来一样。默认情况下,图像不会保存,但可通过启用 debug_mode 来保存。
通过:在经过 RGB 转换后的图像中,所有图像中心的最大 RMS(信号均方根值)差为最高分辨率 YUV 图像的 3%。
INFO:root:PASS scene1_2/test_yuv_plus_dng.py
用于测试图像拍摄的报告尺寸和格式是否都正常。
通过:测试完成并返回所请求的图像。
INFO:root:PASS scene1_2/test_yuv_plus_jpeg.py
用于测试能否以 YUV 和 JPEG 输出形式拍摄单个帧。使用带有线性色调映射的手动请求,使 YUV 和 JPEG 在由 image_processing_utils 模块转换时看起来一样。
通过:YUV 和 JPEG 图像类似,并且其 RMS(信号均方根值)差小于 1%。
INFO:root:FAIL scene1_2/test_yuv_plus_raw.py
用于测试能否以 RAW/RAW10/RAW12 和 YUV 输出形式拍摄单个帧。使用带有线性色调映射的手动请求,这样 RAW 和 YUV 预计可以保持不变。比较经过 RGB 转换后的图像的中心 10% 的 RGB 值。记录 android.shading.mode。
通过:YUV 和 RAW 图像类似,并且其 RMS(信号均方根值)差小于 3.5%。
INFO:root:12 / 13 tests passed (92.3%)
INFO:root:scene tests: 13, Total tests passed: 39
INFO:root:scene1_2 compatibility score: 92/100
4. scene2_a
scene2_a 中包含三个人脸,背景均为灰色,身穿中性服装。这些人脸经过精心选择,涵盖了多种肤色。 为使人脸检测以最佳方式运行,图表必须采用正确的屏幕方向。
INFO:root:Running tests for scene2_a with camera 0
Turn lights OFF in rig and press <ENTER> to continue.
INFO:root:SKIP scene2_a/test_auto_flash.py
用于测试在黑暗环境中是否会触发自动闪光灯。通过检查图块图像的中心是否有较大的渐变,验证是否触发了自动闪光灯。如需触发自动闪光灯,必须关闭测试装置中的平板电脑和灯。平板电脑会在测试时被关闭,灯则可以通过 Arduino 控制器自动关闭。场景必须完全保持黑暗,测试才能正常运行。因此,后部平板电脑开口必须完全被场景平板电脑覆盖,并且前部开口必须由开孔和 DUT 手机覆盖,以防止杂质光进入测试装置
通过:图块图像的中心有一个较大的渐变,表示自动闪光灯已触发。
Turn lights ON in rig and press <ENTER> to continue.
INFO:root:SKIP scene2_a/test_display_p3.py
用于测试使用 ColorSpaceProfiles API 以 JPEG 格式拍摄 Display P3 图像。测试拍摄的 JPEG 在其标头中是否包含适当的 ICC 色彩特性文件,以及图像是否包含 sRGB 色域之外的颜色。
通过:JPEG 包含 Display P3 ICC 色彩特性文件和 sRGB 色域之外的颜色。
INFO:root:PASS scene2_a/test_effects.py
拍摄帧以获取支持的相机效果,并检查这些效果是否正确生成。该测试仅检查效果 OFF 和 MONO,但会保存图像以获取所有受支持的效果
通过:拍摄具有 OFF 效果的场景图像,以及效果设置为 MONO 的单色图像。
INFO:root:PASS scene2_a/test_format_combos.py
用于测试不同的输出格式组合。
通过:所有组合都已成功捕获。
INFO:root:PASS scene2_a/test_jpeg_quality.py
用于测试相机 JPEG 压缩质量。通过 android.jpeg.quality 逐步提高 JPEG 画质,并确保量化表正确更改。
通过:量化矩阵随着画质的提高而降低(矩阵表示除法因子)。
INFO:root:PASS scene2_a/test_num_faces.py
用于测试执行人脸检测的能力。
通过:找到三个人脸。
Turn lights OFF in rig and press <ENTER> to continue.
INFO:root:SKIP scene2_a/test_preview_min_frame_rate.py
用于测试在黑暗环境中是否正确降低预览帧速率为使此测试正常运行,必须由控制器关闭测试装置中的灯或由测试操作员手动关闭。
通过:预览帧速率是所请求帧速率范围的最小值,并且帧之间的变化小于测试中设置的绝对公差
Turn lights ON in rig and press <ENTER> to continue.
INFO:root:FAIL scene2_a/test_reprocess_uv_swap.py
用于测试 YUV 重新处理不会交换 U 和 V 平面。检测方法为计算经过重新处理的图像与未经重新处理的拍摄图像之间的绝对差总和 (SAD)。如果交换经过重新处理的拍摄图像的输出 U 平面和 V 平面导致 SAD 增加,系统会假定输出具有正确的 U 平面和 V 平面。
通过:U 平面和 V 平面不交换。
INFO:root:4 / 5 tests passed (80.0%),3 tests skipped
INFO:root:scene tests: 8, Total tests passed: 43
INFO:root:scene2_a compatibility score: 50/100
5.scene2_b
INFO:root:Running tests for scene2_b with camera 0
INFO:root:PASS scene2_b/test_num_faces.py
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
通过:找到 3 个人脸。
INFO:root:SKIP scene2_b/test_yuv_jpeg_capture_sameness.py
使用最大的通用 YUV 和 JPEG 格式拍摄两张图片,这些图片的宽高比与最大 JPEG 格式相同,且分辨率不超过 1920x1440。将 jpeg.quality 设置为 100,并捕获双重 surface 请求。将两张图片转换为 RGB 数组,并计算两张图片之间的 3D 均方根 (RMS) 差
通过:YUV 和 JPEG 图像类似,并且其 RMS(信号均方根值)差小于 1%。
INFO:root:1 / 1 tests passed (100.0%),1 test skipped
INFO:root:scene tests: 2, Total tests passed: 44
INFO:root:scene2_b compatibility score: 50/100
6. scene2_c
INFO:root:Running tests for scene2_c with camera 0
INFO:root:PASS scene2_c/test_camera_launch_perf_class.py
按照 CDD 中 2.2.7.2 相机一节的规定,为 S 性能等级测试相机启动延迟时间。
通过:根据 CTS 摄像头性能测试在 ITS 照明条件 (3000K) 下对这两种主摄像头的测量,摄像头 2 的启动延迟(从打开摄像头到第一个预览帧)必须小于 600 毫秒。
INFO:root:PASS scene2_c/test_jpeg_capture_perf_class.py
按照 CDD 中 2.2.7.2 相机一节的规定,为 S 性能等级测试 JPEG 拍摄延迟时间。
通过:根据 CTS 摄像头性能测试在 ITS 照明条件 (3000K) 下对这两种主摄像头的测量,在分辨率为 1080p 的情况下,摄像头 2 的 JPEG 拍摄延迟必须小于 1000 毫秒。
INFO:root:FAIL scene2_c/test_num_faces.py
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
通过:找到 3 个人脸。
INFO:root:2 / 3 tests passed (66.7%)
INFO:root:scene tests: 3, Total tests passed: 46
INFO:root:scene2_c compatibility score: 67/100
7. scene2_d
INFO:root:Running tests for scene2_d with camera 0
INFO:root:SKIP scene2_d/test_autoframing.py
用于测试相机设备的自动取景行为。进行大变焦,使得场景中的人脸都不可见,通过将 CaptureRequest 中的 AUTOFRAMING 设为 True 来启用自动取景模式;并验证当状态收敛时(即 CaptureResult 中的 AUTOFRAMING_STATE 设为 AUTOFRAMING_STATE_CONVERGED),是否可以检测到原始场景中的所有人脸。
通过:所有三张人脸都检测到。
INFO:root:FAIL scene2_d/test_num_faces.py
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
通过:找到 3 个人脸。
INFO:root:0 / 1 tests passed (0.0%),1 test skipped
INFO:root:scene tests: 2, Total tests passed: 46
INFO:root:scene2_d compatibility score: 0/100
8. scene2_e
INFO:root:PASS scene2_e/test_continuous_picture.py
系统会使用拍摄请求第一个设置 android.control.afMode = 4 (CONTINUOUS_PICTURE). 拍摄 50 个 VGA 分辨率帧。
通过:3A 系统在 50 帧拍摄结束时稳定下来。
INFO:root:PASS scene2_e/test_num_faces.py
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
通过:找到 3 个人脸。
INFO:root:2 / 2 tests passed (100.0%)
INFO:root:scene tests: 2, Total tests passed: 48
INFO:root:scene2_e compatibility score: 100/100
9. scene2_f
INFO:root:Running tests for scene2_f with camera 0
INFO:root:PASS scene2_f/test_num_faces.py
用于测试在增加人脸场景中肤色的多样性后执行人脸检测的能力。
通过:找到 3 个人脸。
INFO:root:1 / 1 tests passed (100.0%)
INFO:root:scene tests: 1, Total tests passed: 49
INFO:root:scene2_f compatibility score: 100/100
10. scene3
Scene3 使用 ISO12233 图卡,并且大多数测试都使用图卡提取器方法从场景中查找图卡。因此,大多数已保存的图像并不像场景 1、2、4 的图像那样有边框,而是只有图卡。 图表的方向必须正确,图表查找器才能以最佳方式运作
INFO:root:Running tests for scene3 with camera 0
INFO:root:FAIL scene3/test_3a_consistency.py
用于测试 3A 一致性。
通过:3A 针对曝光、增益、AWB(自动白平衡)和 FD(焦距对焦距离)三者在公差范围内收敛。
INFO:root:PASS scene3/test_edge_enhancement.py
用于测试是否正确应用了 android.edge.mode 参数。为每个边缘模式拍摄未进行重新处理的图像,并返回输出图像的锐度和拍摄结果元数据。处理具有指定边缘模式、感光度、曝光时间、焦距和输出表面参数的拍摄请求。
通过:HQ 模式 (2) 比 OFF 模式 (0) 更清晰。FAST 模式 (1) 比 OFF 模式更清晰。HQ 模式比 FAST 模式更清晰,或这两种模式一样清晰。
INFO:root:PASS scene3/test_flip_mirror.py
按照 CDD 7.5.2 前置摄像头 [C-1-5] 一节测试图像是否面向正确方向。
经过镜像、翻转或旋转处理的图像可以通过中心位置附近的菱形特征进行标识。
通过:图像未经过翻转、镜像或旋转。
INFO:root:FAIL scene3/test_landscape_to_portrait.py
用于测试横向传感器,验证横向到纵向覆盖功能是否正常工作。
通过:测试能够找到具有预期旋转角度的图表(停用横向到纵向覆盖功能时,为 0 度;启用时,为 90 度)
INFO:root:PASS scene3/test_lens_movement_reporting.py
用于测试系统是否正确报告镜头移动标志。连拍 24 张图像,前 12 帧采用最佳焦距(如 3A 所示),后 12 帧采用最小焦距。在第 12 帧左右,镜头会移动,导致锐度下降。随着镜头移到最终位置,锐度最终稳定下来。在锐度介于头几帧(镜头稳定在最佳焦距)中锐度和最后几帧(镜头稳定在最小焦距)中锐度的所有帧中,都应断言镜头移动标志。镜头移动具体发生在哪一帧并不重要:您需要检查的是镜头移动时是否断言了移动标志。
通过:在锐度发生了变化的帧中,镜头移动标志为 True。
INFO:root:PASS scene3/test_reprocess_edge_enhancement.py
用于测试支持的边缘增强重新处理方法是否正常工作。 处理具有指定重新处理边缘模式的拍摄请求,并将不同的模式进行比较,以便在停用了重新处理边缘模式的情况下进行拍摄。
通过:不同边缘模式的锐度正确无误。HQ(模式 2)比 OFF(模式 0)更清晰,并且不同模式之间的改进类似。
INFO:root:4 / 6 tests passed (66.7%)
INFO:root:scene tests: 6, Total tests passed: 53
INFO:root:scene3 compatibility score: 67/100
11. scene4
Scene4 由方形内白色背景上的黑色圆圈组成。
INFO:root:FAIL scene4/test_preview_aspect_ratio_and_crop.py
此测试类似于针对静态拍摄图像的 test_aspect_ratio_and_crop 测试,用于检查支持的预览格式,以确保视频画面不会被不当拉伸或剪裁。验证圆圈的宽高比是否不变、剪裁后的图像是否将圆圈保持在帧的中心位置,以及圆圈大小在固定的格式或不同的分辨率下是否不会改变(视野范围检查)
通过:图像未拉伸,图像中心相差不超过 3%,并保留了最大的可能 FoV(视野范围)。
INFO:root:SKIP scene4/test_preview_stabilization_fov.py
检查支持的预览画面尺寸,以确保适当剪裁 FoV。该测试会拍摄两个视频,一个是将预览防抖功能设为 ON,另一个是将预览防抖功能设为 OFF。系统会从每个视频中选出一帧有代表性的画面,对其进行分析,以确保两个视频的 FoV 变化符合规范要求。
通过:圆圈宽高比保持大致不变,圆圈的中心位置保持不变,并且圆圈的大小变化幅度不超过 20%。
INFO:root:SKIP scene4/test_video_aspect_ratio_and_crop.py
使用所有视频格式拍摄一个正方形内的圆圈的照片。提取关键帧,并验证圆圈的宽高比是否不变、剪裁后的图像是否将圆圈保持在中心位置,以及圆圈大小在固定的格式或不同的分辨率下是否不会改变(视野范围检查)。
通过:视频帧未拉伸,帧中心变化不超过 3%,并保留了可能的最大 FoV(视野范围)。
INFO:root:0 / 2 tests passed (0.0%),3 tests skipped
INFO:root:scene tests: 5, Total tests passed: 53
INFO:root:scene4 compatibility score: 0/100
12. scene6
Scene6 是一个由小圆圈组成的网格,有个角中有一个方形,表示方向。需要使用小圆圈测试大范围内的缩放功能。
INFO:root:Running tests for scene6 with camera 0
INFO:root:SKIP scene6/test_in_sensor_zoom.py
用于测试相机传感器内变焦功能的行为,该功能可生成剪裁过的 RAW 图像。
将数据流用例设置为 CROPPED_RAW 后,该测试将在变焦范围内拍摄两幅图像,即全视野范围 (FoV) RAW 图像和剪裁后的 RAW 图像。该测试会将图像转换为 RGB 数组,将完整尺寸的剪裁后 RAW 图片缩小为 SCALER_RAW_CROP_REGION 报告的大小,并计算两幅图像之间的 3D 均方根 (RMS) 差。
通过:经过缩小的剪裁后 RAW 图像和完整尺寸 FoV RAW 图像之间的 3D 均方根 (RMS) 差小于 1%。
INFO:root:SKIP scene6/test_low_latency_zoom.py
用于测试相机低延迟变焦行为。使用 android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) 在变焦范围内拍摄图像,并检查输出图像中的圆圈与拍摄图像元数据中的缩放比例是否匹配。
通过:对照缩放比例结果元数据,所拍摄圆圈的相对大小是准确的。
INFO:root:SKIP scene6/test_preview_video_zoom_match.py
用于测试在录制和变焦时,视频预览和视频输出能否显示和录制相同的输出。计算在不同缩放比例下最靠近中心的圆圈的大小,并检查圆圈的大小是否随着缩放比例的增加而增大。
通过:对照视频和预览中请求的缩放比例,所拍摄圆圈的相对大小是准确的。
INFO:root:PASS scene6/test_zoom.py
用于测试相机变焦行为。在变焦范围内拍摄照片,并在相机拉近时查看圆圈是否变大。
通过:捕获的圆圈的相对大小与请求的缩放比例相对照是准确的,以确保相机正确缩放。
INFO:root:1 / 1 tests passed (100.0%),3 tests skipped
INFO:root:scene tests: 4, Total tests passed: 54
INFO:root:scene6 compatibility score: 25/100
13. sensor_fusion
传感器融合测试需要手机在棋盘格图案前沿特定方向移动。为获得最佳效果,务必将测试图表放平。未平放的图表会影响许多测试的旋转计算。sensor_fusion 测试可以通过传感器融合盒来自动执行。
如需使用传感器融合盒运行 sensor_fusion 测试,请运行以下命令:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
参考文献:
【腾讯文档】Camera学习知识库https://docs.qq.com/doc/DSWZ6dUlNemtUWndv
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
点击阅读原文,为大佬点赞!