Android 12 相機圖像測試套件發行說明

許多相機及其變化都包含在Android的12版本。本頁總結了分為四大類的變化:

重構為 Python 3

由於 Python 2.7 於 2020 年 1 月棄用,整個 Camera ITS 代碼庫重構為 Python 3。Android 12 中需要以下 Python 版本和庫:

主測試發射器, tools/run_all_tests.py ,保持相同Android版本11或更低,被重構到Python 3。

所有單獨測試重構和使用中定義的新的測試設置類tests/its_base_test.py 。大多數測試名稱和功能保持不變。在 Android 12 中,所有單獨的測試現在都會加載它們的場景。雖然每個測試的場景加載會增加整體測試時間,但它可以調試單個測試。

有關單個測試更改的詳細信息,請參閱測試的變化

以下 Python 模塊通過名稱更改進行了重構:

  • pymodules/its/caps.py →交通utils/camera_properties_utils.py
  • pymodules/its/cv2image.py →交通utils/opencv_processing_utils.py
  • pymodules/its/device.py →交通utils/its_session_utils.py
  • pymodules/its/error.py →交通utils/error_util.py
  • pymodules/its/image.py →交通utils/image_processing_utils.py
  • pymodules/its/objects.py →交通utils/capture_request_utils.py
  • pymodules/its/target.py →交通utils/target_exposure_utils.py
  • tools/hw.py →交通utils/sensor_fusion_utils.py

移動測試框架採用

Mobly是一個基於Python的測試框架,支持那些需要自定義硬件設置多台設備的測試案例。 Camera ITS 使用 Mobly 測試基礎架構來更好地控制和記錄測試。

Camera ITS 使用 Mobly 測試基礎架構來更好地控制和記錄測試。 Mobly 是一個基於 Python 的測試框架,支持需要具有自定義硬件設置的多個設備的測試用例。有關Mobly的更多信息,請參閱谷歌/ mobly

config.yml 文件

與Mobly框架,可以建立被測(DUT)的裝置和一個圖表片劑在its_base_test類。甲config.yml (YAML)文件用於創建一個Mobly測試平台。可以在此配置文件中配置多個測試台,例如平板電腦和傳感器融合測試台。在每個試驗台的控制器部分,你可以指定device_ids確定合適的Android設備的測試運行。除了設備ID,其它參數,例如片劑brightnesschart_distancedebug_modecamera_idscene_id在測試類被傳遞。常見的測試參數值有:

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)

基於平板電腦的測試

對於基於平板電腦的測試,關鍵字TABLET必須存在於測試平台的名稱。在初始化期間,Mobly測試運行初始化TestParams ,並將它們傳遞到各個測試。

下面是一個樣本config.yml基於平板電腦的運行文件。

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

該試驗台可通過調用tools/run_all_tests.py 。如果沒有命令行值存在時,測試與運行config.yml文件中的值。此外,可以重寫camerascene使用類似於11的Android或更低的命令在命令行配置文件的值。

例如:

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

傳感器融合測試

對於傳感器融合測試,測試床名必須包含關鍵字SENSOR_FUSION 。正確的測試平台由測試的場景決定。機器人12同時支持的Arduino和Canakit控制器,用於傳感器融合

以下是一個示例config.yml用於傳感器融合運行文件。

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

運行與所述傳感器融合測試傳感器融合試驗台,使用:

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

多個測試平台

配置文件中可以包含多個測試平台。最常見的組合是同時擁有平板電腦測試平台和傳感器融合測試平台。

以下是一個示例config.yml與兩個平板和傳感器融合實驗平台文件。

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

手動測試

手動測試繼續安卓12.支持然而,測試平台必須確定這樣測試與關鍵字MANUAL在測試平台的名稱。此外,測試平台不能包含平板電腦 ID。

以下是一個示例config.yml用於手動測試文件。

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

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

無平板測試場景

