カメラ ITS テスト

このページでは、Android 互換性テストスイート(CTS)検証ツールの一部である、カメラ画像テストスイート(ITS)のテストの一覧を示します。ITS テストは機能テストです。つまり、画質を測定するのではなく、アドバタイズされたカメラ機能がすべて期待どおりに動作することを確認するためのものです。このドキュメントでは、デベロッパーとテスター向けに個々のテストの内容と、テストが不合格になった場合のデバッグ方法について説明します。

次のように、テストはシーン別にグループ化されています。

  • scene0: メタデータ、ジッター、ジャイロスコープ、バイブレーションのキャプチャ
  • scene1: 露出、感度、EV 補正、YUV と JPEG/RAW
  • scene2: 顔検出、カラーシーンや完全な暗さを求めるテスト
  • scene3: エッジ補正、レンズ移動
  • scene4: アスペクト比、切り抜き、画角
  • scene5: レンズ シェーディング
  • scene6: ズーム
  • sensor_Fusion: カメラ / ジャイロスコープのタイミング オフセット

それぞれのシーンの説明については、各セクションをご覧ください。

scene0

scene0 テストでは、特定のシーン情報は必要ありません。ただし、ジャイロスコープとバイブレーションのテストでは、スマートフォンを静止状態にする必要があります。

test_burst_capture

キャプチャ パイプライン全体がフルサイズ キャプチャの速度と CPU 時間に対応できることを確認します。

テスト対象の API:

合格: フルサイズの画像を連続してキャプチャしても、カメラがタイムアウトを回避するのに十分な速度で動作すること。

test_capture_result_dump

手動キャプチャからキャプチャ結果が返されることをテストし、キャプチャ結果をダンプします。

テスト対象の API:

合格: キャプチャが完了し、キャプチャ結果をダンプしていること。

test_gyro_bias

デバイスが静止しているときにジャイロスコープの出力が安定しているかどうかをテストします。データは、20 個のデータポイントの平均としてプロットされます。

テスト対象の API:

合格: ジャイロスコープの測定値の経時的な差分が 0.01 未満であること。

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

カメラのタイムスタンプのジッターを測定します。

テスト対象の API:

合格: フレーム間に 30 ミリ秒以上の差分があること。

test_jitter_plot.png

test_jitter_plot.png(Y 軸の範囲が小さいことに注意してください。このプロットでは実際にジッターが小さくなっています)。

test_metadata

メタデータ エントリの有効性をテストします。キャプチャ結果とカメラ特性オブジェクトを確認します。このテストでは画像の内容は重要ではないため、auto_capture_request の露出値とゲイン値を使用します。

テスト対象の API:

合格: ハードウェア レベル、rollingShutterSkew タグ、frameDuration タグ、timestampSourcecroppingTypeblackLevelPatternpixel_pitch、FOV、過焦点距離が存在し、値が有効であること。

test_param_sensitivity_burst

android.sensor.sensitivity パラメータがバースト時に適切に適用されることをテストします。出力メタデータのみを検査します。

テスト対象の API:

合格: 出力データの許容誤差が 0.2% 未満であること。

test_read_write

キャプチャ メタデータを読み戻すことにより、デバイスが正しい露出値とゲイン値を書き込むことをテストします。

テスト対象の API:

合格: すべてのショットで読み取りと書き込みの値が一致すること。

test_sensor_events

センサー フュージョンのサポートをアドバタイズするデバイスを対象に、デバイスがセンサー イベントをクエリして出力することをテストします。想定されるセンサーは加速度計、ジャイロスコープ、磁力計です。このテストは画面がオンの場合、つまりデバイスがスタンバイ モードになっていない場合にのみ機能します。

テスト対象の API:

合格: 各センサーのイベントが受信されること。

test_solid_color_test_pattern

カメラのミュート用に単色のテストパターンが適切に生成されることをテストします。カメラのミュートがサポートされている場合は、単色のテストパターンがサポートされている必要があります。カメラのミュートがサポートされていない場合は、該当する機能がアドバタイズされている場合にのみ、単色のテストパターンがテストされます。

RAW 画像がサポートされている場合は、色の割り当てもテストされます。テスト対象の色は、黒、白、赤、青、緑です。RAW 画像をサポートしていないカメラの場合は、黒のみがテストされます。

テスト対象の API:

