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 の使い方は次のとおりです。
タブレットの設定
このセクションでは、CameraITS
ディレクトリのカメラ ITS テストに使用するタブレットをセットアップする手順を説明します。以下の手順では、タブレットとして Pixel C を使用しています。タブレットの要件と推奨事項については、タブレットの要件をご覧ください。
注: カメラ ITS Python スクリプトは、タブレットで自動的に次のオプションを設定します。
[設定] > [ディスプレイ] > [スリープ] > [操作が行われない状態で 30 分経過後]
[明るさの自動調節] > [OFF]
- タブレットを充電し、電源を入れます。アカウントのセットアップを求めるメッセージが表示されたら、スキップします。カメラ ITS では、タブレットでのアカウント登録は必要ありません。
- タブレットを Android 7.0 以降に更新します。Android 6.x 以前のバージョンは、カメラ ITS に対応していません。
- デベロッパー モードを有効にします。
- [設定] に戻り、[開発者向けオプション] を選択します。
有効にするオプション - ON
- [スリープモードにしない]
- [USB デバッグ](ホストがタブレットをデバッグモードで実行できるようになります。タブレットを初めてホストに接続したとき、[USB デバッグを許可しますか?] というメッセージがタブレットに表示されます。タブレットにこのメッセージが表示されない場合は、タブレットを取り外してからもう一度接続してください)
無効にするオプション - [自動システム アップデート]
- [USB 経由のアプリを確認]
$ adb devices
を実行して使用可能なデバイスの一覧を表示し、DUT とチャートの ID を調べます。device_id
とchart_id
を調べるには、デバイスの接続と取り外しを行い、接続状態や切断状態になったデバイスを見つけます。- 3 つのテストを実行して、タブレット画面のチャートを隠してしまう可能性があるヒントやユーザーへのメッセージを抑止します。
- タブレットを表向きにしてテーブルに置きます。ボックスの背面パネルには付けないでください。
- 次のコマンドを実行します。
python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
シーン 2 と 3 ではタブレットに画像を表示する必要があるため、[デバイス内の写真、メディア、ファイルへのアクセスを「ドライブ」に許可しますか?] というメッセージがタブレットに表示されます。[許可] をタップして、このメッセージを消し、今後も表示されないようにします。 - もう一度このコマンドを実行します。[このファイルのコピーを保存しますか?] というメッセージがタブレットに表示され、Google ドライブが候補として表示されます。Google ドライブのアイコンをタップしてから、[キャンセル] をタップして Google ドライブへのアップロードを取り消して、このメッセージを消し、今後も表示されないようにします。
- 最後に、
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)のテスト用 Pixel NOF26W を 1 台(S/N: FA6BM0305016)。CTS 検証ツールアプリをインストールするには、
タブレット ベースのシーンの実行
背面カメラでシーン 0~4、6 と、scene_change を実行するには、次のコマンドを実行します。
cd android-cts-verifier/CameraITS
. build/envsetup.sh
python tools/run_all_tests.py camera=0
例:

