Tổng quan về Camera ITS

Bộ kiểm thử hình ảnh camera (ITS) là một khung để chạy các kiểm thử trên hình ảnh do camera 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 camera theo một cách cụ thể, chụp một hoặc nhiều bức ảnh và kiểm tra các bức ảnh để xem chúng có chứa dữ liệu hình ảnh dự kiến hay không. Nhiều bài kiểm tra yêu cầu camera hướng 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. Các thiết bị phải vượt qua các kiểm thử ITS tương ứng với những tính năng được hỗ trợ mà khung camera 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 các 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ột máy chủ (ví dụ: máy tính để bàn hoặc máy tính xách tay Linux)
  • Một cảnh mà camera chụp

Thiết lập thiết bị đang thử nghiệm (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ột 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
  4. Trên DUT, hãy chạy ứng dụng camera mặc định và đóng tất cả các cửa sổ xuất hiện khi chạy để tránh bị ảnh hưởng trong quá trình kiểm thử.

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

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

Để thiết lập máy chủ lưu trữ, 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 trình bao hoặc thiết bị đầu cuối đang chạy trên máy chủ. Đối với phiên bản công khai của Bộ công cụ nền tảng Android SDK, hãy xem Ghi chú phát hành về 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 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ề 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 Camera ITS cho 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. Mobly 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 các bài 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 kiểm thử ITS.

Thiết lập cảnh

Để thiết lập các cảnh, 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ị kiểm thử ITS-in-a-box hỗ trợ mọi yêu cầu về ánh 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ử các tiện ích camera.

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

  • DUT được đặt trên giá ba chân
  • DUT được hướng vào đúng cảnh cho mỗi bài kiểm thử. (Tập lệnh kiểm thử ITS cung cấp lời nhắc để 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.)
  • 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 thử nghiệm.
  • Khung cảnh được chiếu sáng bằng một nguồn sáng ổn định, không nhấp nháy. (Không 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 sẽ hiển thị một 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 đặt hướng điện thoại sao cho camera chụp ảnh mà không bị xoay. Cách dễ nhất để kiểm tra điều này là xem các cảnh khuôn mặt trong cảnh 2. Hầu hết các điện thoại đều có hướng ngang, điện thoại xoay ngược chiều kim đồng hồ cho camera sau và xoay theo chiều kim đồng hồ cho camera 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ủa các cảnh dựa trên máy tính bảng

Sau đây là ví dụ về tệp config.yml cho các cảnh 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ừ khoá TABLET phải có trong tên testbed. 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 kiểm thử riêng lẻ.

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 nền tảng kiểm thử, hãy chạy tools/run_all_tests.py. Nếu không có giá trị dòng lệnh nào chỉ định camera hoặc cảnh, thì quá trình kiểm thử sẽ chạy với các giá trị tệp config.yml. Nếu có các giá trị dòng lệnh cho camera 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

tệp sensor_fusion scene config.yml

Sau đây là ví dụ về tệp config_yml cho các kiểm thử sensor_fusion. Đối với kiểm thử sensor_fusion, từ khoá SENSOR_FUSION phải có trong tên testbed. Android 13 trở lên chỉ hỗ trợ bộ điều khiển Arduino để kết hợp cảm biến do thử nghiệm 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 các bài 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
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1

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

Sau đây là ví dụ về tệp config.yml có nhiều nền tảng kiểm thử, một nền tảng kiểm thử máy tính bảng và một nền tảng kiểm thử sensor_fusion. Bệ thử nghiệm phù hợp được xác định theo các cảnh được 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à ví dụ về tệp config.yml để kiểm thử thủ công. Từ Android 14, hoạt độ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 kiểm thử. Ngoài ra, phần AndroidDevice không thể có 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

Tệp Gen2 rig testing config.yml

Sau đây là ví dụ về tệp config.yml của một TEST_BED_GEN2 testbed. Nền tảng kiểm thử này được dùng cho các hoạt động kiểm thử scene_ip, sử dụng một giàn Gen2](/docs/compatibility/cts/camera-its-box-gen2). Ví dụ sau đây cho thấy các tham số của testbed khi có sẵn giàn thử nghiệm Thế hệ 2 và các kiểm thử scene_ip không bị bỏ qua.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: gen2_rotator   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: 0
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: gen2_lights  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: 1
      scene: scene_ip

Ví dụ sau đây cho thấy các thông số của môi trường kiểm thử khi giàn Gen2 không có sẵn và các kiểm thử scene_ip bị bỏ qua.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: "None"   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: <controller-channel>
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: "None"  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: <controller-channel>
      scene: scene_ip

Để chạy kiểm thử scene_ip, hãy dùng một trong các lệnh sau:

python tests/scene_ip/test_default_jca_ip.py -c config.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

Chạy các quy trình kiểm thử của ITS

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

Gọi các kiểm thử

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

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

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

    python tools/run_all_tests.py

    Tập lệnh này lặp lại các camera và cảnh kiểm thử dựa trên tệp config.yml. Để gỡ lỗi thiết lập, bạn nên chạy một trong các cảnh scene2 với một thử nghiệm duy nhất để 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 bộ 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 ảnh dưới dạng JPEG, in đường dẫn đến JPEG vào 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 sẽ lặp lại cho đến khi người dùng xác nhận hình ảnh ổ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 ra một nhật ký cho biết PASS, FAIL, FAIL* hoặc SKIP cho mỗi bài kiểm thử ITS. FAIL* cho biết bài kiểm thử không thành công nhưng vì bài kiểm thử chưa bắt buộc nên bài kiểm thử sẽ báo cáo là PASS cho CtsVerifier. SKIP cho biết đã vượt qua kiểm thử vì thiết bị không quảng cáo khả 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 camera mà thiết bị đó hỗ trợ DNG, thì các kiểm thử liên quan đến tính năng 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 yêu cầu kiểm thử, hãy nhấn vào nút dấu kiểm màu xanh lục. Mục Camera ITS Test (Kiểm thử ITS của Camera) trong trình đơn kiểm thử CTS Verifier sẽ chuyển sang màu xanh lục và cho biết điện thoại đã vượt qua kiểm thử ITS của Camera.

Thử nghiệm DUT song song

Các thiết bị chạy Android 14 trở lên có 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 giàn để 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ử camera 0 trong một giàn và camera 1 trong một giàn khác cùng lúc. Tất cả hoạt động kiểm thử cho các phiên kiểm thử song song đều được tổng hợp trên phiên CTS Verifier trên DUT tham chiếu. Bạn phải chạy thử nghiệm song song với chế độ điều khiển đèn Arduino, vì chế độ điều khiển đèn thủ công không được hỗ trợ trong thử nghiệm 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ẽ điều khiển ánh sáng cho từng giàn.

Sau đây là một tệp config.yml mẫu xác định 3 nền tảng thử nghiệm để 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 các testbed song song, hãy 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 ảnh ở định dạng RAW hoặc DNG phải cung cấp một mô hình nhiễu trong siêu dữ liệu kết quả chụp của mỗi bức ảnh thô. Mô hình nhiễu này phải được nhúng vào HAL camera cho từng camera (ví dụ: camera trước và camera sau) trên thiết bị có hỗ trợ.

Triển khai mô hình tiếng ồn

Để triển khai một 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 HAL camera.

  1. Để tạo một 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 camera.

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

Thử nghiệm 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à độ khuếch đại của bức ảnh được cung cấp trong dữ liệu camera là chính xác.