場景0和現場5測試是可以做到的TEST_BED_TABLET_SCENESTEST_BED_MANUAL 。然而,如果測試是在做TEST_BED_TABLET_SCENES ,平板電腦必須連接並且即使平板電腦並不因為測試類設置受讓人用於平板電腦的序列ID值的平板電腦序列ID必須是有效的。

運行單個測試

單獨測試只能用於調試目的,因為它們的結果不報運行CTS驗證。因為config.yml在為命令行的文件無法被覆蓋camerascene ,這些參數必須在正確的config.yml為所指的個人測試文件。此外,如果在配置文件中不止一個測試平台,您必須指定的測試床--test_bed標誌。例如:

python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES

測試工件

在 Android 12 中,Camera ITS 的測試工件的存儲方式與 Android 11 或更低版本類似,但有以下變化:

  • 測試工件/tmp目錄有CameraITS_前置到為了清楚起見,8個字符的隨機串。
  • 測試輸出和錯誤都存儲在test_log.DEBUG每個測試,而不是test_name_stdout.txttest_name_stderr.txt
  • 從每個單獨測試DUT和平板logcats是存儲在/tmp/CameraITS_########目錄簡化了調試要求調試3A問題的所有信息都會被記錄。

測試更改

在 Android 12 中,平板電腦場景是 PNG 文件而不是 PDF 文件。使用 PNG 文件可以讓更多平板電腦模型正確顯示場景。

場景0/test_jitter.py

test_jitter測試物理隱藏攝像機Android的12運行。

場景1_1/test_black_white.py

對於Android的12, test_black_white既有的功能test_black_whitetest_channel_saturation

下表描述了 Android 11 中的兩個單獨測試。

測試名稱第一 API 級別斷言
場景1_1/test_black_white.py全部短曝光,低增益 RGB 值 ~[0, 0, 0]
長時間曝光,高增益 RGB 值 ~[255, 255, 255]
scene1_1/test_channel_saturation.py 29減少對 [255, 255, 255] 差異的容忍度,以消除白色圖像中的色調。

下表描述了 Android 12 中的合併測試,scene1_1/test_black_white.py。

測試名稱第一 API 級別斷言
場景1_1/test_black_white.py全部短曝光,低增益 RGB 值 ~[0, 0, 0]
長時間曝光、高增益 RGB 值 ~[255, 255, 255] 和降低值之間的容差以消除白色圖像中的色調。

scene1_1/test_burst_sameness_manual.py

test_burst_sameness_manual測試物理隱藏攝像機Android的12運行。

scene1_2/test_tonemap_sequence.py

test_tonemap_sequence測試對Android的12 LIMITED相機運行。

場景1_2/test_yuv_plus_raw.py

test_yuv_plus_raw於Android的12個物理隱藏攝像機試運行。

scene2_a/test_format_combos.py

test_format_combos測試對Android的12 LIMITED相機運行。

場景3/test_flip_mirror.py

test_flip_mirror測試對Android的12 LIMITED相機運行。

場景4/test_aspect_ratio_and_crop.py

尋找在圈子scene4/test_aspect_ratio_and_crop.py於Android的12被重構。

早期的 Android 版本使用了一種方法,該方法涉及在父輪廓(正方形)內使用大小和顏色過濾器查找子輪廓(圓)。機器人12使用的是涉及尋找所有輪廓,然後通過發現是最circlish特徵濾波的方法。要在顯示器上篩選出偽圓,需要一個最小的輪廓區域,圓的輪廓必須是黑色的。

輪廓及其選擇標準如下圖所示。

輪廓和選擇標準的概念圖

圖1的輪廓和選擇標準的概念圖

Android 12 方法更簡單,可用於解決某些平板電腦中的邊界框剪切問題。出於調試目的記錄所有候選圈。

在Android中12,作物試驗進行FULLLEVEL3設備。機器人11或更低的版本跳過作物測試斷言FULL設備。

下表列出了用於斷言test_aspect_ratio_and_crop.py對應於一個給定的設備級和第一API水平。

