ITS máy ảnh

Bộ kiểm thử hình ảnh máy ảnh (ITS) là một khung để chạy các bài kiểm thử đối với 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 máy ảnh theo cách cụ thể, chụp một hoặc nhiều cảnh, và kiểm tra ảnh chụp để xem chúng có chứa dữ liệu hình ảnh dự kiến hay không. Nhiều phần yêu cầu máy ảnh phải 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 khai thác thử nghiệm Trình xác minh CTS ở cts/apps/CameraITS. Thiết bị phải vượt qua 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 nhóm nhỏ của CTS.

Thiết lập

Để chạy thử nghiệm ITS, bạn phải thiết lập các mục sau:

  • Một thiết bị đang được thử nghiệm (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ị đang được 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áy chủ lưu trữ 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 Trình xác minh CTS (CtsVerifier.apk) trên thiết bị. Để biết thêm hãy xem bài viết 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 để điều khiển và giao tiếp thiết bị, đồng thời có các yêu cầu phần mềm đã cài đặ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 các công cụ của Nền tảng SDK Android và phải cài đặt ADB đườ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ủ lưu trữ máy. Đối với phiên bản được phát hành công khai của các công cụ Nền tảng SDK Android, xem Ghi chú phát hành 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 gói Phân phối Python để đảm bảo hỗ trợ cho các phiên bản tương thích. Để biết thông tin chi tiết về những 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 phần Ghi chú phát hành cho Camera ITS trong bản phát hành tương ứng.

Di động

Đối với Android 12 trở lên, khung kiểm thử AdMob phải được cài đặt. 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ử di động, hãy chạy mã:

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 mã:

cd CameraITS
source build/envsetup.sh

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

Thiết lập cảnh

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

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

  • DUT đang ở trên giá ba chân
  • DUT được trỏ đến đúng cảnh cho mỗi lần kiểm thử. (Kịch bản 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.)
  • 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 dao động. (Không nên hãy dùng đèn huỳnh quang vì đèn này gây ra hiện tượng nhấp nháy.)

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

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

Tệp cấu hình

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

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. Cho thử nghiệm dựa trên máy tính bảng, từ khoá TABLET phải có trong tên lớp kiểm thử. Trong khởi chạy, trình chạy kiểm thử AdMob sẽ khởi chạy các tham số trong tệp rồi chuyển chúng đến từng thử nghiệm 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 giường thử nghiệm, hãy chạy tools/run_all_tests.py. Nếu không có lệnh nào các giá trị dòng chỉ định camera hoặc cảnh, phép kiểm thử sẽ được chạy bằng config.yml giá trị tệp. Nếu có các giá trị dòng lệnh cho camera hoặc cảnh, hãy 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 cảm biến_fusion

Sau đây là tệp config_yml mẫu cho các kiểm thử sensor_fusion. Đối với kiểm thử sensor_fusion, từ khoá SENSOR_FUSION phải nằm trong lớp kiểm thử . Android 13 trở lên chỉ hỗ trợ Arduino bộ điều khiển hợp nhất cảm biến do thử nghiệm xem trước và kiểm tra độ ổn định video. Android 12 hỗ trợ tay đ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 hợp nhất cảm biến, 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 thử nghiệm

Sau đây là ví dụ về tệp config.yml có nhiều trường kiểm thử, một máy tính bảng đã được thử nghiệm và một máy thử nghiệm sensor_fusion. Xác định nền thử nghiệm chính xác dựa trên các cảnh thử nghiệm.

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 tệp config.yml theo cách thủ công

Sau đây là tệp config.yml mẫu để kiểm thử thủ công. Từ Android 14, thủ công Google Analytics hỗ trợ tất cả các thử nghiệm, ngoại trừ scene_extensions kiểm thử. Đối với kiểm thử thủ công, từ khoá MANUAL phải có trong tên trung tâm kiểm thử. Ngoài ra, phần AndroidDevice không được chứa phần nối tiếp hoặc nhãn cho một chiếc 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.

Đang gọi kiểm thử

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

  1. Mở ứng dụng CTS Verifer. Trong trình đơn kiểm thử, hãy chọn Kiểm tra ITS cho máy ảnh.

  2. Trên máy chủ, hãy chạy các chương trình kiểm thử ITS qua CameraITS/ thư mục. 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
    

    Kịch bản lặp lại qua các camera và các cảnh thử nghiệm dựa trên Tệp config.yml. Để gỡ lỗi chế độ thiết lập, bạn nên chạy một chế độ cài đặt trong scene2 cảnh bằng một bài kiểm thử duy nhất để đạt được tốc độ quay vòng 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 chụp ảnh cảnh hiện tại, lưu dưới dạng tệp JPEG, ảnh in đường dẫn đến tệp 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 tạm ổn. Luồng thu thập và xác nhận này lặp lại cho đến khi người dùng xác nhận rằng hình ảnh đã hợp lệ. 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 thử nghiệm ITS. FAIL* cho biết kiểm thử không thành công nhưng vì quy trình kiểm thử chưa bắt buộc nên quy trình kiểm thử sẽ báo cáo là một PASS tới CtsVerifier. SKIP cho biết kiểm thử đã thành công vì thiết bị không quảng cáo tính năng cơ bản đang được thử nghiệm. Cho ví dụ: nếu một thiết bị không quảng cáo thông qua giao diện máy ảnh khung này hỗ trợ DNG, các bài kiểm thử liên quan đến việc chụp tệp DNG sẽ bị bỏ qua và tính dưới dạng PASS.

  3. Để xác nhận rằng 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. Mục Kiểm tra ITS của máy ảnh trong Trình xác minh CTS sau đó, trình đơn test (kiểm thử) sẽ chuyển sang màu xanh lục và cho biết điện thoại đã vượt qua ITS của Camera.

Kiểm thử DUT song song

Các thiết bị chạy Android 14 trở lên hỗ trợ song song Thử nghiệm DUT. Đ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 độ thử nghiệm tổng thể. Ví dụ: kiểm thử song song cho phép bạn kiểm thử máy ảnh 0 trong một và camera 1 trong một thiết bị khác cùng lúc. Tất cả kiểm thử cho tính năng song song các phiên thử nghiệm được tổng hợp trong phiên Người xác minh CTS về DUT tham chiếu. Bạn phải chạy thử nghiệm song song bằng tính năng điều khiển ánh sáng Arduino, dưới dạng chiếu sáng thủ công không được hỗ trợ kiểm thử song song. Hãy đảm bảo rằng một trên cùng một bộ điều khiển Arduino điều khiển ánh sáng cho từng thiết bị.

Sau đây là tệp config.yml mẫu xác định 3 nền tảng kiểm thử cần 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 kiểm thử 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

Các thiết bị quảng cáo khả năng chụp ảnh RAW hoặc DNG phải gây ồn trong siêu dữ liệu kết quả chụp của mỗi cảnh quay thô. Mô hình tiếng ồn này phải được nhúng vào lớp trừu tượng phần cứng (HAL) cho camera đối với mỗi camera (ví dụ: mặt 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ô 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 hàm dng_noise_model.py tập lệnh trong Thư mục tools. Thao tác này sẽ xuất ra một đoạn mã C. Cho biết thêm thông tin về cách thiết lập máy ảnh và môi trường chụp, 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 mã C đoạn mã vào HAL của máy ảnh.

Xác thực mô hình tiếng ồn

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