相機 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擷取元資料、抖動、陀螺儀、振動
  • scene1曝光、感光度、EV 補償、YUV 與 JPEG/RAW
  • scene2人臉偵測,需要彩色場景或完全黑暗的測試
  • scene3邊緣增強,鏡頭移動
  • scene4長寬比、裁切、視野
  • 場景5鏡頭陰影
  • 場景6變焦
  • scene_extensions相機擴展
  • Sensor_fusion相機/陀螺儀定時偏移

有關每個場景的描述,請參閱各個部分。

場景0

Scene0 測試不需要特定的場景資訊。但是,手機必須靜止才能進行陀螺儀和震動測試。

測試突發捕獲

驗證整個捕獲管道是否能夠跟上全尺寸捕獲的速度和 CPU 時間。

測試的 API:

通過:連​​拍全尺寸影像,相機速度夠快,可以避免超時。

測試捕獲結果轉儲

測試手動捕獲是否返回捕獲結果,然後轉儲它。

測試的 API:

通過:完成捕獲並轉儲捕獲結果。

測試陀螺儀偏置

測試設備靜止時陀螺儀是否有穩定輸出。數據繪製為 20 個數據點的平均值。

測試的 API:

通過:隨著時間的推移,陀螺儀讀數的增量小於 0.01。

test_gyro_bias_plot.png

test_gyro_bias_plot.png

測試抖動

測量相機時間戳記中的震動。

測試的 API:

通過:幀之間至少有 30 毫秒的增量。

test_jitter_plot.png

test_jitter_plot.png(請注意 y 軸範圍較小。該圖中的抖動實際上很小。)

測試元數據

測試元資料條目的有效性。查看捕捉結果和相機特徵物件。此測試使用auto_capture_request曝光和增益值,因為影像內容並不重要。

測試的 API:

通過:硬體等級、 rollingShutterSkewframeDuration標籤、 timestampSourcecroppingTypeblackLevelPatternpixel_pitch 、FoV、超焦距均存在且具有有效值。

test_param_sensitivity_burst

測試android.sensor.sensitivity參數是否在突發中正確應用。僅檢查輸出元資料。

測試的 API:

通過:輸出資料誤差小於0.2%。

測試讀寫

透過讀回擷取元資料來測試裝置是否寫入正確的曝光和增益值。

測試的 API:

通過:所有鏡頭的讀取和寫入值都匹配。

測試感測器事件

測試設備查詢並列印出宣傳感測器融合支援的設備的感測器事件。預期的感測器有加速度計、陀螺儀和磁力計。此測試僅在螢幕開啟時才有效,這表示裝置未處於待機模式。

測試的 API:

通過:接收每個感測器的事件。

測試實體顏色測試圖案

測試是否正確產生用於相機靜音的純色測試圖案。如果支援相機靜音,則必須支援純色測試圖案。如果不支援相機靜音,則僅在宣傳功能時才測試純色測試圖案。

如果支援 RAW 影像,也會測試色彩分配。測試的顏色有黑、白、紅、藍、綠。對於不支援RAW影像的相機,僅測試黑色。

測試的 API:

通過:支援的實體測試圖案是正確的顏色,且影像中的方差很小。

測試測試模式

測試android.sensor.testPatternMode參數以捕捉每個有效測試模式的幀,並檢查是否為純色和色彩條正確產生了幀。該測試包括以下步驟:

  1. 擷取所有支援的測試模式的影像。
  2. 對純色測試圖案和色條執行簡單的正確性檢查。

測試的 API:

通過:正確產生支援的測試模式。

測試_測試_模式_2

test_test_patterns_2.jpg

測試色調圖曲線

使用線性色調圖測試測試圖案從 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

測試統一時間戳

測試影像和運動感應器事件是否處於相同時域。

測試的 API:

通過:運動時間戳位於兩個影像時間戳記之間。

測試振動限制

測試設備的振動是否如預期運作。

測試的 API:

通過:透過相機音訊限制 API 將裝置靜音時,裝置不會震動。

