Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Android 12 Camera Image TestSuiteリリースノート

多くのカメラは、その変更は、Androidの12のリリースに含まれています。このページでは、4つの大きなカテゴリに分類される変更を要約します。

Python3へのリファクタリング

2020年1月のPython2.7の非推奨により、CameraITSコードベース全体がPython3にリファクタリングされました。Android12には次のPythonバージョンとライブラリが必要です。

メイン試験ランチャ、 tools/run_all_tests.py 、バージョンと同じアンドロイド11または低いままとPython 3にリファクタリングされています。

すべての個々のテストは、リファクタリングとで定義された新しいテスト・セットアップクラスを使用しているtests/its_base_test.py 。ほとんどのテスト名と機能は同じままです。 Android 12では、すべての個別のテストでシーンが読み込まれるようになりました。各テストのシーンの読み込みにより、全体的なテスト時間が長くなりますが、個々のテストのデバッグが可能になります。

個々のテストの変更の詳細については、以下を参照してくださいテストの変更を

次のPythonモジュールは、名前が変更されてリファクタリングされています。

  • pymodules/its/caps.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/sensor_fusion_utils.py

Moblyテストフレームワークの採用

Moblyカスタムハードウェアセットアップを持つ複数のデバイスを必要とするテストケースをサポートするPythonベースのテストフレームワークです。 Camera ITSは、Moblyテストインフラストラクチャを使用して、テストのより適切な制御とログ記録を可能にします。

Camera ITSは、Moblyテストインフラストラクチャを使用して、テストのより適切な制御とログ記録を可能にします。 Moblyは、カスタムハードウェアセットアップを備えた複数のデバイスを必要とするテストケースをサポートするPythonベースのテストフレームワークです。 Moblyの詳細については、参照mobly /グーグル

config.ymlファイル

Moblyフレームワークを使用すると、被試験デバイス(DUT)とのチャートタブレット設定することができits_base_testクラスを。 config.yml (YAML)ファイルがMoblyテストベッドを作成するために使用されます。この構成ファイル内で、タブレットやセンサーフュージョンテストベッドなど、複数のテストベッドを構成できます。各テストベッドのコントローラ部内では、指定することができdevice_idsテストランナーに適切なAndroidデバイスを識別するために。デバイスIDに加えて、例えば錠剤のような他のパラメータbrightnesschart_distancedebug_modecamera_id 、及びscene_idテストクラスに渡されます。一般的なテストパラメータ値は次のとおりです。

brightness: 192  (all tablets except Pixel C)
chart_distance: 31.0  (rev1/rev1a box for FoV < 90° cameras)
chart_distance: 22.0 (rev2 test rig for FoV > 90° cameras)

タブレットベースのテスト

タブレットベースのテストのために、キーワードTABLETテストベッドの名前に存在する必要があります。初期化中に、Moblyテストランナーは、初期化TestParamsし、個々のテストに渡します。

以下はサンプルですconfig.ymlタブレットベースの実行のためのファイル。

TestBeds:
  - Name: TEST_BED_TABLET_SCENES
    # Test configuration for scenes[0:4, 6, _change]
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut
          - serial: 5B16001229
            label: tablet

    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      chart_loc_arg: ""
      camera: 0
      scene: <scene-name>  # if <scene-name> runs all scenes

テストベッドを使用して呼び出すことができるtools/run_all_tests.py 。 、コマンドラインからの値が存在しない場合、テストはして実行config.ymlファイル値。また、あなたは無効にすることができますcamerascene Androidの11以下のようなコマンドを使用して、コマンドラインで設定ファイルの値を。

例えば:

python tools/run_all_tests.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=1 scenes=2,1,0

センサーフュージョンテスト

以下のためのセンサ融合テスト、テストベッドの名前は、キーワード含める必要がありSENSOR_FUSION 。正しいテストベッドは、テストされたシーンによって決定されます。 Androidの12のサポートの両方のArduinoとCanakitセンサフュージョン用コントローラ

以下はサンプルですconfig.ymlセンサフュージョンを実行するためのファイル。

Testbeds
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion/test_sensor_fusion.py
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: arduino         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

センサーフュージョン・テストを実行するには、センサー融合試験装置、使用します:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

複数のテストベッド

複数のテストベッドを構成ファイルに含めることができます。最も一般的な組み合わせは、タブレットテストベッドとセンサーフュージョンテストベッドの両方を使用することです。

以下はサンプルですconfig.ymlタブレットとセンサーの両方の融合テストベッドを使用してファイル。

Testbeds
  - Name: TEST_BED_TABLET_SCENES
    # Test configuration for scenes[0:4, 6, _change]
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut
          - serial: 5B16001229
            label: tablet

    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      chart_loc_arg: ""
      camera: 0
      scene: <scene-name>  # if <scene-name> runs all scenes

  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion/test_sensor_fusion.py
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: arduino         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

手動テスト

手動テストは、テストベッドは、キーワードでのようなテストを識別しなければならない、しかし、Androidの12でサポートされ続けMANUALテストベッドの名前インチさらに、テストベッドにタブレットIDを含めることはできません。