合格: サポートされている単色のテストパターンが正しい色であり、画像の分散が低いこと。

test_test_pattern

android.sensor.testPatternMode パラメータが有効なテストパターンごとにフレームをキャプチャすることをテストし、フレームが単色とカラーバーに対して正しく生成されることを確認します。このテストには次の手順が含まれます。

  1. サポートされているすべてのテストパターンの画像をキャプチャします。
  2. 単色のテストパターンとカラーバーの簡単な正確性チェックを実行します。

テスト対象の API:

合格: サポートされているテストパターンが正しく生成されること。

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

線形トーンマップを使用した RAW から YUV へのテストパターンの変換をテストします。このテストでは、トーンマップ変換用の完全な画像パターンを生成するために android.sensor.testPatternMode = 2(COLOR_BARS)が必要です。線形トーンマップによる適切な色出力と理想的な画像入力(test_test_patterns に依存)をパイプラインが備えていることを確認します。

テスト対象の API:

合格: YUV と RAW のパターンが似ていること。

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

画像イベントとモーション センサー イベントが同じ時間領域にあるかどうかをテストします。

テスト対象の API:

合格: モーション タイムスタンプが 2 つの画像タイムスタンプの間にあること。

test_vibration_restriction

デバイスのバイブレーションが期待どおりに機能しているかどうかをテストします。

テスト対象の API:

合格: カメラのオーディオ制限 API によってミュートされているときに、デバイスが振動しないこと。

scene1

scene1 はグレーのチャートです。グレーのチャートは、カメラ画角の中心 30% を対象とする必要があります。このグレーのチャートの中心領域には特徴がないため、3A(自動露出、自動ホワイト バランス、オート フォーカス)について適度なテストを行うことが想定されています。ただし、キャプチャ リクエストでは、3A が収束するのに十分な特徴を含むシーン全体を指定します。

RFoV カメラは、WFoV または RFoV テスト装置でテストできます。WFoV テスト装置で RFoV カメラをテストする場合、チャートを 2/3 に縮小します。これにより、FoV 内にグレーのチャートの境界線が作られ、3A が収束しやすくなります。

scene1

scene1: フルサイズのチャート(左)。2/3 に縮小したチャート(右)。

test_3a

適度な難易度のターゲットを使用して 3A の収束をテストします。

テスト対象の API:

合格: 3A が収束し、返された 3A 値が有効であること。

test_ae_af

3A の自動露出(AE)アルゴリズムとオート フォーカス(AF)アルゴリズムを個別にテストします。

テスト対象の API:

合格: 3A が収束し、返された 3A 値が有効であること。

test_ae_precapture_trigger

プリキャプチャ トリガーを使用する場合の AE ステートマシンをテストします。AE を無効にした状態で 5 つの手動リクエストをキャプチャします。最後のリクエストには AE プリキャプチャ トリガーが含まれますが、AE が無効になっているため、無視される必要があります。

テスト対象の API:

合格: AE が収束すること。

test_auto_vs_manual

自動ショットと手動ショットのキャプチャ結果が同じように見えることをテストします。

テスト対象の API:

合格: 各キャプチャ結果で報告される手動ホワイト バランス ゲインと変換が、カメラの 3A アルゴリズムの自動ホワイト バランス estimate と一致すること。

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

デバイスで真っ黒な画像と真っ白な画像が生成されることをテストします。キャプチャを 2 回行います。1 回目は、極端に低いゲインと短い露出で黒い画像を生成し、2 回目は、極端に高いゲインと長い露出で白い画像を生成します。

テスト対象の API:

合格: 黒い画像と白い画像が生成されること。白い画像の飽和したチャンネルの RGB 値が [255、255、255] で、誤差が 1% 未満であること。

test_black_white_black test_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

手動キャプチャ設定で 50 枚のバースト撮影を 5 回行い、それらがすべて同一であることを確認します。このテストは、異なる方法で処理された、またはアーティファクトがある散発的なフレームがあるかどうかを識別するために使用できます。

テスト対象の API:

合格: 画像の見た目と RGB 値が同一であること。

不合格: 各バーストの開始時に RGB 平均グラフの急増または減少が見られる場合。

  • first_API_level < 30 の許容値は 3%
  • first_API_level >= 30 の許容値は 2%

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