場景1

scene1 是一個灰階圖。灰圖必須涵蓋相機視野中心 30%。由於中心區域沒有特徵,因此灰階圖預計會適度挑戰 3A(自動曝光、自動白平衡、自動對焦)。然而,捕獲請求指定了整個場景,其中包括足以使 3A 收斂的特徵。

RFoV 相機可以在 WFoV 或 RFoV 測試台中進行測試。如果在 WFoV 測試台中測試 RFoV 相機,圖表將縮放 ⅔,以確保 FoV 中的灰色圖表有一些邊界,以幫助 3A 收斂。有關相機測試台的更多詳細說明,請參閱相機 ITS-in-a-box

場景1

場景 1:全尺寸圖表(左)。 ⅔ 比例圖(右)。

測試_3a

使用中等挑戰性目標測試 3A 的收斂性。

測試的 API:

通過: 3A收斂,傳回的3A值有效。

測試_ae_af

單獨測試 3A 自動曝光 (AE) 和自動對焦 (AF) 演算法。

測試的 API:

通過: 3A收斂,傳回的3A值合法。

test_ae_precapture_trigger

使用預捕獲觸發器時測試 AE 狀態機。在禁用 AE 的情況下捕獲五個手動請求。最後一個請求具有 AE 預捕獲觸發器,應忽略該觸發器,因為 AE 已停用。

測試的 API:

通過: AE收斂。

測試自動與手動

自動和手動拍攝的測試看起來是一樣的。

測試的 API:

通過:每次拍攝結果中報告的手動白平衡增益和變換與相機 3A 演算法的自動白平衡estimate相符。

測試自動與手動自動

test_auto_vs_manual_auto.jpg

測試_自動_與_手動_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

測試黑白

測試設備是否產生全黑白影像。拍攝兩次照片,第一次使用極低增益和短時間曝光,從而產生黑色照片,第二次使用極高增益和長時間曝光,從而產生白色照片。

測試的 API:

通過:產生黑白影像。白色影像的飽和通道的 RGB 值為 [255, 255, 255],誤差幅度小於 1%。

測試_黑_白_黑測試_黑_白_黑
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

使用手動捕捉設定連拍 5 張 50 張影像,並檢查它們是否完全相同。此測試可用於識別是否存在經過不同處理或具有偽影的零星幀。

測試的 API:

通過:影像在視覺上和 RGB 值上都是相同的。

失敗:在每次突發開始時顯示 RGB 平均值圖表的峰值或下降

  • 對於first_API_level < 30,容差為 3%
  • 對於first_API_level >= 30,容差為2%

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

測試捕獲結果

測試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

測試作物區域

測試作物區域是否有效。拍攝完整影像並建立 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

測試_ev_補償_高級

