このページでは、Android 互換性テストスイート(CTS)検証ツールの一部である、カメラ画像テストスイート(ITS)のテストの一覧を示します。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: アスペクト比、切り抜き、画角
- 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
、画角、過焦点距離が存在し、値が有効であること。
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
合格: モーション タイムスタンプが 2 つの画像タイムスタンプの間にあること。
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 カメラをテストする場合、チャートを 2/3 に縮小します。これにより、FoV 内にグレーのチャートの境界線が作られ、3A が収束しやすくなります。カメラテスト装置について詳しくは、カメラ ITS-in-a-box をご覧ください。
scene1: フルサイズのチャート(左)。2/3 に縮小したチャート(右)。
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
デバイスで真っ黒な画像と真っ白な画像が生成されることをテストします。キャプチャを 2 回行います。1 回目は、極端に低いゲインと短い露出で黒い画像を生成し、2 回目は、極端に高いゲインと長い露出で白い画像を生成します。
テスト対象の 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
手動キャプチャ設定で 50 枚のバースト撮影を 5 回行い、それらがすべて同一であることを確認します。このテストは、異なる方法で処理された、またはアーティファクトがある散発的なフレームがあるかどうかを識別するために使用できます。
テスト対象の 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
合格: メタデータがすべてのキャプチャに対して有効であり、手動設定が 2 回目の自動撮影に影響していないこと。キャプチャのレンズ シェーディング補正がプロットされていること。
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 RAW モデル パラメータが正しいことを検証します。プロットは、ある範囲の感度でキャプチャされた RAW ショットにおける、標準反射板の中央パッチで測定された分散を示し、これらの値をカメラ 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 RAW モデル パラメータが正しいこと。予想 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*exposure の値が一定である場合、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 = ユニティ、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 オフ、「高速」、「高画質」の 3 つの画像をキャプチャします。また、低ゲインで NR をオフにした画像をキャプチャし、その分散をベースラインとして使用します。SNR(信号対雑音比)が高いほど、画質が高くなります。
テスト対象の API:
合格: ノイズ リダクション モードによって SNR が異なり、下記のグラフと同じように変化すること。
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.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 の 2 つのテストで構成されています。
テスト対象の 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 の方が勾配が急であること。G(緑)チャンネルは n=1 画像の方が明るいこと。
- 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
ゲインを上げながら RAW 画像のセットをキャプチャし、ノイズを測定します。RAW 画像のみをバーストでキャプチャします。
テスト対象の 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
露出時間を増やしながら RAW 画像のセットをキャプチャし、ピクセル値を測定します。
テスト対象の 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
感度を上げながら RAW 画像のセットをキャプチャし、画像の中央 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 オフ、「高速」、「高画質」の 3 つの再処理された画像をキャプチャします。低ゲインで NR をオフにして再処理された画像をキャプチャし、この分散をベースラインとして使用します。
テスト対象の API:
合格: FAST >= OFF、HQ >= FAST、HQ >> OFF
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
報告されたすべての画像キャプチャのサイズと形式が機能することをテストします。image_processing_utils
モジュールで変換したときに YUV と JPEG が同じに見えるように、線形トーンマップによる手動リクエストを使用します。デフォルトでは画像は保存されませんが、debug_mode
を有効にすると保存できます。
テスト対象の API:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
合格: 最高解像度の YUV 画像の 3% の RGB 変換画像で、すべての画像の中央に最大の RMS(信号の二乗平均平方根値)差があること。
test_yuv_jpeg_all.png
test_yuv_plus_dng
報告された画像キャプチャのサイズと形式が機能することをテストします。
テスト対象の API:
合格: テストが完了し、リクエストした画像が返されること。
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
1 つのフレームを YUV 出力と JPEG 出力の両方としてキャプチャするテストです。image_processing_utils
モジュールで変換したときに YUV と JPEG が同じに見えるように、線形トーンマップによる手動リクエストを使用します。
テスト対象の 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
1 つのフレームを 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 には 3 つの顔が写っています。背景はグレーで、それぞれ中間色の服を着ています。顔は肌の色が多様になるように選択されています。顔検出が最適に機能するためには、チャートの向きが正しくなければなりません。
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
合格: 3 つの顔がすべて検出されること。
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
合格: 3 つの顔を検出すること。
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 形式で 2 つの画像をキャプチャします。このとき、解像度 1920x1440 以下で最大の JPEG 形式のアスペクト比が共通して使用されます。jpeg.quality
を 100 に設定し、デュアル サーフェス リクエストをキャプチャします。両方の画像を RGB 配列に変換し、2 つの画像の 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 キャプチャ レイテンシをテストします。
合格: 両方のプライマリ カメラについて、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 未満でなければなりません。
test_default_camera_hdr
CDD のセクション 2.2.7.2 カメラで指定されているように、デフォルトのカメラ キャプチャがパフォーマンス クラス 15 のウルトラ HDR であることをテストします。
合格: パフォーマンス クラス 15 のデバイスの場合、デフォルトのカメラ パッケージ キャプチャはウルトラ 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).
により、VGA 解像度の 50 フレームをキャプチャします。
テスト対象の 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
合格: 50 フレームのキャプチャを終えるまでに 3A システムが安定すること。
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 Front-Facing Camera [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 秒あたり 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 の動画をキャプチャします。各動画から代表的なフレームを選択し、分析して、2 つの動画における 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 と低解像度の画像の 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-in-a-box FAQ1 をご覧ください。
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
にした動画をキャプチャします。各動画から代表的なフレームを選択し、分析して、2 つの動画における 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
シーンの準備として、カメラの前にディフューザーを取り付け、2,000 ルクス程度の光源にカメラを向けます。scene5 のキャプチャ画像では、光を拡散させてはっきりとした特徴を捉えないことが求められます。サンプル画像は次のとおりです。
scene5 capture
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 画像の 2 つのキャプチャを撮影します。テストでは画像を RGB 配列に変換し、フルサイズの切り抜き RAW 画像を SCALER_RAW_CROP_REGION
によって報告されたサイズにダウンスケールし、2 つの画像間の 3 次元二乗平均平方根(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 画像と全画角 RAW 画像の間の 3 次元二乗平均平方根(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 は、4 つの等しい象限に分割され、それぞれが異なる色で塗りつぶされた長方形のフレームです。長方形の中央には、シャープネスをチェックするための斜めのエッジチャートがあります。4 つの ArUco マーカーが長方形の 4 つの外側の角に揃えられており、メインの長方形のフレームの正確な座標をさまざまなズーム倍率で取得するのに役立ちます。
scene7
test_multi_camera_switch
このテストでは、さまざまなズーム倍率でのプレビュー録画中に、超広角(UW)レンズと広角(W)レンズを切り替えると、同様の RGB 値が得られることを確認します。
事前定義された範囲内でさまざまなズーム倍率を使用して、動的なプレビュー録画を実行し、物理カメラが変化するポイントを識別します。このポイントは、UW レンズから W レンズへの交差点を示します。
自動露出(AE)、自動ホワイト バランス(AWB)、オートフォーカス(AF)の観点で、交差点とその前にキャプチャされたフレームを分析します。
AE チェックでは、UW レンズ画像と W レンズ画像の両方で輝度の変化が予想範囲内であることを確認します。AWB チェックでは、UW レンズ画像と W レンズ画像の両方で R/G と B/G の比率がしきい値内であることを確認します。AF チェックでは、UW レンズ画像と W レンズ画像間の平均勾配の大きさに基づいてシャープネスの推定値を評価します。
テスト対象の API:
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 チェック: UW レンズ画像と W レンズ画像の間の輝度の変化が 0.5% 未満であること。
- AWB チェック: UW レンズ画像と W レンズ画像の R/G 値と B/G 値の差が 0.5% 未満であること。
- AF チェック: UW レンズ画像と W レンズ画像の間の画像鮮明度の変化が 2% 未満であること。
scene8
Scene8 は、4 つの等しい領域に分割された長方形のフレームで、各領域には、異なる露出で撮影されたポートレート、または異なるシェード(青いシェード、露出の増加、露出の減少、黄色いシェード)が重ねて表示されます。4 つの ArUco マーカーが長方形の 4 つの外側の角に揃えられており、メインの長方形フレームの正確な座標を取得します。
scene8
test_ae_awb_regions
異なる自動露出(AE)および自動ホワイト バランス(AWB)領域で録画をプレビューするときに、RGB 値と輝度値が異なることをテストします。
このテストでは、AE と AWB の計測を各象限で 2 秒間ずつ実行し、8 秒間のプレビュー録画を録画します。次に、テストでは各領域のプレビュー録画からフレームを抽出し、抽出したフレームを使用して次の 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 チェックの両方に合格すること。
不合格メカニズム:
このテストでは、4 個すべての ArUco マーカーを正確に検知することが必須です。初期検出が失敗した場合、システムは画像のモノクロ バージョンを使用して、2 回目の検出が合格するように試みます。下のグレースケール画像は、2 回目の処理ステップを表しています。
scene9
Scene9 では、JPEG 圧縮アルゴリズムに負荷をかけるため、サイズと色がランダムな数千の円で構成され、再現性が極めて低いシーンを作成します。
scene9
test_jpeg_high_entropy
高エントロピーで、JPEG 品質係数が 100% に設定された scene9 でカメラの JPEG 圧縮が機能することをテストします。ズーム係数を上げ、タブレットに表示されるシーンがカメラの画角いっぱいに表示されるようにします。
テスト対象の API:
合格: JPEG ファイルが適切に圧縮され、書き込まれ、ディスクから読み戻されること。
test_jpeg_quality
カメラの JPEG 圧縮品質をテストします。android.jpeg.quality
で JPEG 品質を段階的に上げながら、量子化テーブルが正しく変化するかどうかを確認します。
テスト対象の API:
合格: 品質の向上に伴って量子化マトリックスが減少すること(マトリックスは除算係数を表します)。
Pixel 4 の背面カメラの輝度 / 彩度 DQT マトリックスの平均と JPEG 品質の関係
失敗したテスト例
見てのとおり、品質が非常に低い画像(jpeg.quality < 50)で量子化マトリックスの圧縮率が高くなっていません。
scene_video
scene_video
シーンは動画シーンです。白い背景に対して、異なるフレームレートで前後に移動する異なる色の 4 つの円で構成されています。
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-in-a-Box を使用しなければなりません。さらに、すべての光漏れを制御しなければなりません。テスト装置、DUT、タブレットを防水布で覆い、DUT の前面スクリーンからの光漏れを排除する必要がある場合があります。
scene_hdr
scene_hdr
シーンは、左側のポートレートと右側の低コントラストの QR コードからなります。
scene_hdr
test_hdr_extension
HDR 拡張機能をテストします。拡張機能が有効な場合と無効な場合のキャプチャを撮影し、拡張機能により QR コードが検出しやすくなるかどうかを確認します。
テスト対象の API:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
合格: HDR 拡張機能により、QR コードの検出に必要なコントラストの変化数が減少するか、QR コード全体のグラデーションが低下すること。
scene_low_light
scene_low_light
シーンは、黒い背景に対してさまざまなグレーの色合いの正方形のグリッドで構成され、正方形のグリッドは赤いアウトラインで囲まれています。正方形はヒルベルト曲線の方向に配置されています。
scene_low_light
test_night_extension
夜間モード拡張機能をテストします。拡張機能を有効にしてキャプチャを取得し、次の操作を実行します。
- 20 個の正方形の存在を検出する
- 各正方形で囲まれた輝度を計算する
- ヒルベルト曲線のグリッド方向に従って最初の 6 つの正方形の平均輝度値を計算する
- 連続する正方形(たとえば、square2 - square1)から正方形 5 と 6(square6 - square5)までの輝度値の差を計算し、計算された 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 つの正方形の平均輝度値を計算する
- 連続する正方形(たとえば、square2 - square1)から正方形 5 と 6(square6 - square5)までの輝度値の差を計算し、計算された 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
テストでは、Sensor Fusion Box 内に暗いシーンが必要です。
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 スナップショットによる画像の彩度や色合いの調整がないことを確認します。
このテストでは、照明コントローラを Sensor Fusion Box に追加し、ライトを制御します。ライトが OFF
に設定されている場合、AUTO_FLASH
モードが ON
に設定された状態でキャプチャを撮影します。キャプチャ中、aePrecapture
トリガーが START
に設定された状態でプリキャプチャ シーケンスを実行し、キャプチャ インテントを 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×17 インチ(43×43 センチ)で出力し、Sensor Fusion Box の背面を覆う必要があります。sensor_fusion
テストは、Sensor Fusion Box を使用して自動化できます。
センサー フュージョンのチャート
Sensor Fusion Box の背面を埋め尽くすセンサー フュージョンのチャート
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 のアプリでのカメラとジャイロスコープのタイムスタンプのずれをテストします。チェッカーボード パターンの前で、スマートフォンを計 10 回、90 度回転させます。モーションは往復で約 2 秒です。ジャイロスコープを備えていない場合、またはタイムスタンプ ソース REALTIME
パラメータが有効になっていない場合、このテストはスキップされます。
test_sensor_fusion
テストでは、多くのプロットが生成されます。デバッグで最も重要なプロットは 2 つあります。
test_sensor_fusion_gyro_events
: テスト中のスマートフォンのジャイロスコープ イベントを表示します。x と y 方向への動きが見られる場合は、スマートフォンが取り付けプレートにしっかりと取り付けられていないため、テストに合格する可能性が低くなります。プロット内のサイクル数は、フレームを保存する際の書き込み速度によって異なります。test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: ジャイロスコープ イベントとカメラ イベントの配置を表示します。このプロットは、カメラとジャイロスコープの間の動作の一致を +/-1 ms の誤差で示す必要があります。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
合格: カメラとジャイロスコープのタイムスタンプのオフセットが 1 ミリ秒未満であること(CDD セクション 7.3.9 High Fidelity Sensors [C-2-14] に規定)。
不合格メカニズム:
- オフセット エラー: カメラとジャイロスコープのオフセットが +/-1 ms の誤差になるように正しく調整されていません。
- フレーム ドロップ: パイプラインの速度が足りず、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 ビット HDR 動画、ウルトラ HDR のすべての組み合わせをテストします。このテストはメモリを大量に消費するため、少なくとも 128 GB の RAM を搭載したホストを使用することをおすすめします。
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
の範囲内であること。 - 録画されたプレビュー ストリームの色空間が設定と一致すること。
- ウルトラ HDR キャプチャに有効なゲインマップがあること。