カメラ 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)で構成されています。WFoV(FoV > 90 度)カメラと RFoV(FoV < 90 度)カメラの両方をテストできる広視野角(WFoV)ITS-in-a-box、または標準視野角(RFoV)ITS-in-a-box を使用できます。

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

  1. WFoV または RFoV 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 android-cts-verifier/CtsVerifier.apk
          

シーン 0~4 の実行

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

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

例:

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

シーンの再試行

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

  • 1 台のカメラでシーンを再試行するには、次のコマンドを実行します。
        python tools/run_all_tests.py device=FA6BM0305016 chart=5811000011 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 インチ、解像度が 2,000 x 1,500 ピクセルより高解像度のものが必要です。タブレットのモデルに基づいて、DISPLAY_LEVEL 値を CameraITS/tools/wake_up_screen.py に設定する必要があります。ITS テストで推奨されるタブレットは次の表のとおりです。

デバイス ディスプレイ サイズ
(インチ)
ディスプレイ サイズ
(ピクセル)
タブレットの寸法
(インチ)
DISPLAY_LEVEL OS
Asus ZenPad 3 9.7 2,048 x 1,536 9.47 x 6.44 x 0.28 192 Android 6.0
Huawei MediaPad m5 10.8 2,560 x 1,600 10.18 x 6.76 x 0.29 192 Android 8.0
Pixel C 10.2 2,560 x 1,800 9.53 x 7.05 x 0.28 96 Android 8.0
Samsung S3 9.7 2,048 x 1,536 10.76 x 6.65 x 0.24 192 Android 7.0
Sony Xperia Z4 10.1 2,560 x 1,600 10 x 6.57 x 0.24 192 Android 7.0

よくある質問(FAQ)

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

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

WFoV ITS-in-a-box リビジョン 2 では、 CameraITS/tests ディレクトリにあるシーン 0 からシーン 4 で WFoV カメラをテストします。WFoV の定義は、FoV >= 90°です。機能はリビジョン 1 と同じですが、より大きくなります。リビジョン 2 のテスト機器は、Android 9 以降の RFoV カメラと WFoV カメラの両方をテストできます。

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

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

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

カメラの FoV REALTIME? 推奨機器
1 75° × リビジョン 1 Android 7.0 以降
2 75° リビジョン 1 + センサー フュージョン Android 9 以降
3 75° + 95° リビジョン 2 + センサー フュージョン Android 9 以降

Q2: 単一のテストをデバッグする方法を教えてください。

デバッグのためにテストを個別に実行することもできますが、シーン全体が実行されない限り結果は CtsVerifier.apk に報告されません。結果はローカル画面に出力され、画像は、tools/run_all_tests.py の実行時に生成される /tmp/tmp### ディレクトリではなく、ローカル ディレクトリに保存されます。

シーンを個別に実行する手順は、次のとおりです。

  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

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

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

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

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

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

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

個々のシーンを実行するには、次のようにします(シーン 2 の例)。

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

指定した順序で複数のシーンを表示するには、次のようにします。

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

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

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

タブレットの仕様

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

  • ディスプレイのサイズ(インチ): 10 インチ
  • ディスプレイのサイズ(ピクセル): 2,000 × 1,400 ピクセル以上

詳細については、タブレットの要件をご覧ください。

タブレットの輝度

タブレットのディスプレイの輝度が低すぎると、正しいテスト結果が得られない場合があります。Android 7.0 以降を搭載するタブレットで輝度を上げるには、次のようにします。

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

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

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

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

Q6: WFoV ITS-in-a-box リビジョン 2 で、シーンの FoV 外に対象物があるのはなぜですか?

チャートのサイズが適切でない可能性があります。チャートの拡大縮小は、Android 9 以降で機能します。チャート距離入力がテスト機器のバージョンに合っていることを確認してください。

WFoV ITS-in-a-box リビジョン 2

    python tools/run_all_tests.py ... chart=# dist=22
    

RFoV ITS-in-a-box リビジョン 1(dist=30 がデフォルト)

    python tools/run_all_tests.py ... chart=#
    

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

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

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

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

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

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

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

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

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

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

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

    adb -s device_id bugreport