여러 카메라 ITS 변경사항이 Android 12 릴리스에 포함되었습니다. 이 페이지에는 크게 네 가지 범주로 분류되는 변경 사항이 요약되어 있습니다.
Python 3으로 리팩터링
2020년 1월 Python 2.7 지원 중단으로 인해 전체 Camera ITS 코드베이스가 Python 3으로 리팩터링되었습니다. Android 12에는 다음 Python 버전 및 라이브러리가 필요합니다.
- 파이썬 3.7.9 또는 파이썬 3.7.10
- OpenCV 3.4.2
- 넘파이 1.19.2
- 매트플롯립 3.3.2
- 사이피 1.5.2
- pySerial 3.5
- 베개 8.1.0
- 파이YAML 5.3.1
기본 테스트 실행 프로그램인 tools/run_all_tests.py
는 Android 11 이하 버전과 동일하게 유지되며 Python 3으로 리팩터링됩니다.
모든 개별 테스트는 리팩터링되며 tests/its_base_test.py
에 정의된 새로운 테스트 설정 클래스를 사용합니다. 대부분의 테스트 이름과 기능은 동일하게 유지됩니다. Android 12에서는 이제 모든 개별 테스트가 장면을 로드합니다. 각 테스트에 대한 장면 로드는 전체 테스트 시간을 늘리는 반면 개별 테스트의 디버깅을 가능하게 합니다.
개별 테스트 변경에 대한 자세한 내용은 테스트 변경을 참조하십시오.
다음 Python 모듈은 이름이 변경되어 리팩터링됩니다.
-
pymodules/its/caps.py
→utils/camera_properties_utils.py
-
pymodules/its/cv2image.py
→utils/opencv_processing_utils.py
-
pymodules/its/device.py
→utils/its_session_utils.py
-
pymodules/its/error.py
→utils/error_util.py
-
pymodules/its/image.py
→utils/image_processing_utils.py
-
pymodules/its/objects.py
→utils/capture_request_utils.py
-
pymodules/its/target.py
→utils/target_exposure_utils.py
-
tools/hw.py
→utils/sensor_fusion_utils.py
Mobly 테스트 프레임워크 채택
Mobly 는 사용자 지정 하드웨어 설정이 있는 여러 장치가 필요한 테스트 사례를 지원하는 Python 기반 테스트 프레임워크입니다. Camera ITS는 Mobly 테스트 인프라를 사용하여 테스트를 더 잘 제어하고 로깅할 수 있습니다.
Camera ITS는 Mobly 테스트 인프라를 사용하여 테스트를 더 잘 제어하고 로깅할 수 있습니다. Mobly는 사용자 지정 하드웨어 설정이 있는 여러 장치가 필요한 테스트 사례를 지원하는 Python 기반 테스트 프레임워크입니다. Mobly에 대한 자세한 내용은 google/mobly를 참조하세요.
config.yml 파일
Mobly 프레임워크를 사용하면 its_base_test
클래스에서 테스트 대상 장치(DUT) 및 차트 태블릿을 설정할 수 있습니다. config.yml
(YAML) 파일은 Mobly 테스트베드를 만드는 데 사용됩니다. 이 구성 파일 내에서 여러 테스트베드(예: 태블릿 및 센서 퓨전 테스트베드)를 구성할 수 있습니다. 각 테스트베드의 컨트롤러 섹션 내에서 device_ids
지정하여 테스트 러너에게 적절한 Android 기기를 식별할 수 있습니다. 장치 ID 외에도 태블릿 brightness
, chart_distance
, debug_mode
, camera_id
및 scene_id
와 같은 다른 매개 변수가 테스트 클래스에 전달됩니다. 일반적인 테스트 매개변수 값은 다음과 같습니다.
brightness: 192 (all tablets except Pixel C)
chart_distance: 31.0 (rev1/rev1a box for FoV < 90° cameras)
chart_distance: 22.0 (rev2 test rig for FoV > 90° cameras)
태블릿 기반 테스트
태블릿 기반 테스트의 경우 키워드 TABLET
테스트베드 이름에 있어야 합니다. 초기화 중에 Mobly 테스트 러너는 TestParams
초기화하고 이를 개별 테스트에 전달합니다.
다음은 태블릿 기반 실행을 위한 샘플 config.yml
파일입니다.
TestBeds:
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
chart_loc_arg: ""
camera: 0
scene: <scene-name> # if <scene-name> runs all scenes
테스트베드는 tools/run_all_tests.py
사용하여 호출할 수 있습니다. 명령줄 값이 없으면 테스트는 config.yml
파일 값으로 실행됩니다. 또한 Android 11 이하와 유사한 명령을 사용하여 명령줄에서 camera
및 scene
구성 파일 값을 재정의할 수 있습니다.
예를 들어:
python tools/run_all_tests.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=1 scenes=2,1,0
센서 융합 테스트
센서 퓨전 테스트 의 경우 테스트베드 이름에 키워드 SENSOR_FUSION
포함되어야 합니다. 올바른 테스트베드는 테스트된 장면에 따라 결정됩니다. Android 12는 센서 융합을 위해 Arduino 및 Canakit 컨트롤러를 모두 지원합니다.
다음은 센서 퓨전 실행을 위한 샘플 config.yml
파일입니다.
Testbeds
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino # cntl can be arduino or canakit
rotator_ch: 1
camera: 0
센서 퓨전 테스트 장비 로 센서 퓨전 테스트를 실행하려면 다음을 사용하십시오.
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
여러 테스트베드
구성 파일에 여러 테스트베드를 포함할 수 있습니다. 가장 일반적인 조합은 태블릿 테스트베드와 센서 퓨전 테스트베드를 모두 갖는 것입니다.
다음은 태블릿 및 센서 퓨전 테스트베드가 모두 포함된 샘플 config.yml
파일입니다.
Testbeds
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
chart_loc_arg: ""
camera: 0
scene: <scene-name> # if <scene-name> runs all scenes
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino # cntl can be arduino or canakit
rotator_ch: 1
camera: 0
수동 테스트
수동 테스트는 Android 12에서 계속 지원됩니다. 그러나 테스트베드는 테스트베드 이름에 MANUAL
키워드를 사용하여 테스트를 식별해야 합니다. 또한 테스트베드는 태블릿 ID를 포함할 수 없습니다.
다음은 수동 테스트를 위한 샘플 config.yml
파일입니다.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
chart_distance: 31.0
camera: 0
scene: scene1
태블릿 없이 장면 테스트
장면 0과 장면 5에 대한 테스트는 TEST_BED_TABLET_SCENES
또는 TEST_BED_MANUAL
로 수행할 수 있습니다. 그러나 TEST_BED_TABLET_SCENES
로 테스트를 수행하는 경우 테스트 클래스 설정에서 태블릿에 대한 일련 ID 값을 할당하므로 태블릿을 사용하지 않더라도 태블릿이 연결되어 있고 태블릿 일련 ID가 유효해야 합니다.
개별 테스트 실행
개별 테스트는 결과가 CTS 인증 도구 에 보고되지 않기 때문에 디버그 목적으로만 실행할 수 있습니다. config.yml
파일은 camera
및 scene
에 대한 명령줄에서 덮어쓸 수 없기 때문에 이러한 매개변수는 해당 개별 테스트에 대한 config.yml
파일에서 정확해야 합니다. 또한 구성 파일에 테스트베드가 두 개 이상 있는 경우 --test_bed
플래그로 테스트베드를 지정해야 합니다. 예를 들어:
python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES
테스트 아티팩트
Android 12에서 카메라 ITS용 테스트 아티팩트는 Android 11 이하와 유사하게 저장되지만 다음과 같이 변경됩니다.
- 테스트 아티팩트
/tmp
디렉토리에는 명확성을 위해 8자 임의 문자열 앞에CameraITS_
추가되어 있습니다. - 테스트 출력 및 오류는
test_name_stdout.txt
및test_name_stderr.txt
대신 각 테스트의test_log.DEBUG
에 저장됩니다. - 각 개별 테스트의 DUT 및 태블릿 logcat은
/tmp/CameraITS_########
디렉토리에 저장되어 3A 문제를 디버깅하는 데 필요한 모든 정보가 기록되므로 디버깅을 단순화합니다.
테스트 변경
Android 12에서 태블릿 장면은 PDF 파일이 아닌 PNG 파일입니다. PNG 파일을 사용하면 더 많은 태블릿 모델에서 장면을 제대로 표시할 수 있습니다.
scene0/test_jitter.py
test_jitter
테스트는 Android 12의 물리적 숨겨진 카메라에서 실행됩니다.
scene1_1/test_black_white.py
Android 12의 경우 test_black_white
test_black_white
및 test_channel_saturation
기능이 모두 있습니다.
다음 표에서는 Android 11의 두 가지 개별 테스트를 설명합니다.
테스트 이름 | 첫 번째 API 수준 | 어설션 |
---|---|---|
scene1_1/test_black_white.py | 모두 | 짧은 노출, 낮은 게인 RGB 값 ~[0, 0, 0] 장시간 노출, 고이득 RGB 값 ~[255, 255, 255] |
scene1_1/test_channel_saturation.py | 29 | 흰색 이미지에서 색조를 제거하기 위해 [255, 255, 255] 차이에 대한 허용 오차를 줄였습니다. |
다음 표에서는 Android 12에서 병합된 테스트인 scene1_1/test_black_white.py를 설명합니다.
테스트 이름 | 첫 번째 API 수준 | 어설션 |
---|---|---|
scene1_1/test_black_white.py | 모두 | 짧은 노출, 낮은 게인 RGB 값 ~[0, 0, 0] 긴 노출, 높은 게인 RGB 값 ~[255, 255, 255] 및 값 사이의 허용 오차를 줄여 흰색 이미지에서 색조를 제거합니다. |
scene1_1/test_burst_sameness_manual.py
test_burst_sameness_manual
테스트는 Android 12의 물리적 숨겨진 카메라에서 실행됩니다.
scene1_2/test_tonemap_sequence.py
test_tonemap_sequence
테스트는 Android 12의 제한된 카메라에서 실행됩니다.
scene1_2/test_yuv_plus_raw.py
test_yuv_plus_raw
테스트는 Android 12의 물리적 숨겨진 카메라에서 실행됩니다.
scene2_a/test_format_combos.py
test_format_combos
테스트는 Android 12의 제한된 카메라에서 실행됩니다.
scene3/test_flip_mirror.py
test_flip_mirror
테스트는 Android 12의 제한된 카메라에서 실행됩니다.
scene4/test_aspect_ratio_and_crop.py
scene4/test_aspect_ratio_and_crop.py
에서 원 찾기는 Android 12에서 리팩터링되었습니다.
이전 Android 버전에서는 크기 및 색상에 대한 필터를 사용하여 부모 윤곽선(사각형) 내부에서 자식 윤곽선(원)을 찾는 방법을 사용했습니다. Android 12는 모든 윤곽선을 찾은 다음 가장 원형인 특징을 찾아 필터링하는 방법을 사용합니다. 디스플레이에서 가짜 원을 걸러내려면 최소한의 윤곽 영역이 필요하며 원의 윤곽은 검은색이어야 합니다.
윤곽선과 선택 기준은 다음 이미지에 나와 있습니다.
그림 1. 컨투어 및 선택 기준의 개념도
Android 12 방법은 더 간단하며 일부 디스플레이 태블릿에서 경계 상자 잘림 문제를 해결합니다. 모든 서클 후보는 디버깅 목적으로 기록됩니다.
Android 12에서는 FULL
및 LEVEL3
기기에 대해 자르기 테스트가 실행됩니다. Android 11 이하 버전은 FULL
기기에 대한 자르기 테스트 어설션을 건너뜁니다.
다음 표에는 지정된 장치 수준 및 첫 번째 API 수준에 해당하는 test_aspect_ratio_and_crop.py
에 대한 어설션이 나열되어 있습니다.
장치 수준 | 첫 번째 API 수준 | 어설션 |
---|---|---|
제한된 | 모두 | 종횡비 4:3, 16:9, 2:1 형식의 FoV |
가득한 | < 31 | 종횡비 4:3, 16:9, 2:1 형식의 FoV |
가득한 | ≥ 31 | 수확고 종횡비 4:3, 16:9, 2:1 형식의 FoV |
레벨3 | 모두 | 수확고 종횡비 4:3, 16:9, 2:1 형식의 FoV |
scene4/test_multi_camera_alignment.py
scene4/test_multi_camera_alignment.py
의 YUV 캡처에 대한 undo_zoom()
메서드는 캡처의 종횡비와 일치하지 않는 센서에서 자르기를 더 정확하게 설명하도록 리팩터링되었습니다.
Android 11 Python 2 코드
zoom_ratio = min(1.0 * yuv_w / cr_w, 1.0 * yuv_h / cr_h)
circle[i]['x'] = cr['left'] + circle[i]['x'] / zoom_ratio
circle[i]['y'] = cr['top'] + circle[i]['y'] / zoom_ratio
circle[i]['r'] = circle[i]['r'] / zoom_ratio
Android 12 Python 3 코드
yuv_aspect = yuv_w / yuv_h
relative_aspect = yuv_aspect / (cr_w/cr_h)
if relative_aspect > 1:
zoom_ratio = yuv_w / cr_w
yuv_x = 0
yuv_y = (cr_h - cr_w / yuv_aspect) / 2
else:
zoom_ratio = yuv_h / cr_h
yuv_x = (cr_w - cr_h * yuv_aspect) / 2
yuv_y = 0
circle['x'] = cr['left'] + yuv_x + circle['x'] / zoom_ratio
circle['y'] = cr['top'] + yuv_y + circle['y'] / zoom_ratio
circle['r'] = circle['r'] / zoom_ratio
sensor_fusion/test_sensor_fusion.py
Android 12에서는 센서 융합 테스트를 위해 이미지에서 특징을 감지하는 방법이 추가되었습니다.
Android 12보다 낮은 버전에서는 최소 기능 요구 사항이 30개 기능인 롤링 셔터 효과를 방지하기 위해 전체 이미지를 사용하여 최고의 240개 기능을 찾은 다음 중앙 20%로 마스킹합니다.
이 방법으로 찾은 특징이 부족한 경우 Android 12는 먼저 특징 감지 영역을 중앙 20%로 마스킹하고 최대 특징을 최소 특징 요구 사항의 2배로 제한합니다.
다음 이미지는 Android 11과 Android 12 기능 감지 간의 차이점을 보여줍니다. 최소 기능 요구 사항 임계값을 높이면 품질이 좋지 않은 기능이 감지되고 측정에 부정적인 영향을 미칩니다.
그림 2. Android 11과 Android 12의 기능 감지 차이
새로운 테스트
scene0/test_solid_color_test_pattern.py
새 테스트인 test_solid_color_test_pattern
Android 12에 대해 활성화됩니다. 이 테스트는 모든 카메라에 대해 활성화되며 다음 표에 설명되어 있습니다.
장면 | 테스트 이름 | 첫 번째 API 수준 | 설명 |
---|---|---|---|
0 | test_solid_color_test_pattern | 31 | 단색 이미지 출력 및 이미지 색상 프로그래밍 가능성을 확인합니다. |
카메라 프라이버시 모드를 지원하려면 단색 테스트 패턴을 활성화해야 합니다. test_solid_color_test_pattern
테스트는 선택한 패턴에 의해 정의된 색상으로 단색 YUV 이미지 출력을 확인하고 사양에 따라 이미지 색상이 변경됩니다.
매개변수
-
cameraPrivacyModeSupport
: 카메라가 프라이버시 모드를 지원하는지 여부를 결정합니다. -
android.sensor.testPatternMode
: 테스트 패턴 모드를 설정합니다. 이 테스트는SOLID_COLOR
사용합니다. -
android.sensor.testPatternData
: 테스트 패턴 모드에 대한 R, Gr, Gb, G 테스트 패턴 값을 설정합니다.
단색 테스트 패턴에 대한 설명은 SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
참조하십시오.
방법
설정된 매개변수에 대해 YUV 프레임이 캡처되고 이미지 내용이 검증됩니다. 테스트 패턴은 이미지 센서에서 직접 출력되므로 특별한 장면이 필요하지 않습니다. PER_FRAME_CONTROL
지원되는 경우 테스트된 각 설정에 대해 단일 YUV 프레임이 캡처됩니다. PER_FRAME_CONTROL
지원되지 않는 경우 LIMITED
카메라에서 테스트 적용 범위를 최대화하기 위해 마지막 프레임만 분석하여 4개의 프레임이 캡처됩니다.
YUV 캡처는 완전히 포화된 BLACK
, WHITE
, RED
, GREEN
및 BLUE
테스트 패턴으로 설정됩니다. 테스트 패턴 정의는 센서 베이어 패턴별로 이루어지므로 다음 표와 같이 색상별로 색상 채널을 설정해야 합니다.
색상 | 테스트 패턴 데이터(RGGB) |
---|---|
검은색 | (0, 0, 0, 0) |
하얀색 | (1, 1, 1, 1) |
빨간색 | (1, 0, 0, 0) |
녹색 | (0, 1, 1, 0) |
파란색 | (0, 0, 0, 1) |
어설션 테이블
다음 표는 test_solid_color_test_pattern.py
에 대한 테스트 어설션을 설명합니다.
카메라 첫 번째 API 수준 | 카메라 유형 | 색상 주장 |
---|---|---|
31 | 바이어 | 블랙, 화이트, 레드, 그린, 블루 |
31 | 단핵증 | 검정, 흰색 |
< 31 | 바이엘/모노 | 검은색 |
성능 등급 테스트
scene2_c/test_camera_launch_perf_class.py
scene2_c 얼굴 장면이 있는 전면 및 후면 기본 카메라 모두에 대해 카메라 시작이 500ms 미만인지 확인합니다.
scene2_c/test_jpeg_capture_perf_class.py
scene2_c 얼굴 장면이 있는 전면 및 후면 기본 카메라 모두에 대해 1080p JPEG 캡처 대기 시간이 1초 미만인지 확인합니다.