카메라 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분 동안 사용하지 않을 때
밝기 자동 조절 > 끄기

  1. 태블릿을 충전하고 전원을 켭니다. 계정을 설정하라는 메시지가 표시되면 건너뜁니다(카메라 ITS에는 태블릿과 페어링된 계정이 필요하지 않음).
  2. 태블릿을 Android 7.0 이상으로 업데이트합니다. Android 6.x 이하 버전은 카메라 ITS를 지원하지 않습니다.
  3. 개발자 모드를 사용 설정합니다.
  4. 설정으로 돌아가서 개발자 옵션을 선택합니다.
    옵션 사용 설정
    • 사용
    • 절전모드 해제
    • 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에서는 태블릿에 이미지가 표시되어야 하므로 Drive가 기기의 사진, 미디어 및 파일에 액세스하도록 허용하시겠습니까?라는 메시지가 태블릿에 표시됩니다. 허용을 눌러 이 메시지를 지우고 나중에 메시지가 표시되지 않도록 합니다.
    3. 명령어를 다시 실행합니다. 태블릿에 이 파일의 사본을 유지하시겠습니까?라는 메시지가 표시되며 Google Drive에 저장하도록 제안합니다. Drive 아이콘을 누른 후 드라이브에 업로드 취소를 눌러 이 메시지를 지우고 나중에 메시지가 표시되지 않도록 합니다.
    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

장면 재시도

단일 카메라의 장면을 다시 시도할 수 있습니다.

  • 단일 카메라의 장면을 다시 시도하려면 다음 명령을 실행합니다.
    python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=3,4
    

장면 5 실행

장면 5에는 특정 조명을 사용한 특수 설정이 필요합니다(자세한 내용은 호환성 테스트 도구 모음 다운로드에서 다운로드할 수 있는 CTS 인증 도구의 CameraITS.pdf 참고). 장면 5를 별개로(상자 밖에서) 실행할 수 있습니다.

카메라 장면 5
그림 2. 카메라 장면 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 결과를 보고서로 저장하려면 다음 단계를 따르세요.
    1. 패스를 누르고 보고서를 저장합니다.
      카메라 ITS 보고서
      그림 3. 카메라 ITS 보고서
    2. 다음과 같이 기기에서 보고서를 가져옵니다.
      adb -s FA6BM0305016 pull /sdcard/verifierReports
      
    3. 보고서 파일의 압축을 풀고 test_result.xml을 살펴봅니다.
      카메라 ITS 보고서
      그림 4. 카메라 ITS 보고서

태블릿 요구사항

태블릿은 디스플레이 크기가 약 10인치여야 하며 화면 해상도가 1920 x 1200픽셀보다 높아야 합니다. brightness 값은 태블릿 모델에 따라 config.yml에서 설정해야 합니다. 아래 표에는 태블릿과 호환되는 DUT의 Android 출시 버전과 함께 ITS 테스트에 권장되는 태블릿 목록이 나와 있습니다.

기기 디스플레이 크기
(인치)
디스플레이 크기
(픽셀)
태블릿 크기
(인치)
디스플레이
밝기
디스플레이
비트
지원되는
DUT OS
지원되는
태블릿 OS
삼성
Galaxy Tab A8
10.5 1920 x 1200 9.72 x 6.37 x 0.27 192 8 Android 13+ Android 11+
Xiaomi
Pad 5
11 2560 x 1600 10.03 x 6.55 x 0.27 1024 11 Android 12+ Android 11만
Lenovo
Tab M10 Plus
10.3 1920 x 1200 9.61 x 6.03 x 0.32 192 8 Android 12+ Android 9+
삼성
Galaxy Tab A7
10.4 2000 x 1200 9.75 x 6.2 x 0.28 192 8 Android 12+ Android 10+
Chuwi
Hi9 Air 10.1
10.1 2560 x 1600 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 2560 x 1600 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 2560 x 1600 10 x 6.57 x 0.24 192 8 Android 7+ Android 5+

자주 묻는 질문(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: 태블릿 밝기는 어떻게 조절하나요?

기본적으로 태블릿 밝기는 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. 다음과 같이 tools/run_all_tests.pyscenes 플래그를 추가하여 장면을 로드합니다.
    python tools/run_all_tests.py device=# camera=# chart=# scenes=#
    
  2. 장면이 stdout에 로드된 것으로 로깅된 후 Control+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에 보고되지 않습니다.

카메라 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 테스트가 태블릿 설정에서는 매우 여러 번 실패했지만 종이 차트에서는 통과합니다. 무엇이 문제인가요?

태블릿 및 테스트 환경이 다음 사양을 충족하는지 확인합니다.

태블릿 사양

태블릿이 다음 사양을 충족하는지 확인합니다.

  • 디스플레이 크기(인치): 10인치
  • 디스플레이 크기(픽셀): 1920x1200픽셀 초과

자세한 내용은 태블릿 요구사항을 참고하세요.

태블릿 밝기

태블릿 디스플레이 밝기가 너무 낮으면 테스트에서 정확한 결과를 얻지 못할 수 있습니다.

자세한 내용은 태블릿 밝기는 어떻게 조절하나요?를 참고하세요

상자 조명 수준(럭스 측정기 필요)

태블릿을 열 때 목표 럭스 값이 100에서 300 사이인지 확인합니다.

럭스 수준이 너무 높으면 scene1/test_param_flash_mode.py에서 FAIL을 반환합니다. 럭스 수준이 너무 낮으면 여러 테스트가 실패합니다.

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: 25cm 차트 거리에서 흐릿한 이미지를 만드는 최소 초점 거리가 있는 카메라로 sensor_fusion 테스트 장면을 실행하려면 어떻게 해야 하나요?

카메라가 25cm 거리에서 초점을 맞출 수 없는 경우 센서 퓨전 상자의 차트 장착 패널을 제거하세요. DUT가 초점을 맞출 수 있는 거리에 차트를 배치하고 config.ymlchart_distance를 DUT와 차트 사이의 측정된 거리로 변경합니다. 그림 5는 이 상황에서 차트 거리를 측정하는 방법의 예를 보여줍니다.

sensor_fusion TELE testing example6
그림 5. 센서 퓨전 테스트 장면의 차트 거리 측정
  edit config.yml
chart_distance: 25 → chart_distance: DISTANCE_BETWEEN_DUT_AND_CHART

Q11: 31cm 차트 거리에서 흐릿한 이미지를 만드는 최소 초점 거리가 포함된 카메라의 태블릿 테스트 장면을 실행하려면 어떻게 해야 하나요?

카메라가 31cm(RFoV 테스트 장비의 심도)에서 테스트 시 충분히 선명한 이미지를 생성할 수 없으면 차트 장면이 더 선명한 이미지로 카메라 시야(FoV)의 약 60%를 채울 수 있는 거리에서 장비 앞에 카메라를 장착합니다. 이 거리는 카메라의 최소 초점 거리 미만일 수 있습니다. config.ymlchart_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.pySUB_CAMERA_TESTS 상수 아래 나열되어 있습니다.