Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

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

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

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:

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.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 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_idscene_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 camerascene 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 camerascene , 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 /tmpCameraITS_ 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.txttest_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_whitetest_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.

Bản vẽ khái niệm về đường viền và tiêu chí lựa chọn

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

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

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