有効なデータが CaptureResult オブジェクトに返されることをテストします。自動キャプチャ、手動キャプチャ、自動キャプチャの順に実行します。

テスト対象の API:

合格: メタデータがすべてのキャプチャに対して有効であり、手動設定が 2 回目の自動キャプチャに影響していないこと。キャプチャのレンズ シェーディング補正がプロットされていること。

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

RAW ストリームの切り抜きができないことをテストします。

テスト対象の API:

合格: YUV 画像が中央で切り抜かれるのに対し、RAW 画像は切り抜かれないこと。

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

切り抜き領域が機能することをテストします。完全な画像を撮影し、5 つの異なる領域(四隅と中央)のパッチを作成します。5 つの領域に切り抜きを設定して画像を撮影します。パッチと切り抜き画像の値を比較します。

テスト対象の API:

合格: 切り抜かれた領域の画像が、対応するパッチと一致すること。

test_dng_noise_model

DNG RAW モデル パラメータが正しいことを検証します。プロットは、ある範囲の感度でキャプチャされた RAW ショットにおける、標準反射板の中央パッチで測定された分散を示し、これらの値をカメラ HAL の DNG ノイズモデルによって各感度で期待される分散と比較します(キャプチャ結果オブジェクトで返される O、S パラメータに基づく)。DNG ノイズモデルについて詳しくは、DNG ノイズモデルのドキュメントをダウンロードしてください。

テスト対象の API:

合格: DNG RAW モデル パラメータが正しいこと。予想 RGB 値が、測定された実際の RGB 値と一致すること。

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

露出値(EV)補正が適用されることをテストします。このテストでは、露出を 8 段階で上げていき、測定された明るさと想定された明るさを比較します。想定値は、EV 補正が適用されていない画像の画像の明るさから計算し、計算された値が実際の画像の値の範囲を超えると、想定値の彩度を上げます。想定値と測定値が一致しない場合、または画像が 5 段階以内に露出オーバーになった場合、テストは不合格となります。

テスト対象の API:

合格: 画像の露出が段階的に上げて、5 段階以内に露出オーバーにならないこと。

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

CONTROL_AE_COMPENSATION_STEP で作成した範囲を使用して EV 補正が適用されることをテストします。各補正値で 8 フレームがキャプチャされます。

テスト対象の API:

合格: EV 補正設定が増えて 画像の輝度が上がること。EV 補正設定ごとにキャプチャされた 8 フレームの輝度が安定していること。

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure

ISO と露出時間が変化しても、一定の露出が達成されることをテストします。ISO と露出時間のバランスがとれるようにそれぞれを選択して、一連のショットを撮影します。その結果、画像の明るさは同じでも、シーケンス全体でノイズが増えていくはずです。サンプル ピクセルの平均値が互いに近いことを確認します。各画像の値が 0 または 1 に固定されていないことを確認します(グラフでは平らな線のように見えるはずです)。構成ファイルで debug フラグを設定することで、RAW 画像でテストを実行することもできます。

テスト対象の API:

合格: 画像の明るさは同じで、ISO が高いほどノイズが多くなっていること。テスト対象の利得空間で ISO*exposure の値が一定である場合、RGB プレーンが平らであること。

test_exposure_plot_means

test_exposure_plot_means.png

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

test_jpeg

変換された YUV 画像とデバイスの JPEG 画像が同じように見えることをテストします。テストでは、画像の中央の 10% を取得して RGB 値を計算し、それらの値が一致することを確認します。

テスト対象の API:

合格: 各画像間の RGB 差の平均が 3% 未満であること。

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

test_latching

FULLLEVEL_3 のカメラで設定(露出とゲイン)が適切なフレームにラッチすることをテストします。連続リクエストを使用して一連のショットを撮影します。その際、ショット間でキャプチャ リクエストのパラメータを変更します。期待される性質が各画像に現れていることを確認します。

テスト対象の API:

合格: 画像 [2、3、6、8、10、12、13] の ISO または露出が増加し、test_latching_plot_means.png でより高い RGB 平均値を示していること。

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

test_latching_plot_means

test_latching_plot_means.png

test_linearity

デバイス処理を線形ピクセルに反転できることをテストします。デバイスを均一なターゲットに向けて一連のショットをキャプチャします。

テスト対象の API:

合格: R、G、B の値が感度の増加に応じて線形に増加すること。

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

