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

Một số thay đổi đối với Camera ITS có trong bản phát hành Android 12. Trang này tóm tắt các thay đổi thuộc 4 danh mục lớn:

Tái cấu trúc sang Python 3

Do Python 2.7 ngừng hoạt động từ tháng 1 năm 2020, nên toàn bộ cơ sở mã Camera ITS đã được tái cấu trúc thành Python 3. Các phiên bản và thư viện Python sau đây là bắt buộc trong Android 12:

Trình chạy kiểm thử 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 chương trình kiểm thử riêng lẻ đều được tái cấu trúc và sử dụng lớp thiết lập kiểm thử mới được xác định trong tests/its_base_test.py. Hầu hết tên kiểm thử và chức năng vẫn giữ nguyên. Trong Android 12, tất cả các bài kiểm thử riêng lẻ đều tải cảnh của chúng. Mặc dù việc tải cảnh cho mỗi lần kiểm thử sẽ làm tăng tổng thời gian kiểm thử, nhưng điều này cho phép gỡ lỗi từng lần kiểm thử.

Để biết thêm thông tin về từng thay đổi kiểm thử, vui lòng xem phần Kiểm thử thay đổi.

Các mô-đun Python sau đây được tái cấu trúc với 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

Sử dụng khung kiểm thử Mobly

Mobly là một 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ó chế độ thiết lập phần cứng tuỳ chỉnh. Camera ITS sử dụng cơ sở hạ tầng kiểm thử Mobly để cho phép kiểm soát và ghi nhật ký kiểm thử tốt hơn.

Camera ITS sử dụng cơ sở hạ tầng kiểm thử Mobly để kiểm soát và ghi nhật ký các kiểm thử hiệu quả hơn. Mobly là một 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ó chế độ thiết lập phần cứng tuỳ chỉnh. Để biết thêm thông tin về Mobly, hãy xem google/mobly.

Tệp config.yml

Với khung Mobly, bạn có thể thiết lập một thiết bị đang được kiểm thử (DUT) và một bảng xếp hạng trong lớp its_base_test. Tệp config.yml (YAML) được dùng để tạo một nền tảng kiểm thử Mobly. Bạn có thể định cấu hình nhiều nền tảng thử nghiệm trong tệp cấu hình này, chẳng hạn như máy tính bảng và nền tảng thử nghiệm hợp nhất cảm biến. Trong phần trình điều khiển của mỗi trung tâm kiểm thử, bạn có thể chỉ định device_ids để xác định các thiết bị Android thích hợp cho trình chạy kiểm thử. Ngoài mã thiết bị, các tham số khác như brightness, chart_distance, debug_mode, camera_idscene_id của máy tính bảng sẽ được chuyển vào lớp kiểm thử. Các giá trị thông số kiểm thử 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)

Kiểm thử trên máy tính bảng

Đối với hoạt động kiểm thử trên máy tính bảng, từ khoá TABLET phải có trong tên của môi trường thử nghiệm. Trong quá trình khởi chạy, trình chạy kiểm thử Mobly sẽ khởi chạy TestParams và truyền các đối tượng này đến từng chương trình kiểm thử.

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

Bạn có thể gọi môi trường thử nghiệm bằng tools/run_all_tests.py. Nếu không có giá trị dòng lệnh nào, thì các chương trình kiểm thử sẽ chạy bằng 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

Kiểm thử tính năng hợp nhất cảm biến

Đối với kiểm thử hợp nhất cảm biến, tên của môi trường thử nghiệm phải bao gồm từ khoá SENSOR_FUSION. Giường thử nghiệm chính xác được xác định theo các cảnh được kiểm thử. Android 12 hỗ trợ cả bộ điều khiển Arduino và Canakit cho tính năng hợp nhất cảm biến.

Sau đây là tệp config.yml mẫu để chạy tính năng hợp nhất 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 các bài kiểm thử cảm biến kết hợp bằng thiết bị kiểm thử cảm biến kết hợp, 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 môi trường thử nghiệm

Có thể đưa nhiều điểm kiểm thử vào tệp cấu hình. Cách kết hợp phổ biến nhất là có cả nền tảng thử nghiệm máy tính bảng và nền tảng thử nghiệm cảm biến kết hợp.

Sau đây là tệp config.yml mẫu có cả nền tảng thử nghiệm kết hợp cảm biến và 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

  - 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 thử theo cách thủ công

Tính năng kiểm thử thủ công vẫn được hỗ trợ trong Android 12. Tuy nhiên, môi trường thử nghiệm phải xác định việc kiểm thử như vậy bằng từ khoá MANUAL trong tên môi trường thử nghiệm. Ngoài ra, cơ sở thử nghiệm không được chứa mã nhận dạng máy tính bảng.

Sau đây là tệp config.yml mẫu để kiểm thử 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

Kiểm thử cảnh mà không cần máy tính bảng