シーンの再試行
1 台のカメラでシーンを再試行できます。
- 1 台のカメラでシーンを再試行するには、次のコマンドを実行します。
python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
シーン 5 の実行
シーン 5 には特定の照明を使用する特殊なセットアップが必要です。詳細については、CTS 検証ツールの CameraITS.pdf
をご覧ください。検証ツールは、互換性テストスイートのダウンロードからダウンロードできます。シーン 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 の結果をレポートとして保存する手順は以下のとおりです。
- [Pass] を押して、レポートを保存します。
図 3. カメラ ITS のレポート - デバイスからレポートをダウンロードします。
adb -s FA6BM0305016 pull /sdcard/verifierReports
- レポート ファイルを解凍して、
test_result.xml
を表示します。
図 4. カメラ ITS のレポート
- [Pass] を押して、レポートを保存します。
タブレットの要件
タブレットには、約 10 インチのディスプレイ サイズ、1,920 x 1,200 ピクセルよりも高い画面解像度が必要です。タブレットのモデルに基づいて、brightness
値を config.yml
に設定する必要があります。以下の表に、ITS テストで推奨されるタブレットと、タブレットで使用する DUT の Android リリース バージョンを示します。
デバイス | ディスプレイ サイズ (インチ) |
ディスプレイ サイズ (ピクセル) |
タブレットの寸法 (インチ) |
ディスプレイの 明るさ |
ディスプレイ ビット |
サポートされている DUT OS |
---|---|---|---|---|---|---|
Samsung Galaxy Tab A8 |
10.5 | 1,920 x 1,200 | 9.72 x 6.37 x 0.27 | 192 | 8 | Android 13 以上 |
Xiaomi Pad 5 |
11 | 2,560 x 1,600 | 10.03 x 6.55 x 0.27 | 1536 | 11 | Android 12 以上 |
Lenovo Tab M10 Plus |
10.3 | 1,920 x 1,200 | 9.61 x 6.03 x 0.32 | 192 | 8 | Android 12 以上 |
Samsung Galaxy Tab A7 |
10.4 | 2,000 x 1,200 | 9.75 x 6.2 x 0.28 | 192 | 8 | Android 12 以上 |
Chuwi Hi9 Air 10.1 |
10.1 | 2,560 x 1,600 | 9.52 x 6.77 x 0.31 | 192 | 8 | Android 7 以上 |
Asus ZenPad 3 |
9.7 | 2,048 x 1,536 | 9.47 x 6.44 x 0.28 | 192 | 8 | Android 7 以上 |
Huawei MediaPad m5 |
10.8 | 2,560 x 1,600 | 10.18 x 6.76 x 0.29 | 192 | 8 | Android 7 以上 |
Google Pixel C |
10.2 | 2,560 x 1,800 | 9.53 x 7.05 x 0.28 | 96 | 8 | Android 7 以上 |
Sony Xperia Z4 |
10.1 | 2,560 x 1,600 | 10 x 6.57 x 0.24 | 192 | 8 | Android 7 以上 |
よくある質問(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 カメラの両方をテストできます。
Sensor Fusion Box では、カメラ / ジャイロスコープのタイミング オフセットとマルチカメラ システムのフレーム同期を 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: 使用中のテスト装置を指定するにはどうすればよいですか?
正しいテスト装置を指定するには、チャート距離パラメータが正しいことを確認してください。 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 以前で個々のシーンを実行するには、次のようにします。
scenes
フラグをtools/run_all_tests.py
に追加してシーンを読み込みます。python tools/run_all_tests.py device=# camera=# chart=# scenes=#
-
シーンが読み込まれたというログが
stdout
に出力された後で、Ctrl+C を押してテストを停止します。正しいシーンがすでに画面に表示されている場合は、画面を復帰します。
python tools/wake_up_screen.py screen=#
-
個々のテストを実行します。
python tests/scene#/test_*.py device=# camera=#
ローカル ディレクトリにグラフが生成され、
stdout
とstderr
が画面に出力されます。デバッグの詳細を確認するには、
print
文をスクリプトに追加します。デバッグのテスト出力を増やすには、debug=True
フラグを追加します。python tests/scene#/test_*.py device=# camera=# debug=True
結果はローカル画面に出力され、画像は、tools/run_all_tests.py
の実行時に生成される /tmp/tmp###
ディレクトリではなく、ローカル ディレクトリに保存されます。
Android 12 で個々のシーンを実行するには、次のようにします。
-
config.yml
ファイルを編集します。edit config.yml camera: <camera-id> → camera: 0 scene: <scene-name> → scene: scene1_1
-
個々のテストを実行します。
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.py
が FAIL
を返します。ルクスレベルが低すぎる場合、複数のテストが失敗します。
Q8: センサー フュージョン テストをデバッグするにはどうすればよいですか?
dialout
グループに属していることを確認してください。groups | egrep ‘dialout'
Microchip Technology が USB ポートに接続されているかどうかを確認して、センサー フュージョン コントローラが接続されていることを確認します。
lsusb … Bus 003 Device 004: ID 04d8:fc73 Microchip Technology, Inc. …
次のコマンドでテストを複数回実行し、テスト試行の分布を取得します。
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###
フォルダにあります。#
は実行番号です。一般的な失敗の原因は次のとおりです。- スマートフォンが正しく中央に配置されていない。
- 画像に十分な特徴がない(多くは FoV または照明の問題です)。
- 返された
FAIL
は正しく、カメラとジャイロスコープ間のタイミング オフセットを修正する必要がある。
Q9: テストのバグを報告する際に必要な情報は何ですか?
テストのバグを報告する際は、テスト用に生成されたファイルと画像を添えてください。
tools/run_all_tests.py
を使用してテストを実行した場合は、圧縮した/tmp/
ディレクトリをバグに添付してください。- テストを単独で実行した場合は、すべての画面出力と生成されたイメージをバグに添付してください。
バグレポートも含めてください。問題のテストが失敗した後、次のコマンドを使用してバグレポートを生成し、生成された zip ファイルをバグに添付してください。
adb -s device_id bugreport
Q11: (25 cm のチャート距離で画像がぼやける)最短レンズ焦点距離のカメラで sensor_fusion シーンテストを実行するにはどうすればよいですか?
DUT が 25 cm の距離でフォーカスできない場合は、Sensor Fusion Box のチャート取り付けパネルを取り外します。DUT がフォーカスできる距離にチャートを配置し、config.yml
の chart_distance
を DUT とチャート間の測定距離に変更します。図 5 は、こうした状況でチャートの距離を測定する方法の例を示しています。

edit config.yml chart_distance: 25 → chart_distance: DISTANCE_BETWEEN_DUT_AND_CHART