3A ロックと YUV バーストをテストします(自動設定を使用)。このテストは、MANUAL_SENSOR または PER_FRAME_CONTROLS を備えていない制限付きのデバイスでも合格するように設計されています。このテストでは、CTS でのフレームレート チェック中に YUV 画像の整合性をチェックします。

テスト対象の API:

合格: 各キャプチャ画像が整合しているように見えること。

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_multi_camera_match

デバイス上の複数のカメラで、グレーのパッチに対して同様の RGB 値が生成されるかどうかをテストします。

テスト対象の API:

合格: 異なるカメラで、同じグレーのパッチに対して同様の RGB 値が生成されること。

test_multi_camera+match_yuv_fl=4.38

test_multi_camera+match_yuv_fl=4.38.jpg

test_param_color_correction

android.colorCorrection.* パラメータが設定時に適用されることをテストします。さまざまな変換値とゲイン値でショットを撮影し、その値に応じて違って見えることをテストします。変換値とゲイン値は、出力がだんだん赤色または青色になるように選択します。線形トーンマップを使用します。トーン マッピングは画像処理で使用される手法で、ある色のセットを別の色のセットにマッピングして、ダイナミックレンジがより制限されたメディア内のハイ ダイナミック レンジ画像の発色を概算します。

テスト対象の API:

合格: R と B の値が変換に従って増加すること。

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*X 軸はキャプチャ リクエストです。0 = ユニティ、1= 赤の増加、2= 青の増加

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg(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 オフ、「高速」、「高画質」の 3 つの画像をキャプチャします。また、低ゲインで NR をオフにした画像をキャプチャし、その分散をベースラインとして使用します。SNR(信号対雑音比)が高いほど、画質が高くなります。

テスト対象の API:

合格: ノイズ リダクション モードによって SNR が異なり、下記のグラフと同じように変化すること。

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: OFF、1: FAST、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

test_param_sensitivity

android.sensor.sensitivity パラメータが適用されていることをテストします。このテストでは、ショットごとに露出を固定したまま 5 段階で感度を上げます。

テスト対象の API:

合格: 中央 10% の RGB 平均値が、感度が上昇するにつれて明るくなること。

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

android.shading.mode パラメータが適用されていることをテストします。

テスト対象の API:

合格: シェーディング モードが切り替わり、レンズ シェーディング マップが期待どおりに変更されること。

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

android.tonemap.mode パラメータが適用されていることをテストします。R、G、B の各チャネルに異なるトーンマップ曲線を適用し、出力画像が期待どおりに変更されることを確認します。このテストは、test1 と test2 の 2 つのテストで構成されています。

テスト対象の API:

合格:

  • test1: 両方の画像に線形トーンマップがあるが、n=1 の方が勾配が急であること。G(緑)チャンネルは n=1 画像の方が明るいこと。
  • test2: トーンマップは同じだが、長さが異なること。画像が同じであること。
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

RAW 感度ブーストのポストをチェックします。RAW 画像と YUV 画像のセットを異なる感度でキャプチャし、RAW 感度ブーストの組み合わせをポストし、出力ピクセルの平均がリクエスト設定と一致するかどうかを確認します。

テスト対象の API:

合格: RAW 画像はブーストが増加するにつれて暗くなるのに対し、YUV 画像の明るさは一定に保たれること。

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

ゲインを上げながら RAW 画像のセットをキャプチャし、ノイズを測定します。RAW 画像のみをバーストでキャプチャします。

テスト対象の API:

合格: ゲインが増加するにつれて、各ショットのノイズが前のショットよりも多くなること。

中央の統計グリッドセルの分散を使用していること。

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

露出時間を増やしながら RAW 画像のセットをキャプチャし、ピクセル値を測定します。

テスト対象の API:

合格: ISO(ゲイン)の上昇とともにピクセルの光に対する感度が上がり、プロットが左に移動すること。

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ は 1 ミリ秒、10¹ は 10 ミリ秒、10⁻¹ は 0.1 ミリ秒)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

感度を上げながら RAW 画像のセットをキャプチャし、画像の中央 10% のノイズ(分散)を測定します。各ショットのノイズが前のショットよりも多いことをテストします。

テスト対象の API:

合格: 分散がショットごとに増加すること。

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