Bạn có thể kiểm thử cảnh 0 và cảnh 5 bằng TEST_BED_TABLET_SCENES hoặc bằng TEST_BED_MANUAL. Tuy nhiên, nếu kiểm thử bằng TEST_BED_TABLET_SCENES, bạn phải kết nối máy tính bảng và mã sê-ri của máy tính bảng phải hợp lệ ngay cả khi không sử dụng máy tính bảng vì chế độ thiết lập lớp kiểm thử sẽ gán giá trị mã sê-ri cho máy tính bảng.

Chạy từng chương trình kiểm thử

Bạn chỉ có thể chạy các chương trình kiểm thử riêng lẻ cho mục đích gỡ lỗi vì kết quả của các chương trình này không được báo cáo cho CTS Verifier. Vì không thể ghi đè các 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 kiểm thử riêng lẻ có liên quan. Ngoài ra, nếu có nhiều môi trường thử nghiệm trong tệp cấu hình, bạn phải chỉ định môi trườ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

Kiểm thử cấu phần phần mềm

Trong Android 12, các cấu phần phần mềm kiểm thử cho ITS của máy ảnh được lưu trữ tương tự như Android 11 trở xuống, nhưng có những thay đổi sau:

  • Thư mục cấu phần phần mềm kiểm thử /tmpCameraITS_ được thêm vào đầu chuỗi ngẫu nhiên gồm 8 ký tự để rõ ràng.
  • Đầu ra và lỗi kiểm thử được lưu trữ trong test_log.DEBUG cho mỗi lần kiểm thử thay vì test_name_stdout.txttest_name_stderr.txt.
  • Các logcat của DUT và máy tính bảng từ từng bài kiểm thử riêng lẻ được lưu trữ trong thư mục /tmp/CameraITS_########, giúp đơn giản hoá việc gỡ lỗi vì tất cả thông tin cần thiết để gỡ lỗi các vấn đề 3A đều được ghi lại.

Kiểm thử các thay đổi

Trong Android 12, cảnh trên máy tính bảng là tệp PNG thay vì tệp PDF. Việc sử dụng tệp PNG cho phép nhiều mẫu máy tính bảng hiển thị cảnh chính xác hơn.

cảnh0/test_jitter.py

Quy trình kiểm thử test_jitter chạy trên các máy ảnh ẩn thực tế 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 kiểm thử riêng lẻ trong Android 11.

Tên kiểm thử Cấp độ API đầu tiên Xác nhận
scene1_1/test_black_white.py TẤT CẢ Độ phơi sáng ngắn, giá trị RGB có độ lợi thấp ~[0, 0, 0]
Độ phơi sáng dài, giá trị RGB có độ lợi cao ~[255, 255, 255]
scene1_1/test_channel_saturation.py 29 Giảm dung sai trên các mức chênh lệch [255, 255, 255] để loại bỏ sắc thái màu trong ảnh màu trắng.

Bảng sau đây mô tả bài kiểm thử hợp nhất, cảnh1_1/test_black_white.py, trong Android 12.

Tên kiểm thử Cấp độ API đầu tiên Xác nhận
scene1_1/test_black_white.py TẤT CẢ Phơi sáng ngắn, giá trị RGB có độ lợi thấp ~[0, 0, 0]
Phơi sáng lâu, các giá trị RGB có độ 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 hình ảnh trắng.

scene1_1/test_burst_sameness_manual.py

Quy trình kiểm thử test_burst_sameness_manual chạy trên các máy ảnh ẩn thực tế trong Android 12.

scene1_2/test_tonemap_sequence.py

Quy trình kiểm thử test_tonemap_sequence chạy trên máy ảnh LIMITED trong Android 12.

cảnh1_2/test_yuv_plus_raw.py

Quy trình kiểm thử test_yuv_plus_raw chạy trên các máy ảnh ẩn thực tế trong Android 12.

scene2_a/test_format_combos.py

Quy trình kiểm thử test_format_combos chạy trên một số máy ảnh CÓ HẠN trong Android 12.

cảnh3/test_flip_mirror.py

Quy trình kiểm thử test_flip_mirror chạy trên một số máy ảnh CÓ HẠN trong Android 12.

scene4/test_aspect_ratio_and_crop.py

Tính năng tìm vòng tròn 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 một phương thức liên quan đến việc tìm đường viền con (vòng tròn) bên trong đường viền mẹ (hình vuông) bằng các bộ lọc cho kích thước và màu sắc. Android 12 sử dụng một phương thức liên quan đến việc tìm tất cả các đường viền, sau đó lọc bằng cách tìm các đặc điểm tròn nhất. Để sàng lọc các vòng tròn giả trên màn hình, bạn cần có một vùng đườ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 thể hiện trong hình sau.

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

Hình 1. Bản vẽ khái niệm về đường đồng mức và tiêu chí lựa chọn

Phương thức Android 12 đơn giản hơn và giúp giải quyết vấn đề cắt hộp giới hạn trong một số máy tính bảng màn hình. Tất cả các ứng viên trong vòng kết nối đều được ghi lại cho mục đích gỡ lỗi.

