カメラ ITS-in-a-Box

Android カメラ画像テストスイート(ITS)は、Android 互換性テストスイート(CTS)検証ツールの一部であり、画像の内容を検証するテストが行われます。CTS 検証ツールは、カメラ ITS-in-a-box を使用した ITS テストの自動化をサポートしています。手動テストはすべての Android デバイスのフォーム ファクタでサポートされています。

ITS-in-a-box には次のようなメリットがあります。

  • 自動化: テスト中に手動で操作する必要はありません。
  • トラブルシューティングが容易: テスト環境が一貫しているため、セットアップの間違いが少なく、再現性が向上します。
  • 効率性: カメラやシーンごとに再試行できるため、テストの実行効率が向上します。

始める

ITS-in-a-box は、CAD 図面からレーザーカットされたプラスチック製の箱、チャート用タブレット、テスト対象デバイス(DUT)で構成されています。以下の表に、利用可能なさまざまな ITS-in-a-box 装置の特長と仕様をまとめます。

装置 チャート距離 DUT カメラの画角範囲(概算) 特長
モジュラー ベース装置 22 cm 60~120°
  • サイズが小さい
  • 前面に大きな絞りカットアウトがあるため、カットアウト ブロック用の 2 台目のカメラを使わずにマルチカメラ システムテストが可能
  • 装置が 90° 回転可能
  • モジュラー ベース装置と望遠拡張装置 22~100 cm* 10~120°
  • 前面に大きな絞りカットアウトがある
  • 最小焦点距離が長いカメラ(ほとんどの望遠カメラ)のテストに対応
  • WFoV ITS-in-a-box 22 cm 60~120°
  • サイズが大きいため、多くの DUT 取り付け位置に対応
  • タブレットなど、大型 DUT に対応
  • RFoV ITS-in-a-box 31 cm 60~90°
  • チャート用タブレット
  • 内部照明システム
  • * 望遠拡張装置の長さは、さまざまなチャート距離に合わせて調整できる。

    カメラ ITS-in-a-box の使い方は次のとおりです。

    1. モジュラーWFoVRFoV のいずれかの ITS-in-a-box を購入または製作します。
    2. カメラ ITS ソフトウェアを使用してタブレットを設定します。
    3. テストを実行します。
    4. DUT から結果を取得します。

    タブレットを設定する

    このセクションでは、CameraITS ディレクトリのカメラ ITS テストに使用するタブレットをセットアップする手順を説明します。以下の手順では、タブレットとして Pixel C を使用しています。タブレットの要件と推奨事項については、タブレットの要件をご参照ください。

    注: カメラ ITS Python スクリプトは、タブレットで自動的に次のオプションを設定します。
    [設定] > [ディスプレイ] > [スリープ] > [操作が行われない状態で 30 分経過後]
    [明るさの自動調節] > [OFF]

    1. タブレットを充電し、電源を入れます。アカウントのセットアップを求めるメッセージが表示されたら、スキップします。カメラ ITS では、タブレットでのアカウント登録は必要ありません。
    2. タブレットを Android 7.0 以降に更新します。Android 6.x 以前のバージョンは、カメラ ITS に対応していません。
    3. デベロッパー モードを有効にします。
    4. [設定] に戻り、[開発者向けオプション] を選択します。
      有効にするオプション
      • ON
      • [スリープモードにしない]
      • [USB デバッグ](ホストがタブレットをデバッグモードで実行できるようになります。タブレットを初めてホストに接続したとき、[USB デバッグを許可しますか?] というメッセージがタブレットに表示されます。タブレットにこのメッセージが表示されない場合は、タブレットを取り外してからもう一度接続してください)
      無効にするオプション
      • [自動システム アップデート]
      • [USB 経由のアプリを確認]
    5. $ adb devices を実行して使用可能なデバイスの一覧を表示し、DUT とチャートの ID を調べます。device_idchart_id を調べるには、デバイスの接続と取り外しを行い、接続状態や切断状態になったデバイスを見つけます。
    6. 3 つのテストを実行して、タブレット画面のチャートを隠してしまう可能性があるヒントやユーザーへのメッセージを抑止します。
      1. タブレットを表向きにしてテーブルに置きます。ボックスの背面パネルには付けないでください。
      2. 次のコマンドを実行します。
        python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
        
        シーン 2 と 3 ではタブレットに画像を表示する必要があるため、[デバイス内の写真、メディア、ファイルへのアクセスを「ドライブ」に許可しますか?] というメッセージがタブレットに表示されます。[許可] をタップして、このメッセージを消し、今後も表示されないようにします。
      3. もう一度このコマンドを実行します。[このファイルのコピーを保存しますか?] というメッセージがタブレットに表示され、Google ドライブが候補として表示されます。Google ドライブのアイコンをタップしてから、[キャンセル] をタップして Google ドライブへのアップロードを取り消して、このメッセージを消し、今後も表示されないようにします。
      4. 最後に、tools/run_all_tests.py を実行して、スクリプトがシーンを切り替えている間、シーンが自動的に変化することを確認します。カメラがチャートに向けられていないため、ほとんどのテストは失敗しますが、画面にメッセージやその他のポップアップが表示されることなく、タブレットがシーンを正しく切り替えていることを確認できます。

    テストを実行する

    ITS-in-a-box を実行する前に、テストに使用する以下のハードウェアとソフトウェアが準備できていることを確認します。

    • ITS-in-a-box を 1 台
    • シーン表示用の高解像度 10 インチ タブレットを 1 台(S/N: 5811000011)
    • CTS 検証ツール 7.0_8 以降のアプリがインストールされている DUT を 1 台。DUT の例:
      • 背面カメラ(0)のテスト用 Pixel NOF26W を 1 台(S/N: FA6BM0305016)。CTS 検証ツールアプリをインストールするには、android-cts-verifier.zip を解凍して、次のコマンドを実行します。
        adb -s FA6BM0305016 install -r -g android-cts-verifier/CtsVerifier.apk
        

    タブレット ベースのシーンを実行する

    背面カメラでシーン 0~4、6 と、scene_change を実行するには、次のコマンドを実行します。

    cd android-cts-verifier/CameraITS
    . build/envsetup.sh
    python tools/run_all_tests.py camera=0
    

    例:

    カメラ 0(S/N: FA6BM0305016)
    図 1. カメラ 0(S/N: FA6BM0305016)

    シーンを再試行する

    1 台のカメラでシーンを再試行できます。

    • 1 台のカメラでシーンを再試行するには、次のコマンドを実行します。
      python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
      

    シーン 5 を実行する

    シーン 5 には特定の照明を使用する特殊なセットアップが必要です。詳細は、CTS 検証ツールの CameraITS.pdf をご確認ください。検証ツールは、互換性テストスイートのダウンロードからダウンロードできます。シーン 5 を(箱の外で)個別に実行する必要があります。

    カメラシーン 5
    図 2. カメラシーン 5

    1 台のデバイスの前面カメラと背面カメラでシーン 5 を実行するには、次のコマンドを実行します。

    python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=5
    python tools/run_all_tests.py device=FA6BM0305016 camera=1 scenes=5
    

    結果を取得する

    テスト中に結果を表示して、完了後に結果をレポートとして保存できます。

    • 結果の表示: カメラ ITS の結果をレポートとして保存する手順は以下のとおりです。
      1. [Pass] を押して、レポートを保存します。
        カメラ ITS のレポート
        図 3. カメラ ITS のレポート
      2. デバイスからレポートをダウンロードします。
        adb -s FA6BM0305016 pull /sdcard/verifierReports
        
      3. レポート ファイルを解凍して、test_result.xml を表示します。
        カメラ ITS のレポート
        図 4. カメラ ITS のレポート

    タブレットの要件

    タブレットには、約 10 インチのディスプレイ サイズ、1,920 x 1,200 ピクセルよりも高い画面解像度が必要です。タブレットは、明るさレベルの設定にパルス幅変調(PWM)を使用してはなりません。タブレットのモデルに基づいて、brightness 値を config.yml に設定する必要があります。以下の表に、ITS テストで推奨されるタブレットと、タブレットで使用する DUT の Android リリース バージョンを示します。

    デバイス ディスプレイ サイズ
    (インチ)
    ディスプレイ サイズ
    (ピクセル)
    タブレットの寸法
    (インチ)
    ディスプレイの
    明るさ
    ディスプレイ
    ビット
    サポートされている
    DUT OS
    サポートされている
    タブレット OS
    Samsung
    Galaxy Tab A8
    10.5 1,920 x 1,200 9.72 x 6.37 x 0.27 192 8 Android 13 以上 Android 11 以上
    Xiaomi
    Pad 5
    11 2,560 x 1,600 10.03 x 6.55 x 0.27 1024 11 Android 12 以上 Android 11 のみ
    Lenovo
    Tab M10 Plus
    10.3 1,920 x 1,200 9.61 x 6.03 x 0.32 192 8 Android 12 以上 Android 9 以上
    Samsung
    Galaxy Tab A7
    10.4 2,000 x 1,200 9.75 x 6.2 x 0.28 192 8 Android 12 以上 Android 10 以上
    Chuwi
    Hi9 Air 10.1
    10.1 2,560 x 1,600 9.52 x 6.77 x 0.31 192 8 Android 7 以上 Android 8 以上
    Asus
    ZenPad 3
    9.7 2,048 x 1,536 9.47 x 6.44 x 0.28 192 8 Android 7 以上 Android 6 以上
    Huawei
    MediaPad m5
    10.8 2,560 x 1,600 10.18 x 6.76 x 0.29 192 8 Android 7 以上 Android 8 以上
    Google
    Pixel C
    10.2 2,560 x 1,800 9.53 x 7.05 x 0.28 96 8 Android 7 以上 Android 6 以上
    Sony
    Xperia Z4
    10.1 2,560 x 1,600 10 x 6.57 x 0.24 192 8 Android 7 以上 Android 5 以上

    よくある質問

    Q1: 自分のデバイスに必要なテスト装置を確認するにはどうすればよいですか?

    RFoV ITS-in-a-box リビジョン 1 では、 CameraITS/tests ディレクトリにあるタブレット シーンテストで RFoV カメラをテストします。RFoV の定義は、60° < 画角 < 90° です。画角が大きすぎるカメラの場合、画像に光が入ったり、チャートが小さすぎて画角をカバーできなかったりして、テスト結果に影響を与えます。

    WFoV ITS-in-a-box リビジョン 2 では、 CameraITS/tests ディレクトリにあるタブレット シーンテストで WFoV カメラをテストします。WFoV の定義は、画角 >= 90° です。リビジョン 2 のテスト装置は、機能的にはリビジョン 1 と同じですが、サイズが大きくなります。リビジョン 2 のテスト装置は、Android 9 以降の RFoV カメラと WFoV カメラの両方をテストできます。サイズが大きいため、DUT がタブレットの場合はリビジョン 2 が適しています。

    モジュラー ベース装置では、 CameraITS/tests ディレクトリにあるタブレット シーンテストで WFoV カメラをテストします。WFoV の定義は、画角 >= 90° です。モジュラー ベース装置では、Android 9 以降が搭載されたデバイスの RFoV と WFoV の両方のカメラをテストできます。また、最小焦点距離が長い望遠カメラをテストする場合に接続可能な望遠拡張装置にも対応しています。モジュラー ベース装置は、機能的には WFoV ITS-in-a-box と同じですが、サイズが小さくなります。

    Sensor Fusion Box では、カメラ / ジャイロスコープのタイミング オフセットとマルチカメラ システムのフレーム同期を scenes=sensor_fusion の設定でテストします。REALTIME 機能のフラグに対しては、カメラ / ジャイロスコープのタイミング オフセットが 1 ms 未満である必要があります。

    マルチカメラ デバイスは、静的 ITS テスト用の装置 1 台と、REALTIME 機能フラグがある場合はセンサー フュージョン装置でテストできます。

    設定例を下の表に示します。

    カメラの FoV REALTIME? 推奨装置 備考
    1 75° × Rev 1 または 2 Android 7.0 以降
    2 75° モジュラー ベース、または Rev 1 または 2、およびセンサー フュージョン Android 9 以降
    3 75° + 95° リビジョン 2 + センサー フュージョン Android 9 以降
    4 75° + 95° + 20° モジュラー ベース、望遠拡張、センサー フュージョン Android 9 以降
    5 75° + 95° タブレット × Rev 2 Android 9 以降

    Q2: 使用中のテスト装置を指定するにはどうすればよいですか?

    正しいテスト装置を指定するには、チャート距離パラメータが正しいことを確認してください。rev1 テスト装置(RFoV)のチャート距離は 31 cm、rev2 装置(WFoV)のチャート距離は 22 cm です。デフォルトでは、チャート距離は 31 cm に設定されています。

    Android 10 から Android 11

    Android 10 から Android 11 で正しいテスト装置を特定するには、コマンドラインに dist フラグを追加します。dist のデフォルト値は 31 です。chart_distance パラメータを変更するには、次のコマンドを実行します。
    python tools/run_all_tests.py ... chart=# dist=22
    

    Android 12 以降

    Android 12 以降で正しいテスト装置を特定するには、config.yml ファイルを編集して chart_distance パラメータを変更します。
    edit config.yml
    chart_distance: 31.0 → chart_distance: 22.0
    

    Q3: タブレットの輝度を制御するにはどうすればよいですか?

    デフォルトでは、タブレットの輝度は 96 に設定されています。

    Android 7.0~Android 9 を搭載するタブレットで輝度を変更するには、次のコマンドを実行します。

    edit tools/wake_up_screen.py
    DISPLAY_LEVEL=96 → DISPLAY_LEVEL=192
    

    Android 10~11 を搭載するタブレットで輝度を変更するには、コマンドラインで brightness フラグを追加します。

    python tools/run_all_tests.py device=# camera=# chart=# brightness=192
    

    Android 12 以降を搭載するタブレットで輝度を変更するには、次のコマンドを実行します。

    edit config.yml
    brightness: 96 → brightness: 192
    

    Q4: 単一のテストをデバッグするにはどうすればよいですか?

    デバッグのためにテストを個別に実行することもできますが、シーン全体が実行されない限り結果は CtsVerifier.apk に報告されません。

    Android 11 以前で個々のシーンを実行するには、次のようにします。

    1. scenes フラグを tools/run_all_tests.py に追加してシーンを読み込みます。
      python tools/run_all_tests.py device=# camera=# chart=# scenes=#
      
    2. シーンが読み込まれたというログが stdout に出力された後で、Ctrl+C を押してテストを停止します。

      正しいシーンがすでに画面に表示されている場合は、画面を復帰します。

      python tools/wake_up_screen.py screen=#
      
    3. 個々のテストを実行します。

      python tests/scene#/test_*.py device=# camera=#

      ローカル ディレクトリにグラフが生成され、stdoutstderr が画面に出力されます。

      デバッグの詳細を確認するには、print 文をスクリプトに追加します。デバッグのテスト出力を増やすには、debug=True フラグを追加します。

      python tests/scene#/test_*.py device=# camera=# debug=True

    結果はローカル画面に出力され、画像は、tools/run_all_tests.py の実行時に生成される /tmp/tmp### ディレクトリではなく、ローカル ディレクトリに保存されます。

    Android 12 以降で個々のシーンを実行するには、次のようにします。

    1. config.yml ファイルを編集します。

      edit config.yml
      camera: <camera-id> → camera:  0
      scene: <scene-name> → scene: scene1_1
    2. 個々のテストを実行します。

      python tools/run_all_tests.py -c config.yml --test_bed TEST_BED_TABLET_SCENES
      

    結果は /tmp/logs/mobly/TEST_BED_TABLET_SCENES/ ディレクトリ内に実行時間順に出力されます。

    Q5: テストを個別に再実行するのではなく、失敗したテストをシーン全体として実行する必要があるのはなぜですか?

    デバッグのためにテストを個別に実行することもできますが、結果はシーン全体が実行されない限り CtsVerifier.apk に報告されません。

    Camera ITS では、サードパーティ製アプリが互換性のあるカメラ インターフェースを持っていることを確認します。単体テストと同じように、各テストは 1 つのカメラの仕様にストレスを加えます。信頼できない動作を捉えるため、これらのテストはシーン全体でグループとして合格することが求められます。たとえば、1 つの不安定なテストがシーン全体の再実行で合格しても、複数の不安定なテストに合格するのは困難です。

    極端な例として、50% の確率で PASS が返されるシーンにテストが 10 個あるとします。各テストを個別に実行すると、高い確率でカメラ ITS に合格する結果が得られます。これに対して、テストを 1 つのシーンとしてまとめて実行した場合、シーンは 0.1% しか通過しません。

    Q6: シーンを 1 つだけ実行したり、実行シーンの順番を変えたりするにはどうすればよいですか?

    デフォルトでは、スクリプト tools/run_all_tests.py はすべてのシーンを順番に実行しますが、シーンを個別にまたは指定した順序で実行し、CtsVerifier.apk に報告することもできます。

    Android 11 以前で個々のシーン(シーン 2 など)を実行するか、複数のシーンを特定の順序で実行するには、次のようにします。

    python tools/run_all_tests.py device=# camera=# chart=# scenes=2
    
    python tools/run_all_tests.py device=# camera=# chart=# scenes=3,2
    

    Android 12 以降で個々のシーンを実行するか、複数のシーンを特定の順序で実行するには、次のようにします。

    python tools/run_all_tests.py scenes=2
    
    python tools/run_all_tests.py scenes=3,2
    

    追加のパラメータは config.yml ファイルで設定します。

    Q7: シーン 1 の多数のテストが、タブレットのセットアップで失敗しますが、紙のチャートでは合格します。どうすればよいですか?

    タブレットとテスト環境が次の仕様を満たしていることを確認してください。

    タブレットの仕様

    タブレットが次の仕様を満たしていることを確認します。

    • ディスプレイのサイズ(インチ): 10 インチ
    • ディスプレイのサイズ(ピクセル): 1,920 x 1,200 ピクセル以上

    詳細は、タブレットの要件をご確認ください。

    タブレットの輝度

    タブレットのディスプレイの輝度が低すぎると、正しいテスト結果が得られない場合があります。

    詳細は、タブレットの輝度を制御するにはどうすればよいですか?をご確認ください。

    ボックスの照度レベル(照度計が必要)

    タブレット開口部の目標ルクス値が 100~300 であることを確認します。

    ルクスレベルが高すぎる場合は、scene1/test_param_flash_mode.pyFAIL を返します。ルクスレベルが低すぎる場合、複数のテストが失敗します。

    Q8: センサー フュージョン テストをデバッグするにはどうすればよいですか?

    1. dialout グループに属していることを確認してください。

      groups | egrep ‘dialout'
    2. Microchip Technology が USB ポートに接続されているかどうかを確認して、センサー フュージョン コントローラが接続されていることを確認します。

      lsusb
      …
      Bus 003 Device 004: ID 04d8:fc73 Microchip Technology, Inc.
      …
      
    3. 次のコマンドでテストを複数回実行し、テスト試行の分布を取得します。

      Android 11 以前では次のようになります。

      python tools/run_sensor_fusion_box.py device=A camera=0 num_runs=10 rotator=default
      

      Android 12 以降では次のようになります。

      python tools/run_sensor_fusion_box.py num_runs=10
      

      追加のパラメータは config.yml ファイルで設定します。

      実行の出力は、sensor_fusion_# フォルダの下に作成された /tmp/tmp### フォルダにあります。# は実行番号です。一般的な失敗の原因は次のとおりです。

      1. スマートフォンが正しく中央に配置されていない。
      2. 画像に十分な特徴がない(多くは FoV または照明の問題です)。
      3. 返された FAIL は正しく、カメラとジャイロスコープ間のタイミング オフセットを修正する必要がある。

    Q9: テストのバグを報告する際に必要な情報は何ですか?

    テストのバグを報告する際は、テスト用に生成されたファイルと画像を添えてください。

    1. tools/run_all_tests.py を使用してテストを実行した場合は、圧縮した /tmp/ ディレクトリをバグに添付してください。
    2. テストを単独で実行した場合は、すべての画面出力と生成されたイメージをバグに添付してください。

    バグレポートも含めてください。問題のテストが失敗した後、次のコマンドを使用してバグレポートを生成し、生成された ZIP ファイルをバグに添付してください。

    adb -s device_id bugreport
    

    Q10: 25 cm のチャート距離で画像がぼやける最短焦点距離のカメラで sensor_fusion テストシーンを実行するにはどうすればよいですか?

    25 cm の距離で焦点を合わせられないカメラの場合は、Sensor Fusion Box のチャート取り付けパネルを取り外します。DUT がフォーカスできる距離にチャートを配置し、config.ymlchart_distance を DUT とチャート間の測定距離に変更します。図 5 は、こうした状況でチャートの距離を測定する方法の例を示しています。

    sensor_fusion TELE テストの例 6
    図 5. センサー フュージョン テストシーンのチャート距離の測定
      edit config.yml
    chart_distance: 25 → chart_distance: DISTANCE_BETWEEN_DUT_AND_CHART
    

    Q11: 31 cm のチャート距離で画像がぼやける最短焦点距離のカメラでタブレット テストシーンを実行するにはどうすればよいですか?

    31 cm(RFoV テスト装置の奥行き)で十分に鮮明な画像を生成できない場合は、装置の前から、チャートシーンがカメラの画角(FoV)の約 60%(画像がより鮮明になる範囲)に収まる距離にカメラを設置します。この距離は、カメラの最小焦点距離より短くなる可能性があります。config.ymlchart_distance は 31 cm のままにします。以下の表に示すように、タブレットでのチャートのスケーリングはカメラの画角によって決まります。

    カメラ画角 チャートのスケーリング ファクタ
    60 > 画角 > 40 0.67 倍
    40 > 画角 > 25 0.5 倍
    画角 < 25 0.33 倍

    Q12: Logical Multi-Camera API では、どのテストがどのカメラで実行されますか?

    カメラが REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA を使用する場合、サポートされる ITS テストはすべて、最上位の論理カメラで実行されます。ITS テストのサブセットは、物理サブカメラで実行されます。該当するテストは、tools/run_all_tests.pySUB_CAMERA_TESTS 定数にリストされます。