android.noiseReduction.mode が再処理リクエストに適用されることをテストします。カメラの照明を暗くして、再処理された画像をキャプチャします。キャプチャした画像のノイズが多くなるように、高アナログゲインを使用します。NR オフ、「高速」、「高画質」の 3 つの再処理された画像をキャプチャします。低ゲインで NR をオフにして再処理された画像をキャプチャし、この分散をベースラインとして使用します。

テスト対象の API:

合格: FAST >= OFF、HQ >= FAST、HQ >> OFF

SNR と NR_MODE の典型的なプロット

SNR と NR_MODE の典型的なプロット

test_tonemap_sequence

さまざまなトーンマップ曲線を使用して一連のショットをテストします。線形トーンマップで 3 つの手動ショットをキャプチャします。デフォルトのトーンマップで 3 つの手動ショットをキャプチャします。連続する各フレームペア間の差分を計算します。

テスト対象の API:

合格: 3 つの同一フレームがあり、その後に 3 つの同一フレームの別のセットが続いていること。

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

報告されたすべての画像キャプチャのサイズと形式が機能することをテストします。image_processing_utils モジュールで変換したときに YUV と JPEG が同じに見えるように、線形トーンマップによる手動リクエストを使用します。デフォルトでは画像は保存されませんが、debug_mode を有効にすると保存できます。

テスト対象の API:

合格: 最高解像度の YUV 画像の 3% の RGB 変換画像で、すべての画像の中央に最大の RMS(信号の二乗平均平方根値)差があること。

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

報告された画像キャプチャのサイズと形式が機能することをテストします。

テスト対象の API:

合格: テストが完了し、リクエストした画像が返されること。

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

1 つのフレームを YUV 出力と JPEG 出力の両方としてキャプチャするテストです。image_processing_utils モジュールで変換したときに YUV と JPEG が同じに見えるように、線形トーンマップによる手動リクエストを使用します。

テスト対象の API:

合格: YUV 画像と JPEG 画像が類似し、RMS(信号の二乗平均平方根値)差が 1% 未満であること。

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

test_yuv_plus_raw

1 つのフレームを RAW 出力と YUV 出力の両方としてキャプチャするテストです。RAW と YUV が同じになるように、線形トーンマップによる手動リクエストを使用します。RGB 変換された画像の中央 10% の RGB 値を比較します。android.shading.mode を記録します。

テスト対象の API:

合格: YUV 画像と JPEG 画像が類似し、RMS(信号の二乗平均平方根値)差が 3.5% 未満であること。

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

test_yuv_plus_raw10

1 つのフレームを RAW10 出力と YUV 出力の両方としてキャプチャするテストです。RAW と YUV が同じになるように、線形トーンマップによる手動リクエストを使用します。RGB 変換された画像の中央 10% の RGB 値を比較します。android.shading.mode を記録します。

テスト対象の API:

合格: RAW10 画像と YUV 画像が類似し、RMS(信号の二乗平均平方根値)差が 3.5% 未満であること。

test_yuv_plus_raw10_shading=1_raw test_yuv_plus_raw10_shading=1_yuv
test_yuv_plus_raw10_shading=1_raw.jpg test_yuv_plus_raw10_shading=1_yuv.jpg

test_yuv_plus_raw12

1 つのフレームを RAW12 出力と YUV 出力の両方としてキャプチャするテストです。RAW と YUV が同じになるように、線形トーンマップによる手動リクエストを使用します。RGB 変換された画像の中央 10% の RGB 値を比較します。android.shading.mode を記録します。

テスト対象の API:

合格: RAW12 画像と YUV 画像が類似し、RMS(信号の二乗平均平方根値)の差が 3.5% 未満であること。

test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg
test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg

scene2_a

scene2_a には 3 つの顔が写っています。背景はグレーで、それぞれ中間色の服を着ています。顔は肌の色が多様になるように選択されています。

scene2_a

scene2_a

test_auto_flash

暗い場所で自動フラッシュがトリガーされることをテストします。タイル画像の中央に大きなグラデーションがあることを確認することで、自動フラッシュの発光を確認します。自動フラッシュをトリガーするには、テスト装置のタブレットとライトをオフにする必要があります。タブレットはテストによりオフになり、ライトは Arduino コントローラを使用して自動でオフにできます。テストを正しく行うためには、シーンを真っ暗な状態にする必要があります。そのため、背面タブレットの開口部をシーンタブレットで完全に覆い、前面の開口部を絞りと DUT スマートフォンで覆うことで、迷光がリグに入らないようにする必要があります。