以下はサンプルですconfig.yml手動テスト用のファイル。

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: scene1

タブレットなしのシーンのテスト

シーン0シーン5のためのテストはして行うことができますTEST_BED_TABLET_SCENESかとTEST_BED_MANUAL 。試験を用いて行われる場合は、 TEST_BED_TABLET_SCENES 、タブレットが接続されなければならず、錠剤シリアルIDは、テストクラスのセットアップが錠剤のシリアルID値を割り当てるためのタブレットを使用しない場合であっても有効でなければなりません。

個別のテストの実行

その結果はに報告されていないため、個々のテストでは、デバッグの目的のためにのみ実行することができますCTS検証。のでconfig.ymlファイルは、コマンドラインで上書きすることができないcamerascene 、これらのパラメータはで正しくなければなりませんconfig.yml問題の個々のテストのためのファイル。複数のテストベッドは、設定ファイルに存在する場合また、あなたがテストベッドを指定する必要があり--test_bedフラグ。例えば:

python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES

アーティファクトをテストする

Android 12では、CameraITSのテストアーティファクトはAndroid11以下と同様に保存されますが、次の変更が加えられています。

  • テストアーティファクト/tmpディレクトリがありCameraITS_明確にするため、8文字のランダムな文字列の先頭に追加しました。
  • 試験出力と誤差がに格納されているtest_log.DEBUG代わりに、各試験用test_name_stdout.txttest_name_stderr.txt
  • 各個々の試験からDUTとタブレットlogcatsが記憶している/tmp/CameraITS_########デバッグ3Aの問題に必要なすべての情報が記録されるデバッグ簡略化ディレクトリ。

テストの変更

Android 12では、タブレットシーンはPDFファイルではなくPNGファイルです。 PNGファイルを使用すると、より多くのタブレットモデルでシーンを適切に表示できます。

scene0 / test_jitter.py

test_jitterテストは、Android 12内の物理隠しカメラ上で実行されます。

scene1_1 / test_black_white.py

Androidの12のために、 test_black_whiteの両方の機能があるtest_black_whitetest_channel_saturation

次の表に、Android11での2つの個別のテストを示します。

テスト名最初のAPIレベルアサーション
scene1_1 / test_black_white.py全て短い露出、低ゲインRGB値〜[0、0、0]
長時間露光、高ゲインRGB値〜[255、255、255]
scene1_1 / test_channel_saturation.py 29 [255、255、255]の違いの許容範囲を減らして、白い画像の色合いをなくしました。

次の表は、Android12でマージされたテストscene1_1 / test_black_white.pyについて説明しています。

テスト名最初のAPIレベルアサーション
scene1_1 / test_black_white.py全て短い露出、低ゲインRGB値〜[0、0、0]
長時間露光、高ゲインRGB値〜[255、255、255]、値間の許容誤差を減らして、白い画像の色合いをなくします。

scene1_1 / test_burst_sameness_manual.py

test_burst_sameness_manualテストは、Android 12内の物理隠しカメラ上で実行されます。

scene1_2 / test_tonemap_sequence.py

test_tonemap_sequenceテストは、Androidの12の限られたカメラ上で実行されます。

scene1_2 / test_yuv_plus_raw.py

test_yuv_plus_rawテストは、Android 12内の物理隠しカメラ上で実行されます。

scene2_a / test_format_combos.py

test_format_combosテストは、Androidの12の限られたカメラ上で実行されます。

scene3 / test_flip_mirror.py

test_flip_mirrorテストは、Androidの12の限られたカメラ上で実行されます。

scene4 / test_aspect_ratio_and_crop.py

で円を見つけるscene4/test_aspect_ratio_and_crop.py Androidの12にリファクタリングされました。

以前のAndroidバージョンでは、サイズと色のフィルターを使用して、親の輪郭(正方形)内の子の輪郭(円)を見つける方法を使用していました。 Androidの12件の用途すべての輪郭を検索し、次に最もcirclishな機能を見つけることによってフィルタリングが含ま方法。ディスプレイ上の偽の円を遮蔽するには、必要な最小輪郭領域があり、円の輪郭は黒である必要があります。

輪郭とその選択基準を次の画像に示します。

輪郭と選択基準の概念図

輪郭と選択基準の図1.概念図

Android 12の方法はよりシンプルで、一部のディスプレイタブレットのバウンディングボックスクリッピングの問題を解決するために機能します。すべてのサークル候補は、デバッグ目的でログに記録されます。

Androidの12で、作物のテストをするために実行されFULLLEVEL3デバイス。 Androidの11以下のバージョンでは用作物のテストアサーションスキップFULLデバイスを。

次の表のためのアサーションtest_aspect_ratio_and_crop.py所与のデバイスレベルと第1のAPIレベルに対応します。

デバイスレベル最初のAPIレベルアサーション
限定全てアスペクト比
4:3、16:9、2:1フォーマットのFoV
満杯<31アスペクト比
4:3、16:9、2:1フォーマットのFoV
満杯≥31作物
アスペクト比
4:3、16:9、2:1フォーマットのFoV
レベル3全て作物
アスペクト比
4:3、16:9、2:1フォーマットのFoV

