Một số thay đổi về Camera ITS được đưa vào bản phát hành Android 12. Trang này tóm tắt những thay đổi thuộc bốn loại chính:
Tái cấu trúc thành Python 3
Do Python 2.7 không được dùng nữa vào tháng 1 năm 2020, toàn bộ cơ sở mã Camera ITS đã được tái cấu trúc thành Python 3. Android 12 bắt buộc phải có các phiên bản và thư viện Python sau:
- Python 3.7.9 hoặc Python 3.7.10
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- pySerial 3.5
- Gối 8.1.0
- PyYAML 5.3.1
Trình khởi chạy thử nghiệm chính, tools/run_all_tests.py
, vẫn giống như các phiên bản Android 11 trở xuống và được tái cấu trúc thành Python 3.
Tất cả các thử nghiệm riêng lẻ đều được cấu trúc lại và sử dụng lớp thiết lập thử nghiệm mới được xác định trong tests/its_base_test.py
. Hầu hết tên thử nghiệm và chức năng vẫn giữ nguyên. Trong Android 12, tất cả các thử nghiệm riêng lẻ hiện đều tải cảnh của chúng. Mặc dù việc tải cảnh cho mỗi bài kiểm tra làm tăng thời gian kiểm tra tổng thể nhưng nó cho phép gỡ lỗi các bài kiểm tra riêng lẻ.
Để biết thêm thông tin về các thay đổi của từng bài kiểm tra, hãy xem Các thay đổi trong bài kiểm tra .
Các mô-đun Python sau được tái cấu trúc với tên thay đổi:
-
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
Áp dụng khung kiểm tra Moly
Mobly là khung kiểm thử dựa trên Python hỗ trợ các trường hợp kiểm thử yêu cầu nhiều thiết bị có thiết lập phần cứng tùy chỉnh. Camera ITS sử dụng cơ sở hạ tầng kiểm tra Mobly để cho phép kiểm soát và ghi nhật ký kiểm tra tốt hơn.
Camera ITS sử dụng cơ sở hạ tầng kiểm tra Mobly để cho phép kiểm soát và ghi nhật ký kiểm tra tốt hơn. Mobly là khung kiểm thử dựa trên Python hỗ trợ các trường hợp kiểm thử yêu cầu nhiều thiết bị có thiết lập phần cứng tùy chỉnh. Để biết thêm thông tin về Mobly, hãy xem google/mobly .
tập tin config.yml
Với khung Mobly, bạn có thể thiết lập thiết bị đang được thử nghiệm (DUT) và máy tính bảng biểu đồ trong lớp its_base_test
. Tệp config.yml
(YAML) được sử dụng để tạo nền tảng thử nghiệm Mobly. Nhiều giường thử nghiệm có thể được định cấu hình trong tệp cấu hình này, ví dụ: máy tính bảng và giường thử nghiệm kết hợp cảm biến. Trong phần bộ điều khiển của mỗi giường thử nghiệm, bạn có thể chỉ định device_ids
để xác định các thiết bị Android phù hợp cho người chạy thử nghiệm. Ngoài ID thiết bị, các thông số khác như brightness
của máy tính bảng, chart_distance
, debug_mode
, camera_id
và scene_id
cũng được chuyển vào lớp kiểm tra. Các giá trị tham số thử nghiệm phổ biến là:
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)
Thử nghiệm dựa trên máy tính bảng
Đối với thử nghiệm dựa trên máy tính bảng, từ khóa TABLET
phải có trong tên thử nghiệm. Trong quá trình khởi tạo, trình chạy thử nghiệm Mobly khởi chạy TestParams
và chuyển chúng cho các thử nghiệm riêng lẻ.
Sau đây là tệp config.yml
mẫu để chạy trên máy tính bảng.
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
Nền thử nghiệm có thể được gọi bằng cách sử dụng tools/run_all_tests.py
. Nếu không có giá trị dòng lệnh nào, các thử nghiệm sẽ chạy với các giá trị tệp config.yml
. Ngoài ra, bạn có thể ghi đè các giá trị tệp cấu hình camera
và scene
tại dòng lệnh bằng các lệnh tương tự như Android 11 trở xuống.
Ví dụ:
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
Thử nghiệm phản ứng tổng hợp cảm biến
Đối với thử nghiệm tổng hợp cảm biến , tên giường thử nghiệm phải bao gồm từ khóa SENSOR_FUSION
. Nền thử nghiệm chính xác được xác định bởi các cảnh được thử nghiệm. Android 12 hỗ trợ cả bộ điều khiển Arduino và Canakit để tổng hợp cảm biến .
Sau đây là tệp config.yml
mẫu để chạy phản ứng tổng hợp cảm biến.
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
Để chạy thử nghiệm phản ứng tổng hợp cảm biến bằng giàn thử nghiệm phản ứng tổng hợp cảm biến , hãy sử dụng:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Nhiều thử nghiệm
Nhiều thử nghiệm có thể được bao gồm trong tệp cấu hình. Sự kết hợp phổ biến nhất là có cả giường thử nghiệm máy tính bảng và giường thử nghiệm tổng hợp cảm biến.
Sau đây là tệp config.yml
mẫu có thử nghiệm kết hợp cả máy tính bảng và cảm biến.
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
Kiểm tra bằng tay
Thử nghiệm thủ công tiếp tục được hỗ trợ trong Android 12. Tuy nhiên, nền thử nghiệm phải xác định thử nghiệm đó bằng từ khóa MANUAL
trong tên thử nghiệm. Ngoài ra, nền tảng thử nghiệm không thể bao gồm ID máy tính bảng.
Sau đây là tệp config.yml
mẫu để kiểm tra thủ công.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
chart_distance: 31.0
camera: 0
scene: scene1
Cảnh thử nghiệm không có máy tính bảng
Việc kiểm tra cảnh 0 và cảnh 5 có thể được thực hiện bằng TEST_BED_TABLET_SCENES
hoặc với TEST_BED_MANUAL
. Tuy nhiên, nếu việc kiểm tra được thực hiện với TEST_BED_TABLET_SCENES
thì máy tính bảng phải được kết nối và ID sê-ri của máy tính bảng phải hợp lệ ngay cả khi máy tính bảng không được sử dụng vì thiết lập lớp kiểm tra sẽ chỉ định giá trị ID sê-ri cho máy tính bảng.
Chạy thử nghiệm riêng lẻ
Các thử nghiệm riêng lẻ chỉ có thể được chạy cho mục đích gỡ lỗi vì kết quả của chúng không được báo cáo cho Trình xác minh CTS . Vì không thể ghi đè tệp config.yml
tại dòng lệnh cho camera
và scene
nên các tham số này phải chính xác trong tệp config.yml
cho từng bài kiểm tra được đề cập. Ngoài ra, nếu có nhiều hơn một giường thử nghiệm trong tệp cấu hình, bạn phải chỉ định giường thử nghiệm bằng cờ --test_bed
. Ví dụ:
python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES
Thử nghiệm hiện vật
Trong Android 12, các cấu phần phần mềm thử nghiệm cho Camera ITS được lưu trữ tương tự như Android 11 trở xuống nhưng có những thay đổi sau:
- Thư mục tạo phẩm thử nghiệm
/tmp
cóCameraITS_
được thêm vào trước chuỗi ngẫu nhiên 8 ký tự để đảm bảo rõ ràng. - Kết quả kiểm tra và lỗi được lưu trữ trong
test_log.DEBUG
cho mỗi bài kiểm tra thay vìtest_name_stdout.txt
vàtest_name_stderr.txt
. - Nhật ký DUT và máy tính bảng từ mỗi thử nghiệm riêng lẻ được lưu trữ trong thư mục
/tmp/CameraITS_########
đơn giản hóa việc gỡ lỗi vì tất cả thông tin cần thiết để gỡ lỗi các sự cố 3A đều được ghi lại.
Kiểm tra các thay đổi
Trong Android 12, cảnh trên máy tính bảng là tệp PNG chứ không phải tệp PDF. Việc sử dụng tệp PNG cho phép nhiều kiểu máy tính bảng hơn hiển thị cảnh chính xác.
cảnh0/test_jitter.py
Bài kiểm tra test_jitter
chạy trên camera ẩn vật lý trong Android 12.
scene1_1/test_black_white.py
Đối với Android 12, test_black_white
có chức năng của cả test_black_white
và test_channel_saturation
.
Bảng sau đây mô tả hai thử nghiệm riêng lẻ trong Android 11.
Tên kiểm tra | Cấp độ API đầu tiên | Khẳng định |
---|---|---|
scene1_1/test_black_white.py | TẤT CẢ | Giá trị RGB phơi sáng ngắn, mức tăng thấp ~[0, 0, 0] Giá trị RGB tăng cao, phơi sáng lâu ~[255, 255, 255] |
scene1_1/test_channel_saturation.py | 29 | Giảm dung sai đối với các chênh lệch [255, 255, 255] để loại bỏ sắc thái màu trong hình ảnh màu trắng. |
Bảng sau đây mô tả thử nghiệm hợp nhất, scene1_1/test_black_white.py, trong Android 12.
Tên kiểm tra | Cấp độ API đầu tiên | Khẳng định |
---|---|---|
scene1_1/test_black_white.py | TẤT CẢ | Giá trị RGB phơi sáng ngắn, mức tăng thấp ~[0, 0, 0] Độ phơi sáng lâu, giá trị RGB tăng cao ~[255, 255, 255] và giảm dung sai giữa các giá trị để loại bỏ sắc thái màu trong ảnh trắng. |
scene1_1/test_burst_sameness_manual.py
Thử nghiệm test_burst_sameness_manual
chạy trên camera ẩn vật lý trong Android 12.
scene1_2/test_tonemap_sequence.py
Thử nghiệm test_tonemap_sequence
chạy trên LIMITED camera trong Android 12.
scene1_2/test_yuv_plus_raw.py
Thử nghiệm test_yuv_plus_raw
chạy trên camera ẩn vật lý trong Android 12.
scene2_a/test_format_combos.py
Thử nghiệm test_format_combos
chạy trên LIMITED camera trong Android 12.
cảnh3/test_flip_mirror.py
Thử nghiệm test_flip_mirror
chạy trên LIMITED camera trong Android 12.
cảnh4/test_aspect_ratio_and_crop.py
Tính năng tìm vòng kết nối trong scene4/test_aspect_ratio_and_crop.py
đã được tái cấu trúc trong Android 12.
Các phiên bản Android trước đây đã sử dụng phương pháp liên quan đến việc tìm đường viền con (hình tròn) bên trong đường viền gốc (hình vuông) bằng các bộ lọc về kích thước và màu sắc. Android 12 sử dụng một phương pháp liên quan đến việc tìm tất cả các đường nét rồi lọc bằng cách tìm các tính năng có đường nét tròn nhất . Để sàng lọc các vòng tròn giả trên màn hình, cần có diện tích đường viền tối thiểu và đường viền của vòng tròn phải có màu đen.
Các đường viền và tiêu chí lựa chọn của chúng được hiển thị trong hình ảnh sau đây.
Hình 1. Bản vẽ ý tưởng đường viền và tiêu chí lựa chọn
Phương pháp Android 12 đơn giản hơn và có tác dụng giải quyết vấn đề cắt hộp giới hạn ở một số máy tính bảng hiển thị. Tất cả các ứng viên vòng kết nối đều được ghi lại cho mục đích gỡ lỗi.
Trong Android 12, thử nghiệm crop được chạy cho các thiết bị FULL
và LEVEL3
. Phiên bản Android 11 trở xuống bỏ qua xác nhận thử nghiệm cắt xén cho thiết bị FULL
.
Bảng sau liệt kê các xác nhận cho test_aspect_ratio_and_crop.py
tương ứng với cấp thiết bị nhất định và cấp API đầu tiên.
Cấp thiết bị | Cấp độ API đầu tiên | Khẳng định |
---|---|---|
GIỚI HẠN | TẤT CẢ | tỷ lệ khung hình FoV cho các định dạng 4:3, 16:9, 2:1 |
ĐẦY | < 31 | tỷ lệ khung hình FoV cho các định dạng 4:3, 16:9, 2:1 |
ĐẦY | ≥ 31 | Mùa vụ tỷ lệ khung hình FoV cho các định dạng 4:3, 16:9, 2:1 |
CẤP 3 | TẤT CẢ | Mùa vụ tỷ lệ khung hình FoV cho các định dạng 4:3, 16:9, 2:1 |
cảnh4/test_multi_máy ảnh_alignment.py
Phương thức undo_zoom()
dành cho ảnh chụp YUV trong scene4/test_multi_camera_alignment.py
đã được tái cấu trúc để xử lý chính xác hơn việc cắt xén trên các cảm biến không khớp với tỷ lệ khung hình của ảnh chụp.
Mã 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
Mã 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
cảm biến_fusion/test_sensor_fusion.py
Trong Android 12, một phương pháp phát hiện các đặc điểm trong hình ảnh đã được thêm vào để thử nghiệm phản ứng tổng hợp cảm biến.
Ở các phiên bản thấp hơn Android 12, toàn bộ hình ảnh được sử dụng để tìm ra 240 tính năng tốt nhất, sau đó được che ở trung tâm 20% để tránh hiệu ứng màn trập lăn với yêu cầu tính năng tối thiểu là 30 tính năng.
Nếu các tính năng được tìm thấy bằng phương pháp này không đủ, trước tiên, Android 12 sẽ che khu vực phát hiện tính năng ở trung tâm 20% và giới hạn các tính năng tối đa ở mức hai lần so với yêu cầu tính năng tối thiểu.
Hình ảnh sau đây cho thấy sự khác biệt giữa tính năng phát hiện tính năng của Android 11 và Android 12. Việc nâng ngưỡng yêu cầu tính năng tối thiểu dẫn đến việc phát hiện các tính năng kém chất lượng và ảnh hưởng tiêu cực đến phép đo.
Hình 2. Sự khác biệt trong khả năng phát hiện tính năng giữa Android 11 và Android 12
Thử nghiệm mới
scene0/test_solid_color_test_pattern.py
Một thử nghiệm mới, test_solid_color_test_pattern
, được bật cho Android 12. Thử nghiệm này được bật cho tất cả các máy ảnh và được mô tả trong bảng sau.
Bối cảnh | Tên kiểm tra | Cấp độ API đầu tiên | Sự miêu tả |
---|---|---|---|
0 | test_solid_color_test_pattern | 31 | Xác nhận đầu ra hình ảnh màu đồng nhất và khả năng lập trình màu hình ảnh. |
Mẫu thử nghiệm màu đồng nhất phải được bật để hỗ trợ chế độ riêng tư của máy ảnh. Thử nghiệm test_solid_color_test_pattern
xác nhận đầu ra hình ảnh YUV màu đồng nhất với màu được xác định bởi mẫu đã chọn và màu hình ảnh thay đổi theo thông số kỹ thuật.
Thông số
-
cameraPrivacyModeSupport
: Xác định xem máy ảnh có hỗ trợ chế độ riêng tư hay không. -
android.sensor.testPatternMode
: Đặt chế độ mẫu thử nghiệm. Thử nghiệm này sử dụngSOLID_COLOR
. -
android.sensor.testPatternData
: Đặt các giá trị mẫu thử nghiệm R, Gr, Gb, G cho chế độ mẫu thử nghiệm.
Để biết mô tả về mẫu thử nghiệm đồng màu, hãy xem SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
.
Phương pháp
Các khung YUV được ghi lại cho các tham số đã đặt và nội dung hình ảnh được xác thực. Mẫu thử nghiệm được xuất trực tiếp từ cảm biến hình ảnh nên không yêu cầu cảnh cụ thể. Nếu PER_FRAME_CONTROL
được hỗ trợ thì một khung YUV duy nhất sẽ được ghi lại cho từng cài đặt được thử nghiệm. Nếu PER_FRAME_CONTROL
không được hỗ trợ thì bốn khung hình sẽ được chụp chỉ với khung hình cuối cùng được phân tích để tối đa hóa phạm vi kiểm tra trong LIMITED
camera.
Ảnh chụp YUV được đặt thành các mẫu thử nghiệm BLACK
, WHITE
, RED
, GREEN
và BLUE
hòa hoàn toàn. Vì định nghĩa mẫu thử nghiệm theo mẫu cảm biến Bayer nên các kênh màu phải được đặt cho từng màu như minh họa trong bảng sau.
Màu sắc | testPatternData (RGGB) |
---|---|
ĐEN | (0, 0, 0, 0) |
TRẮNG | (1, 1, 1, 1) |
MÀU ĐỎ | (1, 0, 0, 0) |
MÀU XANH LÁ | (0, 1, 1, 0) |
MÀU XANH DA TRỜI | (0, 0, 0, 1) |
Bảng khẳng định
Bảng sau đây mô tả các xác nhận kiểm tra cho test_solid_color_test_pattern.py
.
Máy ảnh Cấp độ API đầu tiên | Loại máy ảnh | Màu sắc được khẳng định |
---|---|---|
31 | Bayer | ĐEN, TRẮNG, ĐỎ, XANH, XANH |
31 | BỆNH TĂNG BẠCH CẦU ĐƠN NHÂN | ĐEN TRẮNG |
< 31 | Bayer/MONO | ĐEN |
Kiểm tra lớp hiệu suất
scene2_c/test_máy ảnh_launch_perf_class.py
Xác minh thời gian khởi động của máy ảnh nhỏ hơn 500 mili giây đối với cả máy ảnh chính phía trước và phía sau với cảnh khuôn mặt scene2_c.
scene2_c/test_jpeg_capture_perf_class.py
Xác minh độ trễ chụp ảnh JPEG 1080p là dưới 1 giây đối với cả máy ảnh chính phía trước và phía sau có cảnh khuôn mặt scene2_c.