テスト対象の API:

合格: タイル画像の中央に、自動フラッシュが発光したことを示す大きなグラデーションがあること。

test_effects

サポートされているカメラ効果のフレームをキャプチャし、それらが正しく生成されているかどうかを確認します。このテストでは、OFFMONO の効果のみがチェックされますが、サポートされているすべての効果の画像が保存されます。

テスト対象の API:

合格: 効果を OFF にしたシーン画像と、効果を MONO に設定したモノクロ画像をキャプチャしていること。

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

出力形式のさまざまな組み合わせをテストします。

テスト対象の API:

合格: すべての組み合わせが正常にキャプチャされる。

test_jpeg_quality

カメラの JPEG 圧縮品質をテストします。android.jpeg.quality で JPEG 品質を段階的に上げながら、量子化テーブルが正しく変化するかどうかを確認します。

テスト対象の API:

合格: 品質の向上に伴って量子化マトリックスが減少すること(マトリックスは除算係数を表します)。

test_jpeg_quality

Pixel 4 の背面カメラの輝度 / 彩度 DQT マトリックスの平均と JPEG 品質の関係

test_jpeg_quality 失敗

失敗したテスト例

見ての通り、品質が非常に低い画像(jpeg.quality < 50)で量子化マトリックスの圧縮率が高くなっていません。

test_num_faces

顔検出をテストします。

テスト対象の API:

合格: 3 つの顔を検出すること。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scene2_b

test_num_faces

顔のシーンで肌の色の多様性を高めて顔検出をテストします。

テスト対象の API:

合格: 3 つの顔を検出すること。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

最大の YUV 形式と JPEG 形式で 2 つの画像をキャプチャします。このとき、解像度 1920x1440 以下で最大の JPEG 形式のアスペクト比が共通して使用されます。jpeg.quality を 100 に設定し、デュアル サーフェス リクエストをキャプチャします。両方の画像を RGB 配列に変換し、2 つの画像の 3D 二乗平均平方根(RMS)の差を計算します。

テスト対象の API:

合格: YUV 画像と JPEG 画像が類似し、RMS(信号の二乗平均平方根値)差が 1% 未満であること。

scene2_c

test_num_faces

顔のシーンで肌の色の多様性を高めて顔検出をテストします。

テスト対象の API:

合格: 3 つの顔を検出すること。

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

CDD のセクション 2.2.7.2 カメラで指定されている S パフォーマンス クラスの JPEG キャプチャ レイテンシをテストします。

合格: 両方のプライマリ カメラについて、ITS 照明条件(3000K)で CTS カメラの PerformanceTest によって測定したとき、解像度 1080p の camera2 JPEG キャプチャ レイテンシが 1,000 ms 未満でなければなりません。

test_camera_launch_perf_class

CDD のセクション 2.2.7.2 カメラで指定されている S パフォーマンス クラスのカメラ起動レイテンシをテストします。

合格: 両方のプライマリ カメラについて、ITS 照明条件(3000K)で CTS カメラの PerformanceTest によって測定したとき、camera2 起動レイテンシ(カメラを開いてから最初のプレビュー フレームまで)が 600 ms 未満でなければなりません。

scene2_d

test_num_faces

顔のシーンで肌の色の多様性を高めて顔検出をテストします。

テスト対象の API:

合格: 3 つの顔を検出すること。

scene2_e

test_continuous_picture

キャプチャ リクエストの最初の設定 android.control.afMode = 4 (CONTINUOUS_PICTURE). により、VGA 解像度の 50 フレームをキャプチャします。

テスト対象の API:

合格: 50 フレームのキャプチャを終えるまでに 3A システムが安定すること。

test_num_faces

顔のシーンで肌の色の多様性を高めて顔検出をテストします。

テスト対象の API:

合格: 3 つの顔を検出すること。

scene3

Scene3 では ISO12233 チャートを使用します。ほとんどのテストでは、チャート エクストラクタ メソッドを使用してシーン内のチャートを検出します。このため、保存された画像のほとんどには、シーン 1、2、4 の画像のような境界線がなく、チャートのみがあります。

test_3a_consistency

3A の整合性をテストします。

テスト対象の API:

