ITS máy ảnh

Bộ kiểm thử hình ảnh máy ảnh (ITS) là một khung để chạy kiểm thử trên hình ảnh do máy ảnh Android tạo ra. Mục tiêu chung của mỗi bài kiểm thử trong ITS là định cấu hình máy ảnh theo một cách cụ thể, chụp một hoặc nhiều ảnh và kiểm tra các ảnh đó để xem liệu chúng có chứa dữ liệu hình ảnh dự kiến hay không. Nhiều hoạt động kiểm thử yêu cầu hướng máy ảnh vào một biểu đồ mục tiêu cụ thể hoặc được chiếu sáng ở một cường độ cụ thể.

ITS nằm trong bộ kiểm thử CTS Verifier trong cts/apps/CameraITS. Thiết bị phải vượt qua các bài kiểm thử ITS tương ứng với các tính năng được hỗ trợ mà khung máy ảnh quảng cáo cho các ứng dụng bên thứ ba dưới dạng một tập hợp con của CTS.

Thiết lập

Để chạy kiểm thử ITS, bạn phải thiết lập những nội dung sau:

  • Thiết bị đang được kiểm thử (DUT)
  • Máy chủ (ví dụ: máy tính để bàn hoặc máy tính xách tay Linux)
  • Cảnh mà máy ảnh chụp

Thiết lập thiết bị được kiểm thử (DUT)

Để thiết lập DUT, hãy làm theo các bước sau:

  1. Kết nối DUT với máy chủ qua USB.
  2. Cấp quyền cho máy chủ truy cập vào DUT qua ADB.
  3. Cài đặt ứng dụng CTS Verifier (CtsVerifier.apk) trên thiết bị. Để biết thêm thông tin, hãy xem phần Sử dụng Trình xác minh CTS.

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk

Thiết lập máy chủ lưu trữ

ITS yêu cầu máy chủ phải kết nối với DUT qua USB, có thể sử dụng ADB để giao tiếp và điều khiển thiết bị, đồng thời phải cài đặt phần mềm cần thiết.

Để thiết lập máy chủ của bạn, hãy đảm bảo bạn đã cài đặt phần mềm sau.

Công cụ nền tảng SDK Android

Bạn phải cài đặt Bộ công cụ nền tảng SDK Android và ADB phải nằm trong đường dẫn thực thi của shell hoặc thiết bị đầu cuối đang chạy trên máy chủ. Đối với phiên bản phát hành công khai của Bộ công cụ nền tảng SDK Android, hãy xem Ghi chú phát hành của Bộ công cụ nền tảng SDK.

Python

Bạn phải cài đặt Python trên máy chủ lưu trữ. Bạn nên sử dụng một bản phân phối Python đi kèm để đảm bảo hỗ trợ các phiên bản tương thích. Để biết thông tin chi tiết về các phiên bản Python và gói cần cài đặt cho một bản phát hành cụ thể, hãy xem ghi chú phát hành ITS cho máy ảnh đối với bản phát hành tương ứng.

Mobly

Đối với Android 12 trở lên, bạn phải cài đặt khung kiểm thử Mobly. Mobilely cho phép bạn thiết lập DUT và máy tính bảng biểu đồ trong lớp its_base_test. Để cài đặt khung kiểm thử Mobly, hãy chạy:

pip install mobly

Thiết lập môi trường

Để thiết lập môi trường kiểm thử, hãy chạy:

cd CameraITS
source build/envsetup.sh

