Ghi chú phát hành Bộ kiểm tra hình ảnh máy ảnh Android 12

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:

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.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/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_idscene_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 camerascene 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 camerascene 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 /tmpCameraITS_ đượ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.txttest_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_whitetest_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.

Bản vẽ ý tưởng đường nét và tiêu chí lựa chọn

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ị FULLLEVEL3 . 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.

sự khác biệt trong việc phát hiện tính năng giữa Android 11 và Android 12

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ụng SOLID_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 , GREENBLUE 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.