Trong Android 12, kiểm thử cắt được chạy cho các thiết bị FULLLEVEL3. Các phiên bản Android 11 trở xuống sẽ bỏ qua các câu nhận định kiểm thử cắt cho thiết bị FULL.

Bảng sau đây liệt kê các câu nhận định cho test_aspect_ratio_and_crop.py tương ứng với một 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 Câu nhận định
CÓ 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 ĐỦ Tối thiểu 31 Cắt
Tỷ lệ khung hình
FoV cho định dạng 4:3, 16:9, 2:1
LEVEL3 TẤT CẢ Cắt
Tỷ lệ khung hình
FoV cho định dạng 4:3, 16:9, 2:1

scene4/test_multi_camera_alignment.py

Phương thức undo_zoom() cho YUV chụp trong scene4/test_multi_camera_alignment.py đã được tái cấu trúc để tính 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 chụp.

Mã Python 2 cho Android 11

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ã Python 3 cho Android 12

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 thức phát hiện các tính năng trong hình ảnh được thêm vào để kiểm thử tính năng hợp nhất cảm biến.

Trong các phiên bản thấp hơn Android 12, toàn bộ hình ảnh được dùng để tìm 240 đặc điểm tốt nhất, sau đó được che vào giữa 20% để tránh hiệu ứng màn trập cuốn với yêu cầu tối thiểu về đặc điểm là 30 đặc điểm.

Nếu không đủ tính năng được tìm thấy bằng phương thức này, Android 12 sẽ che khu vực phát hiện tính năng ở giữa 20% trước, sau đó giới hạn số lượng tính năng tối đa gấp đôi yêu cầu tối thiểu về tính năng.

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 tăng ngưỡng yêu cầu tối thiểu về tính năng sẽ 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 kết quả đo lường.

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

Hình 2. Sự khác biệt về cách phát hiện tính năng giữa Android 11 và Android 12

Kiểm thử mới

cảnh0/test_solid_color_test_pattern.py

Một kiểm thử mới, test_solid_color_test_pattern, được bật cho Android 12. Quy trình kiểm thử này được bật cho tất cả máy ảnh và được mô tả trong bảng sau.

Scene Tên kiểm thử Cấp độ API đầu tiên 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.

Bạn phải bật mẫu kiểm thử màu đồng nhất để hỗ trợ chế độ quyền riêng tư của máy ảnh. Quy trình kiểm thử 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 theo mẫu đã chọn và màu hình ảnh thay đổi theo thông số kỹ thuật.

Tham số

  • cameraPrivacyModeSupport: Xác định xem máy ảnh có hỗ trợ chế độ quyền riêng tư hay không.
  • android.sensor.testPatternMode: Thiết lập chế độ mẫu kiểm thử. Bài kiểm thử này sử dụng SOLID_COLOR.
  • android.sensor.testPatternData: Đặt giá trị mẫu kiểm thử R, Gr, Gb, G cho chế độ mẫu kiểm thử.

Để biết nội dung mô tả về mẫu kiểm thử màu đồng nhất, hãy xem SENSOR_TEST_PATTERN_MODE_SOLID_COLOR.

Phương thức

Khung YUV được ghi lại cho bộ tham số và nội dung hình ảnh được xác thực. Mẫu kiểm thử đượ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ào. Nếu PER_FRAME_CONTROL được hỗ trợ, thì một khung YUV sẽ được chụp cho mỗi chế độ cài đặt được kiểm thử. Nếu PER_FRAME_CONTROL không được hỗ trợ, 4 khung hình sẽ được chụp chỉ với khung cuối cùng được phân tích để tối đa hoá phạm vi kiểm thử trong máy ảnh LIMITED.

Các bản ghi YUV được đặt thành các mẫu kiểm thử BLACK, WHITE, RED, GREENBLUE bão hoà hoàn toàn. Vì định nghĩa mẫu kiểm thử là theo mẫu Bayer của cảm biến, nên bạn phải đặt kênh màu cho từng màu như trong bảng sau.

Màu testPatternData (RGGB)
ĐEN (0, 0, 0, 0)
TRẮNG (1, 1, 1, 1)
RED (Chỉ thị về thiết bị thu phát sóng) (1, 0, 0, 0)
XANH LỤC (0, 1, 1, 0)
MÀU XANH LAM (0, 0, 0, 1)

Bảng xác nhận

Bảng sau đây mô tả các câu nhận định kiểm thử 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 xác nhận
31 Bayer ĐEN, TRẮNG, ĐỎ, XANH LỤC, XANH DƯƠNG
31 ĐƠN SẮC ĐEN, TRẮNG
< 31 Bayer/MONO ĐEN

Bài kiểm thử 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 mặt trước và mặt sau bằng cảnh khuôn mặt scene2_c.

cảnh2_c/test_jpeg_capture_perf_class.py

Xác minh độ trễ chụp ảnh JPEG 1080p là chưa đến 1 giây cho cả camera chính trước và sau với cảnh khuôn mặt cảnh2_c.