合格: 露出、ゲイン、AWB(自動ホワイト バランス)、FD(焦点距離)について、3A が許容範囲内で 3 回収束すること。

test_edge_enhancement

android.edge.mode パラメータが正しく適用されていることをテストします。エッジモードごとに非再処理画像をキャプチャし、出力画像のシャープネスとキャプチャ結果のメタデータを返します。指定されたエッジモード、感度、露出時間、焦点距離、出力サーフェス パラメータを使用してキャプチャ リクエストを処理します。

合格: HQ モード(2)が OFF モード(0)よりもシャープであること。FAST モード(1)が OFF モードよりもシャープであること。HQ モードが FAST モードと同じかそれよりもシャープであること。

テスト対象の API:

影響を受けるカメラ パラメータ:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg(高速モード)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg(高画質モード)

test_flip_mirror

画像の向きが正しいかどうかをテストします(CDD セクション 7.5.2 Front-Facing Camera [C-1-5] に規定)。

ミラーリング、反転、または回転された画像は、中央付近のひし形の特徴で識別できます。

合格: 画像が反転、ミラーリング、回転されていないこと。

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_lens_movement_reporting

レンズ移動フラグが正しく報告されているかどうかをテストします。24 枚の画像のバーストをキャプチャします。最初の 12 フレームは最適な焦点距離(3A によって検出されます)、最後の 12 フレームは最小焦点距離でキャプチャします。フレーム 12 のあたりでレンズが動くため、シャープネスが低下します。レンズが最終位置に移動すると、それに伴ってシャープネスが安定します。シャープネスが、最適な焦点距離でレンズが静止している最初の 10 フレームと最小焦点距離でレンズが静止している最後の 10 フレームの間の値になるすべてのフレームで、レンズ移動フラグをアサートする必要があります。レンズが動く正確なフレームは重要ではありません。チェックするのは、レンズが動いているときに移動フラグがアサートされるかどうかです。

テスト対象の API:

合格: シャープネスが変化したフレームのレンズ移動フラグが True であること。

test_reprocess_edge_enhancement

サポートされているエッジ補正の再処理方法が正常に動作するかどうかをテストします。指定された再処理エッジモードでキャプチャ リクエストを処理し、再処理エッジモードを無効にした状態で、さまざまなキャプチャのモードを比較します。

テスト対象の API:

合格: さまざまなエッジモードのシャープネスが正しいこと。HQ(モード 2)は OFF(モード 0)よりもシャープで、さまざまなモード間での改善も同様であること。

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

scene4 は正方形の内側の白い背景に黒い円で構成されます。

scene4

scene4

test_aspect_ratio_and_crop

正方形の内側の円の写真を、すべての形式で撮影します。円のアスペクト比が変化せず、切り抜かれた画像で円の位置が中心に保たれ、一定の形式または異なる解像度で円のサイズが変化しないことを確認します(視野チェック)。

テスト対象の API:

合格: 画像が引き伸ばされず、画像の中心の差が 3% 未満で、最大可能 FOV(視野)が維持されていること。

test_multi_camera_alignment

カメラ間隔に関連するマルチカメラ システム パラメータをテストします。マルチカメラの物理サブカメラを使用して、物理カメラの 1 つで写真を撮影します。円の中心を見つけて、それを各カメラのワールド座標に投影します。ワールド座標におけるカメラの円の中心間の差を比較します。妥当性チェックとして、ワールド座標をピクセル座標に再投影し、元の座標と比較します。円のサイズを比較して、カメラのレンズ焦点距離が異なるかどうかを確認します。

テスト対象の API:

合格: レンズ焦点距離と円のサイズが一貫していること。

test_preview_stabilization_fov

サポートされているプレビュー サイズをチェックして、FoV が適切に切り抜かれていることを確認します。このテストでは、プレビューの手ぶれ補正を ON にした動画と OFF にした動画をキャプチャします。各動画から代表的なフレームを選択し、分析して、2 つの動画における FoV の変化が仕様の範囲内にあることを確認します。

テスト対象の API:

合格: 円のアスペクト比がほぼ一定で、円の中心の位置が安定しており、円の大きさの変化が 20% 以下、つまり FOV の変化が 20% 以内であること。

test_video_aspect_ratio_and_crop