設備級別第一 API 級別斷言
有限的全部縱橫比
4:3、16:9、2:1 格式的 FoV
滿的< 31縱橫比
4:3、16:9、2:1 格式的 FoV
滿的≥ 31莊稼
縱橫比
4:3、16:9、2:1 格式的 FoV
3級全部莊稼
縱橫比
4:3、16:9、2:1 格式的 FoV

場景4/test_multi_camera_alignment.py

該方法undo_zoom()為YUV捕獲在scene4/test_multi_camera_alignment.py被更準確地重構為帳戶用於裁剪上不匹配,捕獲的寬高比傳感器。

Android 11 Python 2 代碼

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

Android 12 Python 3 代碼

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

sensor_fusion/test_sensor_fusion.py

在 Android 12 中,為傳感器融合測試添加了檢測圖像中的特徵的方法。

在低於 Android 12 的版本中,整個圖像用於找到最好的 240 個特徵,然後將其屏蔽到中心 20% 以避免滾動快門效應,最低特徵要求為 30 個特徵。

如果此方法發現的特徵不足,Android 12 先將特徵檢測區域屏蔽到中心 20%,並將最大特徵限制為最小特徵要求的兩倍。

下圖顯示了 Android 11 和 Android 12 功能檢測之間的區別。提高最小特徵要求閾值會導致檢測到質量差的特徵並對測量產生負面影響。

Android 11 和 Android 12 sensor_fusion 特徵檢測在特徵檢測上的區別

圖2.差異特徵檢測的Android 11和Android 12之間

新測試

Scene0/test_solid_color_test_pattern.py

一個新的測試, test_solid_color_test_pattern ,是Android 12啟用該試驗對所有攝像機啟用和下面的表中描述。

場景測試名稱第一 API 級別描述
0 test_solid_color_test_pattern 31確認純色圖像輸出和圖像顏色可編程性。

必須啟用純色測試圖案才能支持相機隱私模式。所述test_solid_color_test_pattern測試證實與由選擇的模式定義的顏色的純色YUV圖像輸出,並且根據規格圖像顏色變化。

參數

  • cameraPrivacyModeSupport :確定是否攝像機支持隱私模式。
  • android.sensor.testPatternMode :設置測試圖案模式。本次測試使用SOLID_COLOR
  • android.sensor.testPatternData :設置R,GR,GB,G測試圖案值測試圖案模式。

對於純色測試圖案的說明,請參見SENSOR_TEST_PATTERN_MODE_SOLID_COLOR

方法

為設置的參數捕獲 YUV 幀並驗證圖像內容。測試圖案直接從圖像傳感器輸出,因此不需要特定場景。如果PER_FRAME_CONTROL被支撐,單個YUV幀被捕獲對於每個測試設置。如果PER_FRAME_CONTROL不支持,四幀僅與分析,以最大限度地提高測試覆蓋率的最後一幀捕獲LIMITED相機。

YUV捕獲被設置為完全飽和的BLACKWHITEREDGREENBLUE測試圖案。由於測試模式定義是根據傳感器 Bayer 模式定義的,因此必須為每種顏色設置顏色通道,如下表所示。

顏色測試模式數據 (RGGB)
黑色的(0, 0, 0, 0)
白色的(1, 1, 1, 1)
紅色的(1, 0, 0, 0)
綠色(0, 1, 1, 0)
藍色(0, 0, 0, 1)

斷言表

下表描述了測試斷言test_solid_color_test_pattern.py

相機
第一 API 級別
相機類型顏色斷言
31拜耳黑、白、紅、綠、藍
31單核細胞增多症黑,白
< 31拜耳/單聲道黑色的

性能等級測試

scene2_c/test_camera_launch_perf_class.py

使用scene2_c 人臉場景驗證前後主攝像頭的攝像頭啟動時間均小於500 毫秒。

scene2_c/test_jpeg_capture_perf_class.py

驗證具有scene2_c 面部場景的前後主攝像頭的1080p JPEG 捕獲延遲小於1 秒。