scene4 / test_multi_camera_alignment.py

メソッドundo_zoom() YUVためのキャプチャでscene4/test_multi_camera_alignment.pyキャプチャのアスペクト比と一致しないセンサーにトリミングのために、より正確口座にリファクタリングされました。

Android 11 Python2コード

zoom_ratio = min(1.0 * yuv_w / cr_w, 1.0 * yuv_h / cr_h)
circle[i]['x'] = cr['left'] + circle[i]['x'] / zoom_ratio
circle[i]['y'] = cr['top'] + circle[i]['y'] / zoom_ratio
circle[i]['r'] = circle[i]['r'] / zoom_ratio

Android 12 Python3コード

yuv_aspect = yuv_w / yuv_h
relative_aspect = yuv_aspect / (cr_w/cr_h)
if relative_aspect > 1:
  zoom_ratio = yuv_w / cr_w
  yuv_x = 0
  yuv_y = (cr_h - cr_w / yuv_aspect) / 2
else:
  zoom_ratio = yuv_h / cr_h
  yuv_x = (cr_w - cr_h * yuv_aspect) / 2
  yuv_y = 0
circle['x'] = cr['left'] + yuv_x + circle['x'] / zoom_ratio
circle['y'] = cr['top'] + yuv_y + circle['y'] / zoom_ratio
circle['r'] = circle['r'] / zoom_ratio

sensor_fusion / test_sensor_fusion.py

Android 12では、センサーフュージョンテストに画像内の特徴を検出する方法が追加されています。

Android 12より前のバージョンでは、画像全体を使用して最高の240の機能を見つけ、中央に20%マスクして、ローリングシャッター効果を回避します。最小の機能要件は30の機能です。

この方法で検出された機能が不十分な場合、Android 12は最初に機能検出領域を中央に20%マスクし、最大機能を最小機能要件の2倍に制限します。

次の画像は、Android11とAndroid12の機能検出の違いを示しています。最小機能要件のしきい値を上げると、低品質の機能が検出され、測定に悪影響を及ぼします。

Android11とAndroid12の機能検出の違いsensor_fusion機能検出

アンドロイド11とAndroid 12との間の特徴検出に図2の違い

新しいテスト

scene0 / test_solid_color_test_pattern.py

新しいテスト、 test_solid_color_test_pattern 、このテストでは、すべてのカメラのために有効になっていると、次の表に記載されているAndroidの12のために有効になっています。

シーンテスト名最初のAPIレベル説明
0 test_solid_color_test_pattern 31単色画像出力と画像カラープログラム可能性を確認します。

カメラのプライバシーモードをサポートするには、単色のテストパターンを有効にする必要があります。 test_solid_color_test_patternテストは、選択されたパターンによって定義された色でソリッドカラーYUV画像出力を確認し、画像の色は、仕様に応じて変化します。

パラメーター

  • cameraPrivacyModeSupport :かを決定し、カメラがプライバシーモードをサポートしているかどうか。
  • android.sensor.testPatternMode :テストパターンモードを設定します。このテストでは使用していますSOLID_COLOR
  • android.sensor.testPatternData :R、GR、GB、テストパターンモードのGテストパターン値を設定します。

ソリッドカラーテストパターンの説明については、参照SENSOR_TEST_PATTERN_MODE_SOLID_COLOR

方法

YUVフレームは、設定されたパラメータに対してキャプチャされ、画像コンテンツが検証されます。テストパターンはイメージセンサーから直接出力されるため、特定のシーンは必要ありません。場合PER_FRAME_CONTROLサポートされ、単一のYUVフレームは、試験した各設定のために捕捉されます。場合PER_FRAME_CONTROLサポートされていない、4つのフレームのみが最後のフレームで撮影されたテスト・カバレッジを最大化するために分析LIMITEDカメラ。

YUVキャプチャは、完全に飽和に設定されているBLACKWHITEREDGREEN 、およびBLUEのテストパターン。テストパターンの定義はセンサーのベイヤーパターンごとであるため、次の表に示すように、色ごとにカラーチャネルを設定する必要があります。

testPatternData(RGGB)
(0, 0, 0, 0)
白い(1, 1, 1, 1)
(1, 0, 0, 0)
(0, 1, 1, 0)
(0, 0, 0, 1)

アサーションテーブル

次の表は、テストのためのアサーションを記述しtest_solid_color_test_pattern.py

カメラ
最初のAPIレベル
カメラタイプ主張された色
31バイエル黒、白、赤、緑、青
31単核症黒、白
<31バイエル/モノ

パフォーマンスクラステスト

scene2_c / test_camera_launch_perf_class.py

scene2_cフェイスシーンのフロントプライマリカメラとリアプライマリカメラの両方で、カメラの起動が500ミリ秒未満であることを確認します。

scene2_c / test_jpeg_capture_perf_class.py

scene2_cフェイスシーンのフロントプライマリカメラとリアプライマリカメラの両方で、1080pJPEGキャプチャの待ち時間が1秒未満であることを確認します。