Lệnh này kiểm tra quá trình cài đặt Python, thiết lập biến môi trường PYTHONPATH và chạy kiểm thử đơn vị trên các mô-đun utils/*.py. Nếu không có lỗi nào được in ra thiết bị đầu cuối, thì môi trường đã sẵn sàng để chạy các chương trình kiểm thử ITS.

Thiết lập cảnh

Để thiết lập các cảnh quay, bạn nên sử dụng chế độ thiết lập Camera ITS-in-a-box để dễ dàng tự động hoá, đảm bảo độ tin cậy và hiệu quả trong quá trình kiểm thử. Thiết bị thử nghiệm ITS-in-a-box hỗ trợ tất cả các yêu cầu về chiếu sáng, căn giữa và thay đổi biểu đồ cho ITS. Ngoài ra, bạn cần có ITS-in-a-box để kiểm thử tiện ích máy ảnh.

Đối với kiểm thử thủ công, hãy đảm bảo những điều sau:

  • DUT nằm trên giá ba chân
  • DUT được trỏ đến đúng cảnh cho mỗi lần kiểm thử. (Tập lệnh thử nghiệm ITS đưa ra lời nhắc thay đổi chế độ thiết lập cảnh trước khi bắt đầu thử nghiệm trong một cảnh mới.)
  • DUT được kết nối với máy chủ qua USB.
  • DUT không di chuyển trong quá trình chạy kiểm thử.
  • Cảnh được chiếu sáng bằng nguồn sáng ổn định, không biến động. (Đừng sử dụng đèn huỳnh quang vì đèn này sẽ gây ra hiện tượng nhấp nháy.)

Tập lệnh kiểm thử ITS hiển thị lời nhắc yêu cầu người dùng thay đổi chế độ thiết lập cảnh trước khi bắt đầu kiểm thử trong một cảnh mới.

Bạn phải thiết lập hướng điện thoại để máy ảnh chụp ảnh mà không xoay. Cách dễ nhất để kiểm tra điều này là với các cảnh mặt trong cảnh2. Hầu hết điện thoại đều có điện thoại xoay ngang đối với máy ảnh sau và xoay theo chiều kim đồng hồ đối với máy ảnh trước.

Tệp cấu hình

Khi sử dụng khung Mobly, bạn phải tạo một tệp cấu hình config.yml để xác định nền tảng kiểm thử Mobly. Sau đây là ví dụ cho các trường hợp sử dụng khác nhau.

Tệp config.yml cảnh dựa trên máy tính bảng

Sau đây là tệp config.yml mẫu cho các cảnh dựa trên máy tính bảng. Đối với kiểm thử dựa 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 các tham số trong tệp và truyền các tham số đó đến từng chương trình kiểm thử.

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"  # "True" or "False"; quotes needed
      lighting_cntl: <controller-type>  # "arduino" or "None"; quotes needed
      lighting_ch: <controller-channel>
      camera: 0
      foldable_device: "False". # set "True" if testing foldable
      scene: <scene-name>  # if <scene-name> runs all scenes

Để gọi môi trường thử nghiệm, hãy chạy tools/run_all_tests.py. Nếu không có giá trị dòng lệnh nào chỉ định máy ảnh hoặc cảnh, thì quy trình kiểm thử sẽ chạy bằng các giá trị tệp config.yml. Nếu có giá trị dòng lệnh cho máy ảnh hoặc cảnh, thì các giá trị này sẽ ghi đè các giá trị trong phần TestParams của tệp config.yml. 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

tệp config.yml của cảnh sensor_fusion

Sau đây là ví dụ về tệp config_yml cho các kiểm thử sensor_fusion. Để kiểm thử sensor_fusion, từ khoá SENSOR_FUSION phải có trong tên của nền tảng kiểm thử. Android 13 trở lên chỉ hỗ trợ bộ điều khiển Arduino để hợp nhất cảm biến do kiểm thử tính năng xem trước và ổn định video. Android 12 hỗ trợ bộ điều khiển Arduino và Canakit.

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
      rotator_ch: 1
      camera: 0

Để chạy kiểm thử sensor_fusion bằng hộp kết hợp cảm biến, hãy chạy:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

Nhiều tệp config.yml của nhiều testbed

Sau đây là tệp config.yml mẫu có nhiều môi trường thử nghiệm, một môi trường thử nghiệm máy tính bảng và một môi trường thử nghiệm sensor_fusion. Các cảnh được kiểm thử sẽ xác định đúng nền tảng kiểm thử.

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

Tệp config.yml kiểm thử thủ công

Sau đây là tệp config.yml mẫu để kiểm thử thủ công. Kể từ Android 14, tính năng kiểm thử thủ công được hỗ trợ cho tất cả các kiểm thử ngoại trừ kiểm thử scene_extensions. Đối với kiểm thử thủ công, từ khoá MANUAL phải có trong tên của môi trường thử nghiệm. Ngoài ra, phần AndroidDevice không được chứa phần số sê-ri hoặc nhãn cho máy tính bảng.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: 1

Chạy kiểm thử ITS

Phần này mô tả cách chạy kiểm thử ITS.

Gọi kiểm thử

Sau khi thiết bị, máy chủ (bao gồm cả môi trường) và cảnh thực được thiết lập, hãy chạy các chương trình kiểm thử ITS bằng quy trình sau.

  1. Mở ứng dụng CTS Verifer. Trong trình đơn kiểm thử, hãy chọn Camera ITS Test (Kiểm thử ITS của máy ảnh).

  2. Trên máy chủ, hãy chạy các chương trình kiểm thử ITS từ thư mục CameraITS/. Ví dụ: đối với một thiết bị có máy ảnh trước và sau, hãy chạy lệnh sau:

    python tools/run_all_tests.py

    Tập lệnh lặp lại qua các máy ảnh và cảnh kiểm thử dựa trên tệp config.yml. Để gỡ lỗi các chế độ thiết lập, bạn nên chạy một trong các cảnh scene2 bằng một lần kiểm thử để có thời gian hoàn tất nhanh nhất.

    Đối với kiểm thử thủ công, trước khi bắt đầu chạy tập hợp các bài kiểm thử ITS trên mỗi cảnh, tập lệnh sẽ chụp ảnh cảnh hiện tại, lưu dưới dạng JPEG, in đường dẫn đến JPEG đến bảng điều khiển và yêu cầu người dùng xác nhận xem hình ảnh có ổn không. Quy trình chụp và xác nhận này lặp lại cho đến khi người dùng xác nhận hình ảnh là ổn. Sau đây là các thông báo trong quy trình này.

    Preparing to run ITS on camera 0
    Start running ITS on camera:  0
    Press Enter after placing camera 0 to frame the test scene:
    scene1_1
    The scene setup should be: A grey card covering at least the   middle 30% of the scene
    Running vendor 3A on device
    Capture an image to check the test scene
    Capturing 1 frame with 1 format [yuv]
    Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg
    Is the image okay for ITS scene1_1? (Y/N)
    

    Mỗi lần chạy tập lệnh sẽ in một nhật ký cho thấy PASS, FAIL, FAIL* hoặc SKIP cho mỗi lần kiểm thử ITS. FAIL* cho biết kiểm thử không đạt, nhưng vì kiểm thử chưa bắt buộc, nên kiểm thử sẽ báo cáo dưới dạng PASS cho CtsVerifier. SKIP cho biết kiểm thử đã thành công vì thiết bị không quảng cáo chức năng cơ bản đang được kiểm thử. Ví dụ: nếu một thiết bị không quảng cáo thông qua các giao diện máy ảnh mà thiết bị đó hỗ trợ DNG, thì các kiểm thử liên quan đến việc chụp tệp DNG sẽ bị bỏ qua và được tính là PASS.

  3. Để xác nhận rằng các bài kiểm thử đã đáp ứng các yêu cầu kiểm thử, hãy nhấn vào nút dấu kiểm màu xanh lục. Sau đó, mục Camera ITS Test (Kiểm thử ITS của máy ảnh) trong trình đơn kiểm thử của Trình xác minh CTS sẽ chuyển sang màu xanh lục và cho biết điện thoại đã vượt qua Camera ITS.

Kiểm thử DUT song song

Các thiết bị chạy Android 14 trở lên hỗ trợ kiểm thử DUT song song. Điều này cho phép bạn kiểm thử DUT song song với nhiều thiết bị để tăng tốc quá trình kiểm thử tổng thể. Ví dụ: tính năng kiểm thử song song cho phép bạn kiểm thử máy ảnh 0 trong một thiết bị quay và máy ảnh 1 trong một thiết bị quay khác cùng một lúc. Tất cả hoạt động kiểm thử cho các phiên kiểm thử song song được tổng hợp trên phiên CTS Verifier trên DUT tham chiếu. Bạn phải chạy kiểm thử song song bằng tính năng điều khiển ánh sáng Arduino, vì tính năng điều khiển ánh sáng thủ công không được hỗ trợ khi kiểm thử song song. Đảm bảo rằng một kênh khác trên cùng một bộ điều khiển Arduino sẽ kiểm soát ánh sáng cho mỗi giàn máy.

Sau đây là tệp config.yml mẫu xác định 3 nền tảng kiểm thử sẽ chạy song song.

TestBeds:
  - Name: TEST_BED_TABLET_SCENES_INDEX_0
    Controllers:
        AndroidDevice:
          - serial: <device-id-0>
            label: dut
          - serial: <tablet-id-0>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-0>
      camera: 0
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  - Name: TEST_BED_TABLET_SCENES_INDEX_1
    Controllers:
        AndroidDevice:
          - serial: <device-id-1>
            label: dut
          - serial: <tablet-id-1>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-1>
      camera: 1
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  # TEST_BED_SENSOR_FUSION represents testbed index 2
  # Parallel sensor_fusion is currently unsupported due to Arduino requirements
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion
    Controllers:
        AndroidDevice:
          - serial: <device-id>
            label: dut
    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: "arduino"
      rotator_ch: <controller-channel-2>
      camera: <camera-id>
      foldable_device: "False"
      tablet_device: "False"
      lighting_cntl: "None"
      lighting_ch: <controller-channel>
      scene: "sensor_fusion"

Để chạy song song các nền tảng thử nghiệm, hãy sử dụng lệnh sau:

for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait

Mô hình nhiễu DNG

Những thiết bị quảng cáo khả năng chụp RAW hoặc DNG phải cung cấp mô hình nhiễu trong siêu dữ liệu kết quả chụp của mỗi ảnh thô. Mô hình nhiễu này phải được nhúng vào HAL của máy ảnh cho từng máy ảnh (ví dụ: máy ảnh trước và sau) trên thiết bị có hỗ trợ.

Triển khai mô hình nhiễu

Để triển khai mô hình nhiễu, hãy làm theo các bước sau để tạo mô hình nhiễu và nhúng mô hình vào lớp trừu tượng phần cứng (HAL) của máy ảnh.

  1. Để tạo mô hình nhiễu cho từng camera, hãy chạy tập lệnh dng_noise_model.py trong thư mục tools. Thao tác này sẽ xuất ra một đoạn mã C. Để biết thêm thông tin về cách thiết lập máy ảnh và môi trường chụp, hãy xem tài liệu DngNoiseModel.pdf trong thư mục tools.

  2. Để triển khai mô hình nhiễu cho thiết bị, hãy cắt và dán đoạn mã C vào HAL máy ảnh.

Xác thực mô hình nhiễu

Quy trình kiểm thử ITS tự động tests/scene1_1/test_dng_noise_model.py xác thực mô hình nhiễu bằng cách xác minh rằng các giá trị nhiễu cho độ phơi sáng và độ lợi của ảnh được cung cấp trong dữ liệu máy ảnh là chính xác.