正方形の内側の円の動画を、すべての動画形式で撮影します。キーフレームを抜き出して、円のアスペクト比が変化せず、切り抜かれた画像で円の位置が中心に保たれ、一定の形式または異なる解像度で円のサイズが変化しないことを確認します(視野チェック)。

テスト対象の API:

合格: 動画フレームが引き伸ばされず、フレームの中心の差が 3% 未満で、最大可能 FoV(視野)が維持されていること。

scene5/diffuser

test_lens_shading_and_color_uniformity

レンズ シェーディング補正が適切に適用され、モノクロの均一なシーンの色が均等に分布していることをテストします。自動 3A を備えた YUV フレームでこのテストを実行します。レンズ シェーディングは y チャンネルに基づいて評価されます。指定された各サンプル ブロックの平均 y 値を測定し、中央の y 値と比較して合格または不合格を判定します。色均一性テストは、r/g および b/g 空間で評価されます。

テスト対象の API:

合格: 画像の指定された半径の、r/g と b/g の値の分散が 20% 未満であること。

scene6

scene6 は複数の小さい円からなるグリッドです。グリッドの一角が四角形になっており、方向を表しています。広範囲にわたってズーム機能をテストするには、複数の小さい円が必要です。

scene6

scene6

test_zoom

カメラのズーム動作をテストします。ズーム範囲全体にわたって画像をキャプチャし、カメラのズームインに合わせて円が大きくなるかどうかを確認します。

テスト対象の API:

合格: キャプチャした円の相対的なサイズが、リクエストされたズーム比に対して正確で、カメラが正しくズームしていることを確認できること。

test_zoom

test_zoom で、中心に最も近い円の輪郭を見つけます。

sensor_fusion

センサー フュージョン テストでは、特定のスマートフォンをチェッカーボード パターンの前で動かす必要があります。sensor_fusion テストは、Sensor Fusion Box を使用して自動化できます。

チェッカーボード

チェッカーボードの画像

test_multi_camera_frame_sync

チェッカーボード内の正方形の角度を計算してタイムスタンプを割り出し、論理カメラでキャプチャしたフレームのタイムスタンプが 10 ミリ秒以内であることをテストします。

テスト対象の API:

合格: スマートフォンの回転により、各カメラの画像の角度がそれほど変化していないこと。

test_preview_stabilization

手ぶれ補正済みプレビュー動画の回転がジャイロスコープよりも小さいことをテストします。

テスト対象の API:

合格: フレーム間での最大角度回転が、ジャイロスコープ回転の 70% 未満であること。

手ぶれ補正ありとなしのサンプル動画を以下に示します。

  • 手ぶれ補正ありのサンプル動画

  • 手ぶれ補正なしのサンプル動画

    test_sensor_fusion

AR や VR のアプリでのカメラとジャイロスコープのタイムスタンプのずれをテストします。チェッカーボード パターンの前で、スマートフォンを計 10 回、90 度回転させます。モーションは往復で約 2 秒です。ジャイロスコープを備えていない場合、またはタイムスタンプ ソース REALTIME パラメータが有効になっていない場合、このテストはスキップされます。

test_sensor_fusion テストでは、多くのプロットが生成されます。デバッグで最も重要なプロットは 2 つあります。

  • test_sensor_fusion_gyro_events: テスト中のスマートフォンのジャイロスコープ イベントを表示します。x 方向と y 方向に動かすと、スマートフォンが取り付けプレートにしっかりと取り付けられていないため、テストに合格する可能性が低くなります。プロット内のサイクル数は、フレームを保存する際の書き込み速度によって異なります。

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations: ジャイロスコープ イベントとカメラ イベントの配置を表示します。このプロットは、カメラとジャイロスコープの間の動作の一致を +/-1 ms の誤差で示す必要があります。

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

テスト対象の API:

合格: カメラとジャイロスコープのタイムスタンプのオフセットが 1 ミリ秒未満であること(CDD セクション 7.3.9 High Fidelity Sensors [C-2-14] に規定)。

test_video_stabilization

手ぶれ補正済み動画の回転がジャイロスコープよりも小さいことをテストします。

テスト対象の API:

合格: 全フレームでの最大角度回転が、ジャイロスコープ回転の 60% 未満であること。

手ぶれ補正ありとなしのサンプル動画を以下に示します。

  • 手ぶれ補正ありのサンプル動画

  • 手ぶれ補正なしのサンプル動画