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 bài kiểm thử 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 ở cường độ cụ thể.
ITS nằm trong bộ kiểm thử Trình xác thực CTS 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ủ lưu trữ (ví dụ: máy tính để bàn hoặc máy tính xách tay chạy 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:
- Kết nối DUT với máy chủ qua USB.
- Cấp quyền cho máy chủ truy cập vào DUT qua ADB.
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
Trên thiết bị được kiểm thử (DUT), hãy chạy ứng dụng máy ảnh mặc định và xoá tất cả cửa sổ xuất hiện khi khởi chạy để tránh bị can thiệp 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 bắt buộc.
Để 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 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ề 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 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, bạn nên sử dụng chế độ thiết lập Camera ITS-in-a-box (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 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 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ó hướng ngang, đ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ồ đố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 cho cảnh 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 thử nghiệm 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 cho tính năng hợp nhất cảm biến do thử nghiệm 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 hợp nhất 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 môi trường thử nghiệm
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.
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).
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 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 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ảnhscene2
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 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 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 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 ra một nhật ký cho thấy
PASS
,FAIL
,FAIL*
hoặcSKIP
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ạngPASS
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
.Để 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 Trình xác minh CTS trên DUT tham chiếu. Bạn phải chạy kiểm thử song song bằng bộ điều khiển ánh sáng Arduino, vì kiểm thử song song không hỗ trợ bộ điều khiển ánh sáng thủ công. Đả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 ba 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 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 máy ảnh cho mỗi máy ảnh (ví dụ: máy ảnh trước và sau) trên thiết bị tuyên bố 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 HAL máy ảnh.
Để tạo mô hình nhiễu cho từng máy ảnh, hãy chạy tập lệnh
dng_noise_model.py
trong thư mụctools
. 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ệuDngNoiseModel.pdf
trong thư mụctools
.Để 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.