このページでは、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: ズーム
- scene_extensions: カメラ拡張機能
- 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_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_param_sensitivity_burst
android.sensor.sensitivity
パラメータがバースト時に適切に適用されることをテストします。出力メタデータのみを検査します。
テスト対象の API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
合格: 出力データの許容誤差が 0.2% 未満であること。
test_read_write
キャプチャ メタデータを読み戻すことにより、デバイスが正しい露出値とゲイン値を書き込むことをテストします。
テスト対象の 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_3a
適度な難易度のターゲットを使用して 3A の収束をテストします。
テスト対象の API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
合格: 3A が収束し、返された 3A 値が有効であること。
test_ae_af
3A の自動露出(AE)アルゴリズムとオート フォーカス(AF)アルゴリズムを個別にテストします。
テスト対象の API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
合格: 3A が収束し、返された 3A 値が有効であること。
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_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
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
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_exposure_time
android.sensor.exposureTime
パラメータが適用されていることをテストします。
テスト対象の API:
合格: 各ショットが前のショットよりも明るくなっていること。
test_param_exposure_time_frame0.jpg
test_param_exposure_time_plot.png
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_sensitivity
android.sensor.sensitivity
パラメータが適用されていることをテストします。このテストでは、ショットごとに露出を固定したまま 5 段階で感度を上げます。
テスト対象の API:
合格: 中央 10% の RGB 平均値が、感度が上昇するにつれて明るくなること。
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
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.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_auto_flash
暗い場所で自動フラッシュがトリガーされることをテストします。タイル画像の中央に大きなグラデーションがあることを確認することで、自動フラッシュの発光を確認します。自動フラッシュをトリガーするには、テスト装置のタブレットとライトをオフにする必要があります。タブレットはテストによりオフになり、ライトは Arduino コントローラを使用して自動でオフにできます。テストを正しく行うためには、シーンを真っ暗な状態にする必要があります。そのため、背面タブレットの開口部をシーンタブレットで完全に覆い、前面の開口部を絞りと DUT スマートフォンで覆うことで、迷光がリグに入らないようにする必要があります。
テスト対象の API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
合格: タイル画像の中央に、自動フラッシュが発光したことを示す大きなグラデーションがあること。
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_jpeg_quality
カメラの JPEG 圧縮品質をテストします。android.jpeg.quality
で JPEG 品質を段階的に上げながら、量子化テーブルが正しく変化するかどうかを確認します。
テスト対象の API:
合格: 品質の向上に伴って量子化マトリックスが減少すること(マトリックスは除算係数を表します)。
Pixel 4 の背面カメラの輝度 / 彩度 DQT マトリックスの平均と JPEG 品質の関係
失敗したテスト例
見ての通り、品質が非常に低い画像(jpeg.quality < 50)で量子化マトリックスの圧縮率が高くなっていません。
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_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_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)の差を計算します。
テスト対象の API:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
android.graphics.ImageFormat#JPEG
合格: YUV 画像と JPEG 画像が類似し、RMS(信号の二乗平均平方根値)差が 1% 未満であること。
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 未満でなければなりません。
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_3a_consistency
3A の整合性をテストします。
テスト対象の API:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
合格: 露出、ゲイン、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.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_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
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
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)の差が 1% 未満になること。
test_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_zoom で、中心に最も近い円の輪郭を見つけます。
test_low_latency_zoom
カメラの低レイテンシ ズーム動作をテストします。android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
でズーム範囲全体にわたって画像をキャプチャし、出力画像内の円がキャプチャ メタデータのズーム倍率に一致するかどうかを確認します。
テスト対象の 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(ズーム後)
scene_extensions
scene_extensions
テストはカメラ拡張機能のテストです。テスト環境を細かく制御する必要があるため、カメラ ITS-in-a-Box を使用しなければなりません。
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_night
scene_night
シーンは、白い円とその内部の 4 つの小さな白い円からなり、背景は黒です。向きを示すため、右上の小さな円は他の円よりも暗くされます。
scene_night
test_night_extension
夜間モード拡張機能をテストします。拡張機能が有効な場合と無効な場合のキャプチャを撮影し、次の点を確認します。
- 夜間モード拡張機能が有効な場合、キャプチャにかかる時間が長くなること。
- 夜間モード拡張機能が有効な場合、キャプチャが明るくなったり、シーン アーティファクトの外観が改善されたりすること。
テスト対象の API:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
合格: 夜間モード拡張機能が無効な場合と比較して、夜間モード拡張機能が有効な場合のキャプチャは 0.5 秒以上長くかかること。キャプチャが 10% 以上明るくなるか、シーン内のグレーのドットが周囲の円の中心よりも 20 ピクセル値小さくなる必要があります。
sensor_fusion
センサー フュージョン テストでは、チェッカーボード パターンの前でスマートフォンに特定の動きをさせる必要があります。最適な結果を得るために、テストチャートが平らに取り付けられていることを確認してください。チャートが平らでない場合、多くのテストの回転計算に影響します。sensor_fusion
テストは、Sensor Fusion Box を使用して自動化できます。
チェッカーボードの画像
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_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% 未満であること。
手ぶれ補正ありとなしのサンプル動画を以下に示します。
手ぶれ補正ありのサンプル動画
手ぶれ補正なしのサンプル動画
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)の範囲内にあること。