Một số thay đổi ITS của Máy ảnh được bao gồm trong bản phát hành Android 12. Trang này tóm tắt những thay đổi được chia thành bốn loại chính:
- Cấu trúc lại thành Python 3
- Áp dụng khung thử nghiệm Mobly
- Kiểm tra các thay đổi
- Các bài kiểm tra mới
Cấu trúc lại thành Python 3
Do việc ngừng sử dụng Python 2.7 vào tháng 1 năm 2020, toàn bộ cơ sở mã Camera ITS đã được cấu trúc lại thành Python 3. Cần có các phiên bản và thư viện Python sau trong Android 12:
- 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 cấu trúc lại thành Python 3.
Tất cả các bài kiểm tra riêng lẻ đều được cấu trúc lại và sử dụng lớp thiết lập bài kiểm tra mới được xác định trong tests/its_base_test.py
. Hầu hết các tên và chức năng thử nghiệm vẫn được giữ nguyên. Trong Android 12, tất cả các thử nghiệm riêng lẻ hiện tải các cảnh của chúng. Trong khi 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ể, 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 thử nghiệm riêng lẻ, hãy xem Thay đổi thử nghiệm .
Các mô-đun Python sau được cấu trúc lại với một sự thay đổi tên:
-
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 thử nghiệm Mobly
Mobly là một khung thử nghiệm dựa trên Python hỗ trợ các trường hợp thử nghiệm 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ý các bài 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ý các bài kiểm tra tốt hơn. Mobly là một khung thử nghiệm dựa trên Python hỗ trợ các trường hợp thử nghiệm 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 config.yml
Với khuôn khổ Mobly, bạn có thể thiết lập một thiết bị đang được thử nghiệm (DUT) và một máy tính bảng biểu đồ trong lớp its_base_test
. config.yml
(YAML) được sử dụng để tạo một thử nghiệm Mobly. Nhiều khay thử nghiệm có thể được định cấu hình trong tệp cấu hình này, ví dụ: một máy tính bảng và một tấm thử nghiệm kết hợp cảm biến. Trong mỗi phần bộ điều khiển của testbed, bạn có thể chỉ định device_ids
để xác định các thiết bị Android thích 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
đều được thông qua trong lớp thử nghiệm. Các giá trị thông số kiểm tra 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, người chạy thử nghiệm Mobly khởi tạo TestParams
và chuyển chúng cho các bài kiểm tra 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
Testbed có thể được gọi bằng tools/run_all_tests.py
. Nếu không có giá trị dòng lệnh nào, các bài kiểm tra 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ách sử dụ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 kết hợp cảm biến
Đối với thử nghiệm phản ứng tổng hợp cảm biến , tên tấm thử nghiệm phải bao gồm từ khóa SENSOR_FUSION
. 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 để kết hợp cảm biến .
Sau đây là tệp config.yml
mẫu cho các lần chạy 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 với 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 tấm thử nghiệm
Nhiều testbed 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ả một tấm thử máy tính bảng và một tấm thử nghiệm kết hợp cảm biến.
Sau đây là một tệp config.yml
mẫu với cả máy tính bảng và các tấm thử nghiệm kết hợp 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, thử nghiệm phải xác định thử nghiệm như vậy bằng từ khóa MANUAL
trong tên thử nghiệm. Ngoài ra, tấm thử nghiệm không được 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
Thử nghiệm cảnh không có máy tính bảng
Thử nghiệm cho cảnh 0 và cảnh 5 có thể được thực hiện với TEST_BED_TABLET_SCENES
hoặc với TEST_BED_MANUAL
. Tuy nhiên, nếu quá trình kiểm tra được thực hiện với TEST_BED_TABLET_SCENES
, máy tính bảng phải được kết nối và ID nối tiếp 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 chỉ định giá trị ID nối tiếp cho máy tính bảng.
Chạy các bài kiểm tra riêng lẻ
Chỉ có thể chạy các bài kiểm tra riêng lẻ cho mục đích gỡ lỗi vì kết quả của chúng không được báo cáo cho Người xác minh CTS . Vì các tệp config.yml
không thể được ghi đè tại dòng lệnh cho camera
và scene
, các thông số này phải chính xác trong tệp config.yml
cho thử nghiệm riêng lẻ được đề cập. Ngoài ra, nếu có nhiều hơn một testbed trong tệp cấu hình, bạn phải chỉ định testbed với cờ --test_bed
. Ví dụ:
python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES
Kiểm tra hiện vật
Trong Android 12, các cấu phần thử nghiệm cho ITS Máy ảnh được lưu trữ tương tự như Android 11 trở xuống nhưng với những thay đổi sau:
- Thư mục thử nghiệm tạo tác
/tmp
cóCameraITS_
thêm vào chuỗi ngẫu nhiên 8 ký tự để rõ ràng. - Kết quả kiểm tra và lỗi được lưu trữ trong
test_log.DEBUG
cho mỗi lần kiểm tra thay vìtest_name_stdout.txt
vàtest_name_stderr.txt
. - DUT và logcats máy tính bảng từ mỗi bài kiểm tra riêng lẻ được lưu trữ trong
/tmp/CameraITS_########
, giúp đơn giản hóa việc gỡ lỗi vì tất cả thông tin cần thiết để gỡ lỗi sự cố 3A đều được ghi lại.
Kiểm tra các thay đổi
Trong Android 12, cảnh 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 mẫu máy tính bảng hơn hiển thị cảnh đúng cách.
scene0 / test_jitter.py
Bài kiểm tra test_jitter
chạy trên các 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 bài kiểm tra riêng lẻ trong Android 11.
Tên bài kiểm tra | Cấp API đầu tiên | Khẳng định |
---|---|---|
scene1_1 / test_black_white.py | TẤT CẢ CÁC | Phơi sáng ngắn, giá trị RGB tăng thấp ~ [0, 0, 0] Phơi sáng lâu, giá trị RGB tăng cao ~ [255, 255, 255] |
scene1_1 / test_channel_saturation.py | 29 | Giảm dung sai trên sự khác biệt [255, 255, 255] để loại bỏ sắc thái màu trong ảnh 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 bài kiểm tra | Cấp API đầu tiên | Khẳng định |
---|---|---|
scene1_1 / test_black_white.py | TẤT CẢ CÁC | Phơi sáng ngắn, giá trị RGB 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
Bài kiểm tra test_burst_sameness_manual
chạy trên các camera ẩn vật lý trong Android 12.
scene1_2 / test_tonemap_sequence.py
Kiểm tra test_tonemap_sequence
chạy trên LIMITED máy ảnh trong Android 12.
scene1_2 / test_yuv_plus_raw.py
Bài kiểm tra 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 máy ảnh trong Android 12.
scene3 / test_flip_mirror.py
Kiểm tra test_flip_mirror
chạy trên LIMITED máy ảnh trong Android 12.
scene4 / test_aspect_ratio_and_crop.py
Tìm vòng kết nối trong scene4/test_aspect_ratio_and_crop.py
đã được cấu trúc lại trong Android 12.
Các phiên bản Android trước đây đã sử dụng một phương pháp liên quan đến việc tìm đường bao con (hình tròn) bên trong đường viền mẹ (hình vuông) với các bộ lọc cho 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 kiếm tất cả các đường viền và sau đó lọc bằng cách tìm các tính năng phù hợp nhất. Để loại bỏ các vòng tròn giả trên màn hình, cần có diện tích đường bao 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ẽ khái niệm về đường viền và tiêu chí lựa chọn
Phương pháp Android 12 đơn giản hơn và hoạt động để giải quyết vấn đề với việc cắt hộp giới hạn trong một số máy tính bảng hiển thị. Tất cả các ứng cử viên vòng kết nối được ghi lại cho mục đích gỡ lỗi.
Trong Android 12, kiểm tra cắt được chạy cho các thiết bị FULL
và LEVEL3
. Các phiên bản Android 11 trở xuống bỏ qua xác nhận kiểm tra cắt cho các 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Ả CÁ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 | Trồng trọt Tỷ lệ khung hình FoV cho các định dạng 4: 3, 16: 9, 2: 1 |
CẤP 3 | TẤT CẢ CÁC | Trồng trọt Tỷ lệ khung hình FoV cho các định dạng 4: 3, 16: 9, 2: 1 |
scene4 / test_multi_camera_alignment.py
Phương thức undo_zoom()
để chụp YUV trong scene4/test_multi_camera_alignment.py
đã được cấu trúc lại để tính toán chính xác hơn cho việc cắt trên các cảm biến không khớp với tỷ lệ khung hình của ảnh.
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
sensor_fusion / test_sensor_fusion.py
Trong Android 12, một phương pháp phát hiện các tính năng trong hình ảnh được thêm vào để kiểm tra sự kết hợp cảm biến.
Trong các phiên bản thấp hơn Android 12, toàn bộ hình ảnh được sử dụng để tìm 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 cuộ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 đủ, thì Android 12 sẽ che vùng phát hiện tính năng ở giữa 20% trước tiên và giới hạn các tính năng tối đa 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 phát hiện tính năng Android 11 và Android 12. Việc nâng cao 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 chất lượng kém và ảnh hưởng tiêu cực đến các phép đo.
Hình 2. Sự khác biệt về tính năng phát hiện giữa Android 11 và Android 12
Các bài kiểm tra mới
scene0 / test_solid_color_test_pattern.py
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.
Sân khấu | Tên bài kiểm tra | Cấp API đầu tiên | Sự mô 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. |
Các mẫu kiểm tra màu đồng nhất phải được bật để hỗ trợ chế độ riêng tư của máy ảnh. Kiểm tra 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 đặc điểm 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 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 màu đồng nhất, hãy xem SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
.
Phương pháp
Khung YUV được chụp cho các thông 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, vì vậy không cần cảnh cụ thể. Nếu PER_FRAME_CONTROL
được hỗ trợ, một khung YUV duy nhất sẽ được chụp cho mỗi cài đặt được kiểm tra. Nếu PER_FRAME_CONTROL
không được hỗ trợ, bốn khung hình đượ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
máy ảnh.
Các ảnh chụp YUV được đặt thành các mẫu thử nghiệm BLACK
, WHITE
, RED
, GREEN
và BLUE
LÁ bão hòa hoàn toàn. Vì định nghĩa mẫu thử nghiệm dựa trên mẫu Bayer của cảm biến, các kênh màu phải được đặt cho từng màu như thể hiện trong bảng sau.
Màu sắc | testPatternData (RGGB) |
---|---|
MÀU Đ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 khẳng định |
---|---|---|
31 | Bayer | ĐEN, TRẮNG, ĐỎ, XANH LÁ, XANH |
31 | BỆNH TĂNG BẠCH CẦU ĐƠN NHÂN | ĐEN TRẮNG |
<31 | Bayer / MONO | MÀU ĐEN |
Kiểm tra lớp hiệu suất
scene2_c / test_camera_launch_perf_class.py
Xác minh thời gian khởi động máy ảnh dưới 500 ms cho 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 JPEG 1080p là dưới 1 giây cho cả máy ảnh chính phía trước và phía sau với cảnh khuôn mặt scene2_c.