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분 동안 사용하지 않을 때
밝기 자동 조절 > 끄기
- 태블릿을 충전하고 전원을 켭니다. 계정을 설정하라는 메시지가 표시되면 건너뜁니다(카메라 ITS에는 태블릿과 페어링된 계정이 필요하지 않음).
- 태블릿을 Android 7.0 이상으로 업데이트합니다. Android 6.x 이하 버전은 카메라 ITS를 지원하지 않습니다.
- 개발자 모드를 사용 설정합니다.
- 설정으로 돌아가서 개발자 옵션을 선택합니다.
옵션 사용 설정 - 사용
- 절전모드 해제
- 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에서는 태블릿에 이미지가 표시되어야 하므로 Drive가 기기의 사진, 미디어, 파일에 액세스하도록 허용하시겠습니까?라는 메시지가 태블릿에 표시됩니다. 허용을 눌러 이 메시지를 지우고 나중에 메시지가 표시되지 않도록 합니다. - 명령어를 다시 실행합니다. 태블릿에 이 파일의 사본을 유지하시겠습니까?라는 메시지가 표시되며 Google Drive에 저장하도록 제안합니다. Drive 아이콘을 누른 후 드라이브에 업로드 취소를 눌러 이 메시지를 지우고 나중에 메시지가 표시되지 않도록 합니다.
- 마지막으로
tools/run_all_tests.py
를 실행하고 스크립트가 다른 장면을 순환할 때 장면이 자동으로 변경되는지 확인합니다. 대부분의 테스트는 실패하지만(카메라가 차트를 가리키지 않기 때문에) 태블릿이 화면에 메시지 또는 다른 팝업을 표시하지 않고 장면을 올바르게 순환하는지 확인할 수 있습니다.
테스트 실행
ITS-in-a-box를 실행하기 전에 테스트 설정에 다음 하드웨어 및 소프트웨어가 포함되어 있는지 확인합니다.
- ITS-in-a-box 1개
- 장면을 표시하기 위한 태블릿 허용 목록의 태블릿 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
예:
장면 재시도
단일 카메라의 장면을 다시 시도할 수 있습니다.
- 단일 카메라의 장면을 다시 시도하려면 다음을 실행합니다.
python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
장면 5 실행
장면 5에는 특정 조명을 사용한 특수 설정이 필요합니다(자세한 내용은 호환성 테스트 도구 모음 다운로드에서 다운로드할 수 있는 CTS 인증 도구의 CameraITS.pdf
참고).
장면 5를 별개로(상자 밖에서) 실행할 수 있습니다.
단일 기기에서 전면 및 후면 카메라의 장면 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 결과를 보고서로 저장하려면 다음 단계를 따르세요.
- 패스를 누르고 보고서를 저장합니다.
그림 3. 카메라 ITS 보고서 - 다음과 같이 기기에서 보고서를 가져옵니다.
adb -s FA6BM0305016 pull /sdcard/verifierReports
- 보고서 파일의 압축을 풀고
test_result.xml
을 살펴봅니다.
그림 4. 카메라 ITS 보고서
- 패스를 누르고 보고서를 저장합니다.
태블릿 허용 목록
목록의 태블릿은 다음 기준에 근거하여 선택됩니다.
- 디스플레이 크기가 약 10인치이며 화면 해상도가 1920 x 1200픽셀보다 높습니다.
- 펄스 폭 변조(PWM) 제어 화면 어둡게 하기로 인해 발생한 깜박거림이 측정되지 않아야 합니다.
- ITS 테스트에서 전송된 adb 명령어를 실행할 수 있고 안내된 화면 밝기로 차트 이미지를 표시할 수 있습니다.
brightness
값은 태블릿 모델에 따라 config.yml
에서 설정해야 합니다.
아래 표에는 태블릿과 호환되는 DUT의 Android 출시 버전과 함께 ITS 테스트에 허용되는 태블릿 목록이 나와 있습니다.
기기 | 디스플레이 크기 (인치) |
디스플레이 크기 (픽셀) |
태블릿 크기 (인치) |
디스플레이 밝기 |
기기 이름 (ro.product .device) |
지원되는 DUT OS |
지원되는 태블릿 OS |
---|---|---|---|---|---|---|---|
Google Pixel C |
10.2 | 2,560 x 1,800 | 9.53 x 7.05 x 0.28 | 96 | dragon | Android 7+ | Android 6+ |
Honor Pad 8 |
11 | 2000 x 1200 | 10.18 x 6.76 x 0.29 | 192 | HNHEY-Q | Android 14+ | Android 12 |
Huawei MediaPad m5 |
10.8 | 2560 x 1600 | 10.96 x 6.85 x 0.27 | 192 | HWCMR09 | Android 7+ | Android 8+ |
Lenovo Tab M10 Plus Gen1 |
10.3 | 1920 x 1200 | 9.61 x 6.03 x 0.32 | 192 | X606F | Android 12+ | Android 9+ |
삼성 Galaxy Tab A7 |
10.4 | 2000 x 1200 | 9.75 x 6.2 x 0.28 | 192 | gta4lwifi | Android 12+ | Android 10+ |
삼성 Galaxy Tab A8 |
10.5 | 1920 x 1200 | 9.72 x 6.37 x 0.27 | 192 | gta8wifi | Android 13+ | Android 11+ |
삼성 Galaxy Tab A9+ |
11 | 1920 x 1200 | 10.12 x 6.64 x 0.27 | 192 | gta9pwifi | Android 14+ | Android 13+ |
Vivo Pad2 |
12.1 | 2800 x 1968 | 10.47 x 7.54 x 0.26 | 192 | DPD2221 | Android 14+ | Android 13+ |
Xiaomi Pad 5 |
11 | 2560 x 1600 | 10.03 x 6.55 x 0.27 | 192 | nabu | Android 12+ | Android 13+ |
Xiaomi Redmi Pad |
10.61 | 2000 x 1200 | 9.86 x 6.22 x 0.28 | 192 | yunluo | Android 14+ | Android 14+ |
Xiaomi Redmi Pad SE |
11 | 2000 x 1200 | 10.06 x 6.58 x 0.29 | 192 | xun | Android 14+ | Android 13+ |
자주 묻는 질문(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
기능 플래그에는 1ms 미만의 카메라/자이로스코프 타이밍 오프셋이 필요합니다.
카메라에 REALTIME
기능 플래그가 있다면 정적 ITS 테스트용 단일 장비 및 센서 퓨전 장비로 다중 카메라 기기를 테스트할 수 있습니다.
아래 표에 일련의 구성 예가 나와 있습니다.
예 | 카메라 FoV | REALTIME? | 권장 장비 | 메모 |
---|---|---|---|---|
1 | 75° | 아니요 | Rev 1 또는 2 | Android 7.0 이상 |
2 | 75° | 예 | Rev 1 또는 2 + 센서 퓨전 | Android 9 이상 |
3 | 75° + 95° | 예 | 버전 2 + 센서 퓨전 | Android 9 이상 |
Q2: 어떤 테스트 장비를 사용할지 어떻게 지정할 수 있나요?
올바른 테스트 장비를 지정하려면 차트 거리 매개변수가 올바른지 확인해야 합니다. rev1 테스트 장비(RFoV)의 차트 거리는 31cm이고 rev2 장비(WFoV)의 차트 거리는 22cm입니다. 기본적으로 차트 거리는 31cm로 설정됩니다.
Android 10~11
Android 10~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: 태블릿 밝기는 어떻게 조절하나요?
기본적으로 태블릿 밝기는 192로 설정되어 있습니다.
Android 7.0~Android 9를 실행하는 태블릿에서 밝기를 변경하려면 다음 명령을 실행하세요.
edit tools/wake_up_screen.py DISPLAY_LEVEL=192 → DISPLAY_LEVEL=96
Android 10~11을 실행하는 태블릿에서 밝기를 변경하려면 brightness
플래그를 추가하여 명령줄에서 값을 변경할 수 있습니다.
python tools/run_all_tests.py device=# camera=# chart=# brightness=96
Android 12를 실행하는 태블릿에서 밝기를 변경하려면 다음 명령어를 실행합니다.
edit config.yml brightness: 192 → brightness: 96
Q4: 단일 테스트를 디버깅하려면 어떻게 해야 하나요?
디버깅 목적으로 테스트를 개별적으로 실행할 수 있지만 장면 전체를 실행하지 않는 한 결과가 CtsVerifier.apk
에 보고되지 않습니다.
Android 11 이하에서 개별 장면을 실행하려면 다음 단계를 따르세요.
- 다음과 같이
tools/run_all_tests.py
에scenes
플래그를 추가하여 장면을 로드합니다.python tools/run_all_tests.py device=# camera=# chart=# scenes=#
-
장면이
stdout
에 로드된 것으로 로깅된 후 Control+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
에 보고되지 않습니다.
카메라 ITS는 서드 파티 앱이 호환 가능한 카메라 인터페이스를 갖도록 합니다. 단위 테스트와 마찬가지로 각 테스트는 카메라의 단일 사양에 중점을 둡니다. 신뢰할 수 없는 동작을 포착하기 위해 이러한 테스트는 장면 전체에서 그룹으로 통과해야 합니다. 예를 들어 신뢰할 수 없는 단일 테스트가 장면 전체의 재실행을 통과할 수는 있지만 신뢰할 수 없는 여러 테스트를 통과하기는 어렵습니다.
극단적인 예로, 장면에 10개의 테스트가 있는데 각 테스트가 50%의 확률로 PASS
를 반환할 수 있는 사례를 생각해 보세요. 각 테스트를 개별적으로 실행하면 운영자는 카메라가 카메라 ITS를 통과하도록 할 가능성이 높습니다. 그러나 테스트가 장면 전체로 실행된다면 장면 통과 가능성은 0.1%에 불과합니다.
Q6: 단일 장면을 실행하거나 실행 장면 순서를 변경하려면 어떻게 해야 하나요?
기본적으로 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 테스트가 태블릿 설정에서는 매우 여러 번 실패했지만 종이 차트에서는 통과합니다. 무엇이 문제인가요?
태블릿 및 테스트 환경이 다음 사양을 충족하는지 확인합니다.
태블릿 밝기
태블릿 디스플레이 밝기가 너무 낮으면 테스트에서 정확한 결과를 얻지 못할 수 있습니다.
자세한 내용은 태블릿 밝기는 어떻게 조절하나요?를 참고하세요
상자 조명 수준(럭스 측정기 필요)
태블릿을 열 때 목표 럭스 값이 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
Q10: 25cm 차트 거리에서 흐릿한 이미지를 만드는 최소 초점 거리가 있는 카메라로 sensor_fusion 테스트 장면을 실행하려면 어떻게 해야 하나요?
카메라가 25cm 거리에서 초점을 맞출 수 없는 경우 센서 퓨전 상자의 차트 장착 패널을 제거하세요. DUT가 초점을 맞출 수 있는 거리에 차트를 배치하고 config.yml
의 chart_distance
를 DUT와 차트 사이의 측정된 거리로 변경합니다. 그림 5는 이 상황에서 차트 거리를 측정하는 방법의 예를 보여줍니다.
edit config.yml chart_distance: 25 → chart_distance: DISTANCE_BETWEEN_DUT_AND_CHART
Q11: 31cm 차트 거리에서 흐릿한 이미지를 만드는 최소 초점 거리가 있는 카메라의 태블릿 테스트 장면을 실행하려면 어떻게 해야 하나요?
카메라가 31cm(RFoV 테스트 장비의 심도)에서 테스트 시 충분히 선명한 이미지를 생성할 수 없으면 차트 장면이 더 선명한 이미지로 카메라 시야(FoV)의 약 60%를 채울 수 있는 거리에서 장비 앞에 카메라를 장착합니다. 이 거리는 카메라의 최소 초점 거리 미만일 수 있습니다. config.yml
의 chart_distance
를 31cm로 둡니다. 태블릿의 차트 배율은 카메라 FoV에 따라 결정됩니다(다음 표 참고).
카메라 FoV | 차트 배율 |
---|---|
60 > FoV > 40 | 0.67배 |
40 > FoV > 25 | 0.5배 |
FoV < 25 | 0.33배 |
Q12: 논리 다중 카메라 API를 사용하면 어떤 카메라에서 어떤 테스트가 실행되나요?
카메라에서 REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
를 사용하면 지원되는 모든 ITS 테스트가 최상위 논리 카메라에서 실행됩니다. ITS 테스트의 하위 집합은 물리적 하위 카메라에서 실행되고 이러한 테스트는 tools/run_all_tests.py
의 SUB_CAMERA_TESTS
상수 아래 나열되어 있습니다.