測試是否應用了曝光值 (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

測試曝光

測試隨著 ISO 和曝光時間的變化是否能達到恆定的曝光。拍攝一系列照片,選擇 ISO 和曝光時間以相互平衡。結果應該具有相同的亮度,但在序列上圖像應該變得更加嘈雜。驗證樣本像素平均值彼此接近。確保影像不會被限制為 0 或 1(這會使它們看起來像扁平線)。透過在設定檔中設定debug標誌,還可以使用 RAW 影像運行測試。

測試的 API:

通過:影像具有相同的亮度,但 ISO 較高時雜訊較多。當ISO*exposure的值在測試的增益空間上恆定時,RGB 平面是平坦的。

測試曝光圖平均值

test_exposure_plot_means.png

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

測試jpeg

測試轉換後的 YUV 影像和設備 JPEG 影像看起來相同。測試取影像中心10%並計算RGB值,並驗證它們是否匹配。

測試的 API:

通過:每張影像之間的平均 RGB 差異小於 3%。

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

測試鎖存

測試設定(曝光和增益)是否鎖定在FULLLEVEL_3相機的右側畫面。使用連續請求拍攝一系列鏡頭,並在鏡頭之間改變捕捉請求參數。檢查影像是否具有預期的屬性。

測試的 API:

通過:影像 [2, 3, 6, 8, 10, 12, 13] 增加了 ISO 或曝光度,並在test_latching_plot_means.png上以更高的 RGB 平均值顯示。

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_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

測試線性度

測試設備處理可以反轉為線性像素。使用裝置指向統一目標拍攝一系列鏡頭。

測試的 API:

通過: R、G、B 值必須隨著靈敏度的增加而線性增加。

測試線性圖均值

test_linearity_plot_means.png

測試鎖定突發

測試 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

測試參數顏色校正

測試設定後是否套用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(R 增強)

test_param_color_ Correction_req = 2

test_param_color_ Correction_req=2.jpg(B 增強)

test_param_exposure_time

測試是否應用了android.sensor.exposureTime參數。

測試的 API:

通過:每一次射擊都比前一次射擊更亮。

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

測試是否應用了android.flash.mode參數。手動將曝光設為暗側,以便明顯看出閃光燈是否有閃光,並使用線性色調圖。檢查平鋪影像的中心,查看是否建立了較大的漸變,以驗證閃光燈是否有閃光。

測試的 API:

通過:平鋪影像的中心有很大的梯度,這意味著閃光燈閃光。

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

測試android.noiseReduction.mode參數在設定時是否正確應用。在光線昏暗的情況下用相機拍攝影像。使用高類比增益來確保捕獲的影像沒有雜訊。拍攝三張影像,降噪關閉、「快速」和「高品質」。還捕獲低增益和關閉 NR 的圖像,並使用其方差作為基線。 SNR(訊號雜訊比)越高,影像品質越好。

測試的 API:

通過:信噪比隨降噪模式的不同而變化,其表現與下圖類似。

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0:關閉,1:快速,2:HQ,3:MIN,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

測試參數靈敏度

測試是否應用了android.sensor.sensitivity參數。此測試以 5 步驟提高靈敏度,每次拍攝的曝光固定。

測試的 API:

通過:中心 10% 的 RGB 平均值隨著靈敏度的增加而變得更亮。

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

測試是否應用了android.shading.mode參數。

測試的 API:

通過:切換著色模式並按預期修改鏡頭著色圖。

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

測試是否應用了 android.tonemap.mode 參數。將不同的色調圖曲線應用於每個 R、G、B 通道,並檢查輸出影像是否如預期修改。此測試由兩個測試組成:test1 和 test2。

測試的 API:

經過:

  • test1:兩個影像都有線性色調圖,但 n=1 具有更陡的梯度。對於 n=1 影像,G(綠色)通道更亮。
  • test2:相同的色調圖,但長度不同。圖像是相同的。
test_param_tonemap_mode_n=0.jpgtest_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 影像隨著 boost 的增加而變暗,而 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

測試原始曝光

隨著曝光時間的增加捕捉一組原始影像並測量像素值。

測試的 API:

通過:增加 ISO(增益)使像素對光線更加敏感,因此繪圖向左移動。

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ 為 1 毫秒,101 為 10 毫秒,10⁻1 為 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

測試原始靈敏度

捕捉一組靈敏度不斷增加的原始影像,並測量影像中心 10% 的雜訊(方差)。測試每個鏡頭是否比前一個鏡頭噪音更大。

測試的 API:

傳球:每次射門變異數都會增加。

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

測試android.noiseReduction.mode是否應用於重新處理請求。在光線昏暗的情況下拍攝經過重新處理的影像。使用高類比增益來確保捕捉影像沒有雜訊。捕捉三張重新處理的影像,降噪關閉、「快速」和「高品質」。捕捉低增益和關閉 NR 的重新處理影像,並使用其方差作為基線。

測試的 API:

通過: FAST >= OFF,HQ >= FAST,HQ >> OFF

典型 SNR 與 NR_MODE 圖

典型 SNR 與 NR_MODE 圖

測試色調圖序列

使用不同的色調圖曲線測試一系列鏡頭。使用線性色調圖捕捉 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

測試_yuv_jpeg_all

測試所有報告的影像擷取尺寸和格式是否有效。使用帶有線性色調圖的手動請求,以便 YUV 和 JPEG 在由image_processing_utils模組轉換時看起來相同。預設不儲存影像,但可以透過啟用debug_mode來儲存影像。

測試的 API:

通過:所有影像中心在 RGB 轉換影像中與最高解析度 YUV 影像的 3% 具有最大 RMS(訊號的均方根值)差異。

測試_yuv_jpeg_all

test_yuv_jpeg_all.png

測試_yuv_plus_dng

測試所報告的影像擷取大小和格式是否有效。

測試的 API:

通過:測試完成並傳回請求的圖像。

測試_yuv_plus_dng

test_yuv_plus_dng.jpg

測試_yuv_plus_jpeg

測試捕獲單個幀作為 YUV 和 JPEG 輸出。使用帶有線性色調圖的手動請求,以便 YUV 和 JPEG 在由image_processing_utils模組轉換時看起來相同。

測試的 API:

通過: YUV 和 JPEG 影像相似,且差異小於 1% RMS(訊號的均方根值)。

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

測試_yuv_plus_raw

測試捕獲單個幀作為 RAW/RAW10/RAW12 和 YUV 輸出(如果支援)。使用帶有線性色調圖的手動請求,因此原始和 YUV 預計是相同的。比較 RGB 轉換影像的中心 10% RGB 值。記錄android.shading.mode

測試的 API:

通過: YUV 和原始影像相似,且差異小於 3.5% RMS(訊號的均方根值)。

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

場景2_a

scene2_a 具有灰色背景和中性服裝的三張臉。臉孔被選擇為具有多種膚色。圖表必須具有正確的方向,人臉偵測才能發揮最佳效果。

場景2_a

場景2_a

測試自動閃光

測試在黑暗場景中是否觸發自動閃光。透過檢查圖塊影像的中心是否具有較大的漸層來驗證自動閃光是否已啟動。若要觸發自動閃光,必須關閉測試裝置中的平板電腦和燈。測試關閉平板,用Arduino控制器可以自動關燈。場景必須完全黑暗才能使測試正常進行。因此,後部平板電腦開口必須被場景平板電腦完全覆蓋,前部開口必須由光圈和 DUT 手機覆蓋,以阻擋雜散光進入裝置。

測試的 API:

通過:平鋪影像的中心有一個很大的漸變,這意味著自動閃光已啟動。

測試自動成幀

測試相機設備的自動取景行為。進行大變焦,使得場景中的人臉都看不見,透過將CaptureRequest中的AUTOFRAMINGTrue來啟用自動取景模式,並驗證當狀態收斂時(即當CaptureResult中的AUTOFRAMING_STATE設定為AUTOFRAMING_STATE_CONVERGED )。

測試的 API:

通過:偵測到所有三張臉。

測試顯示_p3

使用ColorSpaceProfiles API 測試以 JPEG 格式顯示 P3擷取。測試捕獲的 JPEG 在其標頭中是否具有適當的ICC 配置文件,以及影像是否包含 sRGB 色域之外的顏色。

測試的 API:

透過: JPEG 包含 Display P3 ICC 設定檔和 sRGB 色域以外的顏色。

測試效果

捕捉支援的相機效果的畫面並檢查它們是否正確產生。此測試僅檢查效果OFFMONO ,但保存所有支援的效果的影像。

測試的 API:

通過:捕捉效果OFF的場景影像和效果設定為MONO單色影像。

測試效果單聲道

test_effects_MONO.jpg

測試格式組合

測試輸出格式的不同組合。

測試的 API:

通過:所有組合均成功捕獲。

測試jpeg_質量

測試相機 JPEG 壓縮品質。透過android.jpeg.quality調整 JPEG 品質並確保量化表正確更改。

測試的 API:

通過:量化矩陣隨著品質的提高而減少。 (矩陣代表除法因子。)

測試jpeg_質量

Pixel 4 後置相機亮度/色度 DQT 矩陣平均值與 JPEG 質量

test_jpeg_quality 失敗

失敗的測試範例

請注意,對於品質非常低的影像 (jpeg.quality < 50),量化矩陣中的壓縮不會增加。

測試面數

測試人臉偵測。

測試的 API:

通過:找到三張臉。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

測試預覽最小幀率

測試預覽幀速率在黑暗場景中是否正確降低。為了使該測試正常進行,必須由控制器或測試操作員手動關閉測試裝置中的燈。

測試的 API:

通過:預覽幀速率處於請求幀速率範圍的最小值,且幀之間的變化小於測試中設定的絕對容差。

test_reprocess_uv_swap

測試 YUV 重新處理不會交換 U 和 V 平面。這是透過計算重新處理的影像和未經重新處理的捕獲之間的絕對差之和 (SAD) 來檢測的。如果交換重新處理的捕獲的輸出 U 和 V 平面會導致 SAD 增加,則假定輸出具有正確的 U 和 V 平面。

測試的 API:

通過: U 平面和 V 平面不交換。

test_reprocess_uv_swap

test_reprocess_uv_swap.png

場景2_b

測試面數

透過增加人臉場景中的膚色多樣性來測試人臉偵測。

測試的 API:

通過:找到 3 個面孔。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

使用最大的常見 YUV 和 JPEG 格式擷取兩個影像,其寬高比與最大的 JPEG 格式相同,解析度不超過 1920x1440。將jpeg.quality設為 100 並擷取雙錶面請求。將兩個影像轉換為 RGB 陣列並計算兩個影像之間的 3D 均方根 (RMS) 差異。

測試的 API:

通過: YUV 和 JPEG 影像相似,且差異小於 1% RMS(訊號的均方根值)。

場景2_c

測試面數

透過增加人臉場景中的膚色多樣性來測試人臉偵測。

測試的 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 擷取延遲。

通過:對於 1080p 分辨率,camera2 JPEG 捕獲延遲必須小於 1000 毫秒,這是透過 CTS 相機性能測試在 ITS 照明條件 (3000K) 下對兩個主相機進行測量得出的。

test_camera_launch_perf_class

依照 CDD 中第 2.2.7.2 節「相機」的規定,測試 S 性能等級的相機啟動延遲。

通過:相機 2 啟動延遲(打開相機到第一個預覽幀)必須小於 600 毫秒,這是透過 CTS 攝影機效能測試在 ITS 照明條件 (3000K) 下對兩個主相機進行測量得出的。

場景2_d

測試面數

透過增加人臉場景中的膚色多樣性來測試人臉偵測。

測試的 API:

通過:找到 3 個面孔。

場景2_e

測試連續圖片

捕獲請求首先設定android.control.afMode = 4 (CONTINUOUS_PICTURE).

測試的 API:

通過: 3A 系統在 50 幀捕獲結束時穩定下來。

測試面數

透過增加人臉場景中的膚色多樣性來測試人臉偵測。

測試的 API:

通過:找到 3 個面孔。

場景2_f

scene2_f 有三張臉,背景為白色,衣服為白色。臉部的膚色範圍很廣,與背景的對比度很高。

scene2_f.png

場景2_f

測試面數

透過增加人臉場景中的膚色多樣性來測試人臉偵測。

測試的 API:

通過:找到 3 個面孔。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

場景3

Scene3使用ISO12233圖表,大多數測試使用圖表擷取器方法來尋找場景中的圖表。因此,大多數已儲存的圖像沒有像場景 1、2 或 4 的圖像那樣有邊框,而只有圖表。圖表必須處於正確的方向,圖表查找器才能以最佳方式運作。

test_3a_一致性

3A 一致性測試。

測試的 API:

通過: 3A 曝光、增益、awb(自動白平衡)和 fd(焦距)三倍收斂於公差範圍內。

測試邊緣增強

測試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(高品質模式)

測試翻轉鏡像

測試影像是否依照CDD 第 7.5.2 節前置鏡頭 [C-1-5]正確定向。

鏡像、翻轉或旋轉的影像可以透過中心附近的菱形特徵來識別。

通過:影像未翻轉、鏡像或旋轉。

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

測試橫向到縱向

測試橫向感測器的橫向到縱向覆蓋功能是否正確。

測試的 API:

通過:測試能夠找到具有預期旋轉的圖表(停用橫向到縱向覆蓋時為 0 度,啟用時為 90 度)。

測試橫向到縱向

test_landscape_to_portrait.png

測試鏡頭移動報告

測試是否正確報告鏡頭移動標誌。連拍 24 張影像,其中前 12 幀處於最佳焦距(如 3A 所示),最後 12 幀處於最小焦距。在第 12 格附近,鏡頭移動導致清晰度下降。當鏡頭移動到最終位置時,清晰度最終會穩定。應在所有畫面中斷言鏡頭移動標誌,其中清晰度介於鏡頭在最佳焦距處靜止的前幾幀和鏡頭在最小焦距處靜止的最後幾幀的清晰度之間。鏡頭移動的確切畫面並不重要:檢查的是鏡頭移動時是否斷言移動標誌。

測試的 API:

通過:在銳利度發生變化的畫面中,鏡頭移動標誌為True

失敗機制:

  • test_log.DEBUG中的lens_moving: True ( android.hardware.camera2.CaptureResult#LENS_STATE = 1) 僅在銳利度未改變的幀中有效。
  • test_log.DEBUGlens_moving: False ( android.hardware.camera2.CaptureResult#LENS_STATE = 0) 的幀與最佳焦距處的前幾幀或最小焦距處的最後幾幀相比,存在銳度差異。

test_reprocess_edge_enhancement

測試支援的邊緣增強再處理方法是否正常運作。使用給定的重新處理邊緣模式處理擷取請求,並在停用重新處理邊緣模式的情況下比較不同的擷取模式。

測試的 API:

通過:不同邊緣模式的清晰度正確。 HQ (模式 2)比OFF (模式 0)更銳利,不同模式之間的改進類似。

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

場景4

Scene4 由一個正方形內白色背景上的黑色圓圈組成。

場景4

場景4

測試縱橫比和裁剪

測試影像在影像管道中是否扭曲或意外裁切。拍攝各種格式的圓形照片。驗證圓沒有扭曲,圓沒有從影像中心移動,圓沒有因不同的長寬比或解析度而錯誤地改變大小。

測試的 API:

通過:影像未拉伸,影像中心差異不超過 3%,並保留最大可能的 FoV(視野)。

失敗機制:

  • 捕捉影像中的圓圈會因處理管道而變形。
  • 較低解析度的影像在影像管道中進行雙重裁剪,從而在高解析度影像和低解析度影像之間創建不同的 FoV。
  • 由於極端寬高比捕捉請求減少了影像的高度或寬度,因此捕捉到的影像中的圓圈被裁剪。
  • 捕獲的圖像中的圓圈在中心有反射,並且看起來沒有完全填充。

測試多相機對齊

測試多相機系統中與相機定位相關的相機標定參數。使用多攝像頭物理子攝像頭,使用其中一個物理攝像頭拍照。找到圓心。將每個攝影機的圓心投影到世界座標。比較世界座標中相機圓心之間的差異。將世界座標重新投影回像素座標,並與原始座標進行比較作為有效性檢查。比較圓圈大小,檢查相機的焦距是否不同。

測試的 API:

通過:與使用相機校準資料和焦距捕獲的影像相比,投影影像中的圓中心和大小符合預期。

失敗機制:

  • LENS_INTRINSIC_CALIBRATIONLENS_POSE_TRANSLATIONLENS_POSE_ROTATION是設計值,而不是實際校準資料。
  • 相機系統不適合測試設定。例如,使用 RFoV 測試台測試廣角和超廣角攝影機系統。有關更多信息,請參閱相機盒裝 ITS 常見問題 1

測試預覽縱橫比和裁剪

與靜態捕獲的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(視野)。

場景5

Scene5 需要均勻照明的灰色場景。這是透過放置在相機鏡頭上的擴散器來實現的。我們推薦以下漫射器: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168

要準備場景,請在相機前方安裝一個漫射器,並將相機指向約 2000 勒克斯的光源。為場景 5 擷取的影像需要漫射照明,且沒有明顯的特徵。以下是範例圖像:

場景5

場景5捕捉

test_lens_shading_and_color_uniformity

測試鏡頭陰影校正是否應用得當,以及單色均勻場景的顏色分佈是否均勻。使用自動 3A 在 YUV 幀上執行此測試。鏡頭陰影是根據 y 通道評估的。測量指定的每個樣本區塊的平均 y 值,並透過與中心 y 值比較來確定通過或失敗。顏色均勻性測試在 r/g 和 b/g 空間中進行評估。

測試的 API:

通過:在指定的圖像半徑下,r/g和b/g值的變異數必須小於20%才能通過測試。

場景6

Scene6 是一個由小圓圈組成的網格,一個角落有一個正方形來指示方向。需要小圓圈來測試大範圍的變焦功能。

場景6

場景6

感測器縮放測試

測試相機感光元件內變焦功能的行為,該功能會產生裁切後的 RAW 影像。

將串流用例設定為CROPPED_RAW時,測試在變焦範圍內拍攝兩次捕獲,全視野 (FoV) RAW 影像和裁切後的 RAW 影像。此測試將影像轉換為 RGB 數組,將全尺寸裁剪的 RAW 影像縮小到SCALER_RAW_CROP_REGION報告的大小,並計算兩個影像之間的 3D 均方根 (RMS) 差異。

測試的 API:

通過:縮小後的裁切 RAW 影像與完整 FoV RAW 影像之間的 3D 均方根 (RMS) 差異小於 1%。

測試縮放

測試相機變焦行為。在變焦範圍內進行捕捉,並檢查圓圈是否隨著相機放大而變大。

測試的 API:

通過:捕獲的圓圈的相對大小與所要求的變焦比是準確的,以確保相機正確變焦。

測試縮放

test_zoom 找出最接近中心的圓的輪廓。

測試低延遲縮放

測試相機低延遲變焦行為。使用android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)在縮放範圍內進行捕獲,並檢查輸出影像中的圓圈是否與捕獲元資料中的縮放比例相符。

測試的 API:

通過:捕獲的圓的相對大小相對於縮放比例結果元數據是準確的。

測試預覽影片縮放匹配

測試在錄製和縮放時,視訊預覽和視訊輸出顯示和錄製相同的輸出。計算不同縮放比例下最靠近中心的圓的大小,並檢查圓的大小是否隨著縮放比例的增加而增加。

測試的 API:

通過:捕獲的圓圈的相對大小與視頻和預覽中請求的縮放比例是準確的。

VGA_640x480_key_frame.png

VGA_640x480_key_frame.png(縮放前)

Preview_640x480_key_frame.png

Preview_640x480_key_frame.png(縮放前)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png(縮放後)

Preview_640x480_key_frame_zoomed.png

Preview_640x480_key_frame.png(縮放後)

場景擴充

scene_extensions測試用於相機擴展,必須使用Camera ITS-in-a-Box ,因為它們需要精確控制測試環境。

場景_HDR

scene_hdr場景由左側的肖像和右側的低對比二維碼組成。

場景_HDR

場景_HDR

test_hdr_擴充

測試HDR 擴充。在啟用和未啟用擴展的情況下進行捕獲,並檢查擴展是否使 QR 碼更易於檢測。

測試的 API:

通過: HDR 擴展減少了檢測 QR 碼所需的對比度變化次數或減少了 QR 碼上的梯度。

場景之夜

scene_night場景由一個白色圓圈和內部四個較小的圓圈組成,全部位於黑色背景下。右上角的小圓圈比其他圓圈更暗,以指示方向。

場景之夜

場景之夜

測試夜擴展

測試夜間擴展。在啟用和未啟用擴展的情況下進行捕獲,並檢查以下內容:

  • 啟用夜間擴展的捕獲需要更長的時間。
  • 啟用夜間擴展後的捕捉更加明亮,或者場景偽影的外觀得到改善。

測試的 API:

通過:與未啟用夜間擴展的捕獲相比,啟用夜間擴展的捕獲至少需要多花 0.5 秒。捕獲的亮度必須至少提高 10%,或者場景中的灰點必須比周圍圓的中心低 20 個像素值。

感測器融合

感應器融合測試需要手機在棋盤圖案前進行特定的移動。為了獲得最佳結果,請確保測試卡安裝平整。不平坦的圖表會影響許多測試的旋轉計算。 sensor_fusion測試可以使用Sensor Fusion Box自動執行。

棋盤

棋盤的圖像

test_multi_camera_frame_sync

透過計算棋盤格內正方形的角度來確定時間戳,測試邏輯相機捕捉的幀時間戳在 10 毫秒內。

測試的 API:

通過:當手機旋轉時,每個相機的圖像之間的角度不會發生明顯變化。

測試預覽穩定

測試穩定預覽影片旋轉小於陀螺儀。

測試的 API:

通過:幀上的最大角度旋轉小於陀螺儀旋轉的 70%。

以下是使用和不使用穩定功能的範例影片。

  • 具有穩定功能的範例視頻

  • 不含穩定功能的範例視頻

測試感測器融合

測試 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_plot_rotations :顯示陀螺儀和相機事件的對齊情況。此圖必須顯示相機和陀螺儀之間的匹配運動,誤差範圍為 +/-1 毫秒。

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

測試的 API:

通過:根據CDD 第 7.3.9 節高保真感測器 [C-2-14],相機和陀螺儀時間戳的偏移小於 1 毫秒。

失敗機制:

  • 偏移錯誤:相機陀螺儀偏移未正確校準在 +/-1 毫秒內。
  • 丟幀:管道速度不夠快,無法連續捕捉 200 幀。
  • 套接字錯誤: adb無法可靠地連接到 DUT 足夠長的時間來執行測試。
  • 此圖表未平裝。繪圖test_sensor_fusion_plot_rotations幀中,當相機旋轉穿過圖表的不平坦部分時,陀螺儀和相機旋轉變化很大。
  • 相機未平放。繪圖test_sensor_fusion_gyro_events顯示 X 和 Y 平面上的運動。這種故障在前置鏡頭中更為常見,因為後置相機通常在手機機身的其餘部分有一個凸起的凸起,在將手機後部安裝到安裝板上時產生傾斜。

測試影片穩定

測試穩定視訊旋轉小於陀螺儀。

測試的 API:

通過:幀上的最大角度旋轉小於陀螺儀旋轉的 60%。

以下是使用和不使用穩定功能的範例影片。

  • 具有穩定功能的範例視頻

  • 不含穩定功能的範例視頻

測試 LED 快照

測試 LED 快照不會使影像飽和或著色。

本次測試在感測器融合盒中增加了一個照明控制器來控制燈光。將燈設定為OFF後,測試將AUTO_FLASH模式設定為ON進行捕捉。在此捕獲期間,測試運行預捕獲序列,並將aePrecapture觸發器設為START ,並將捕獲意圖設為Preview以使用閃光燈進行捕獲。

由於此捕獲由於閃光而具有獨特的熱點,因此該測試計算整個捕獲的閃光圖像平均值並驗證該值是否在 (68, 102) 範圍內。為了檢查影像的白平衡是否合理,測試會計算 R/G 和 B/G 比率,並驗證比率是否在 0.95 和 1.05 之間。

測試的 API:

通過: R/G和B/G比率在0.95和1.05之間。閃光影像均值在 (68, 102) 範圍內。