Android 12 Kamera Görüntüsü Test Paketi sürüm notları

Android 12 sürümünde bir dizi Kamera ITS değişikliği yer alıyor. Bu sayfada dört geniş kategoriye ayrılan değişiklikler özetlenmektedir:

Python 3'ü yeniden düzenleme

Python 2.7'nin Ocak 2020'de kullanımdan kaldırılması nedeniyle, Camera ITS kod tabanının tamamı Python 3'e göre yeniden düzenlendi. Android 12'de aşağıdaki Python sürümleri ve kitaplıkları gereklidir:

Ana test başlatıcısı, tools/run_all_tests.py , Android 11 veya daha düşük sürümlerle aynı kalır ve Python 3'e yeniden düzenlenir.

Tüm bireysel testler yeniden düzenlenir ve tests/its_base_test.py dosyasında tanımlanan yeni test kurulum sınıfını kullanır. Çoğu test adı ve işlevi aynı kalır. Android 12'de artık tüm bireysel testler sahnelerini yüklüyor. Her test için sahne yükleme genel test süresini artırırken, bireysel testlerde hata ayıklamaya da olanak tanır.

Bireysel test değişiklikleri hakkında daha fazla bilgi için bkz. Test değişiklikleri .

Aşağıdaki Python modülleri bir ad değişikliğiyle yeniden düzenlendi:

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

Mobil test çerçevesinin benimsenmesi

Mobly, özel donanım kurulumlarına sahip birden fazla cihaz gerektiren test senaryolarını destekleyen Python tabanlı bir test çerçevesidir. Camera ITS, testlerin daha iyi kontrol edilmesini ve günlüğe kaydedilmesini sağlamak için Mobly test altyapısını kullanır.

Camera ITS, testlerin daha iyi kontrol edilmesini ve günlüğe kaydedilmesini sağlamak için Mobly test altyapısını kullanır. Mobly, özel donanım kurulumlarına sahip birden fazla cihaz gerektiren test senaryolarını destekleyen Python tabanlı bir test çerçevesidir. Mobly hakkında daha fazla bilgi için google/mobly'ye bakın.

config.yml dosyaları

Mobly çerçevesiyle, test edilmekte olan bir cihazı (DUT) ve its_base_test sınıfında bir grafik tableti ayarlayabilirsiniz. Mobly test ortamı oluşturmak için bir config.yml (YAML) dosyası kullanılır. Bu yapılandırma dosyasında birden fazla test ortamı (örneğin, bir tablet ve bir sensör füzyon test ortamı) yapılandırılabilir. Her test ortamının denetleyici bölümünde, test çalıştırıcısına uygun Android cihazlarını tanımlamak için device_ids belirtebilirsiniz. Cihaz kimliklerine ek olarak tablet brightness , chart_distance , debug_mode , camera_id ve scene_id gibi diğer parametreler de test sınıfında iletilir. Ortak test parametresi değerleri şunlardır:

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 tabanlı test

Tablet tabanlı testler için test ortamı adında TABLET anahtar sözcüğünün bulunması gerekir. Başlatma sırasında Mobly test çalıştırıcısı TestParams başlatır ve bunları bireysel testlere aktarır.

Aşağıda tablet tabanlı çalıştırmalar için örnek bir config.yml dosyası bulunmaktadır.

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

Test ortamı, tools/run_all_tests.py kullanılarak çağrılabilir. Hiçbir komut satırı değeri yoksa testler config.yml dosyası değerleriyle çalıştırılır. Ek olarak, Android 11 veya önceki sürümlere benzer komutları kullanarak camera ve scene yapılandırma dosyası değerlerini komut satırından geçersiz kılabilirsiniz.

Örneğin:

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

Sensör füzyon testi

Sensör füzyon testi için test yatağı adı SENSOR_FUSION anahtar kelimesini içermelidir. Doğru test ortamı, test edilen sahnelere göre belirlenir. Android 12 , sensör füzyonu için hem Arduino hem de Canakit denetleyicilerini destekler.

Aşağıda sensör füzyonu çalıştırmaları için örnek bir config.yml dosyası bulunmaktadır.

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

Sensör füzyon testlerini sensör füzyon test donanımıyla çalıştırmak için şunu kullanın:

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

Çoklu test ortamları

Yapılandırma dosyasına birden fazla test ortamı dahil edilebilir. En yaygın kombinasyon hem tablet test ortamına hem de sensör füzyon test ortamına sahip olmaktır.

Aşağıda hem tablet hem de sensör füzyon test ortamlarını içeren örnek bir config.yml dosyası bulunmaktadır.

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

Manuel test

Manuel test, Android 12'de desteklenmeye devam etmektedir. Bununla birlikte, test yatağının, test yatağı adında MANUAL anahtar sözcüğüyle testi bu şekilde tanımlaması gerekir. Ayrıca test ortamı bir tablet kimliği içeremez.

Aşağıda manuel test için örnek bir config.yml dosyası bulunmaktadır.

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

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

Tabletler olmadan test sahneleri

Sahne 0 ve sahne 5 için testler TEST_BED_TABLET_SCENES veya TEST_BED_MANUAL ile yapılabilir. Ancak test TEST_BED_TABLET_SCENES ile yapılıyorsa, test sınıfı kurulumu tabletin seri kimlik değerini atadığından tabletin bağlanması ve tablet kullanılmasa bile tablet seri kimliğinin geçerli olması gerekir.

Bireysel testleri çalıştırın

Bireysel testler yalnızca hata ayıklama amacıyla çalıştırılabilir çünkü sonuçları CTS Verifier'a raporlanmaz. camera ve scene komut satırında config.yml dosyalarının üzerine yazılamadığından, söz konusu test için bu parametrelerin config.yml dosyasında doğru olması gerekir. Ek olarak, yapılandırma dosyasında birden fazla test ortamı varsa test ortamını --test_bed bayrağıyla belirtmeniz gerekir. Örneğin:

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

Yapıları test edin

Android 12'de, Camera ITS'ye yönelik test yapıları Android 11 veya önceki sürümlere benzer şekilde ancak aşağıdaki değişikliklerle depolanır:

  • Test yapıtı /tmp dizininde, netlik sağlamak amacıyla 8 karakterlik rastgele dizenin başına CameraITS_ eklenmiştir.
  • Test çıktısı ve hatalar, her test için test_name_stdout.txt ve test_name_stderr.txt yerine test_log.DEBUG dosyasında saklanır.
  • Her bir testin DUT ve tablet logcat'leri /tmp/CameraITS_######## dizininde depolanır ve 3A sorunlarında hata ayıklamak için gereken tüm bilgiler günlüğe kaydedildiğinden hata ayıklamayı basitleştirir.

Değişiklikleri test edin

Android 12'de tablet sahneleri PDF dosyaları yerine PNG dosyalarıdır. PNG dosyalarının kullanılması, daha fazla tablet modelinin sahneleri düzgün şekilde görüntülemesini sağlar.

scene0/test_jitter.py

test_jitter testi, Android 12'deki fiziksel gizli kameralarda çalışır.

scene1_1/test_black_white.py

Android 12 için test_black_white , hem test_black_white hem de test_channel_saturation işlevselliğine sahiptir.

Aşağıdaki tabloda Android 11'deki iki ayrı test açıklanmaktadır.

Test adı İlk API düzeyi İddialar
scene1_1/test_black_white.py TÜM Kısa pozlama, düşük kazançlı RGB değerleri ~[0, 0, 0]
Uzun pozlama, yüksek kazançlı RGB değerleri ~[255, 255, 255]
scene1_1/test_channel_saturation.py 29 Beyaz görüntülerdeki renk tonunu ortadan kaldırmak için [255, 255, 255] farklarındaki tolerans azaltıldı.

Aşağıdaki tabloda Android 12'deki birleştirilmiş test ( scene1_1/test_black_white.py) açıklanmaktadır.

Test adı İlk API düzeyi İddialar
scene1_1/test_black_white.py TÜM Kısa pozlama, düşük kazançlı RGB değerleri ~[0, 0, 0]
Beyaz görüntülerde renk tonunu ortadan kaldırmak için uzun pozlama, yüksek kazançlı RGB değerleri ~[255, 255, 255] ve değerler arasındaki azaltılmış tolerans.

scene1_1/test_burst_sameness_manual.py

test_burst_sameness_manual testi, Android 12'deki fiziksel gizli kameralarda çalışır.

scene1_2/test_tonemap_sequence.py

test_tonemap_sequence testi, Android 12'deki SINIRLI kameralarda çalışır.

scene1_2/test_yuv_plus_raw.py

test_yuv_plus_raw testi, Android 12'deki fiziksel gizli kameralarda çalışır.

scene2_a/test_format_combos.py

test_format_combos testi, Android 12'deki SINIRLI kameralarda çalışır.

scene3/test_flip_mirror.py

test_flip_mirror testi, Android 12'deki SINIRLI kameralarda çalışır.

scene4/test_aspect_ratio_and_crop.py

scene4/test_aspect_ratio_and_crop.py dosyasındaki daireleri bulma, Android 12'de yeniden düzenlendi.

Daha önceki Android sürümleri, boyut ve renk filtreleriyle ana konturun (kare) içinde bir alt konturun (daire) bulunmasını içeren bir yöntem kullanıyordu. Android 12, tüm konturları bulmayı ve ardından en çembersel özellikleri bularak filtrelemeyi içeren bir yöntem kullanıyor. Ekrandaki sahte daireleri taramak için minimum bir kontur alanı gereklidir ve dairenin konturu siyah olmalıdır.

Konturlar ve seçim kriterleri aşağıdaki resimde gösterilmektedir.

Konturların kavramsal çizimi ve seçim kriterleri

Şekil 1. Konturların kavramsal çizimi ve seçim kriterleri

Android 12 yöntemi daha basittir ve bazı ekranlı tabletlerde sınırlayıcı kutu kırpmasıyla ilgili sorunu çözmeye çalışır. Tüm çevre adayları hata ayıklama amacıyla günlüğe kaydedilir.

Android 12'de kırpma testi FULL ve LEVEL3 cihazlar için çalıştırılır. Android 11 veya daha düşük sürümler, FULL cihazlar için kırpma testi iddialarını atlar.

Aşağıdaki tabloda, belirli bir cihaz düzeyine ve ilk API düzeyine karşılık gelen test_aspect_ratio_and_crop.py iddiaları listelenmektedir.

Cihaz seviyesi İlk API düzeyi İddialar
SINIRLI TÜM En boy oranı
4:3, 16:9, 2:1 formatları için FoV
TAM DOLU < 31 En boy oranı
4:3, 16:9, 2:1 formatları için FoV
TAM DOLU ≥ 31 Mahsul
En boy oranı
4:3, 16:9, 2:1 formatları için FoV
3. SEVİYE TÜM Mahsul
En boy oranı
4:3, 16:9, 2:1 formatları için FoV

scene4/test_multi_camera_alignment.py

scene4/test_multi_camera_alignment.py dosyasındaki YUV yakalamaları için undo_zoom() yöntemi, yakalamanın en boy oranıyla eşleşmeyen sensörlerdeki kırpmayı daha doğru bir şekilde hesaba katacak şekilde yeniden düzenlendi.

Android 11 Python 2 kodu

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 kodu

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

sensör_füzyonu/test_sensor_fusion.py

Android 12'de sensör füzyon testi için görüntülerdeki özellikleri tespit etmeye yönelik bir yöntem eklendi.

Android 12'den daha düşük sürümlerde, görüntünün tamamı en iyi 240 özelliği bulmak için kullanılır ve minimum özellik gereksinimi 30 özellik olmak üzere panjur etkilerini önlemek için merkeze %20 oranında maskelenir.

Bu yöntemle bulunan özellikler yetersizse, Android 12 öncelikle özellik algılama alanını %20 merkeze maskeliyor ve maksimum özellikleri minimum özellik gereksiniminin iki katı ile sınırlandırıyor.

Aşağıdaki resimde Android 11 ile Android 12 özellik algılama arasındaki fark gösterilmektedir. Minimum özellik gereksinimi eşiğinin yükseltilmesi, düşük kaliteli özelliklerin tespit edilmesine neden olur ve ölçümleri olumsuz etkiler.

Android 11 ile Android 12 arasındaki özellik algılama farkı Sensor_fusion özellik algılama

Şekil 2. Android 11 ile Android 12 arasındaki özellik algılama farkı

Yeni testler

scene0/test_solid_color_test_pattern.py

Android 12 için yeni bir test olan test_solid_color_test_pattern etkinleştirildi. Bu test tüm kameralar için etkinleştirildi ve aşağıdaki tabloda açıklanıyor.

Sahne Test adı İlk API düzeyi Tanım
0 test_solid_color_test_pattern 31 Düz renkli görüntü çıktısını ve görüntü rengi programlanabilirliğini doğrular.

Kamera gizlilik modunu desteklemek için düz renk test desenleri etkinleştirilmelidir. test_solid_color_test_pattern testi, düz renkli YUV görüntü çıktısını seçilen desenle tanımlanan renkle doğrular ve görüntü rengi spesifikasyona göre değişir.

Parametreler

  • cameraPrivacyModeSupport : Kameranın gizlilik modunu destekleyip desteklemediğini belirler.
  • android.sensor.testPatternMode : Test modeli modunu ayarlar. Bu test SOLID_COLOR kullanır.
  • android.sensor.testPatternData : Test modeli modu için R, Gr, Gb, G test modeli değerlerini ayarlar.

Düz renk test modelinin açıklaması için bkz. SENSOR_TEST_PATTERN_MODE_SOLID_COLOR .

Yöntem

Ayarlanan parametreler için YUV çerçeveleri yakalanır ve görüntü içeriği doğrulanır. Test deseninin çıkışı doğrudan görüntü sensöründen alınır, dolayısıyla özel bir sahneye gerek yoktur. PER_FRAME_CONTROL destekleniyorsa test edilen her ayar için tek bir YUV çerçevesi yakalanır. PER_FRAME_CONTROL desteklenmiyorsa, LIMITED kameralarda test kapsamını en üst düzeye çıkarmak için yalnızca son kare analiz edilerek dört kare yakalanır.

YUV yakalamaları tamamen doymuş BLACK , WHITE , RED , GREEN ve BLUE test modellerine ayarlanmıştır. Test deseni tanımı sensör Bayer desenine göre olduğundan, renk kanallarının aşağıdaki tabloda gösterildiği gibi her renk için ayarlanması gerekir.

Renk testPatternData (RGGB)
SİYAH (0, 0, 0, 0)
BEYAZ (1, 1, 1, 1)
KIRMIZI (1, 0, 0, 0)
YEŞİL (0, 1, 1, 0)
MAVİ (0, 0, 0, 1)

İddia tablosu

Aşağıdaki tabloda test_solid_color_test_pattern.py için test iddiaları açıklanmaktadır.

Kamera
İlk API düzeyi
Kamera tipi İddia edilen renkler
31 Bayer SİYAH, BEYAZ, KIRMIZI, YEŞİL, MAVİ
31 MONO SİYAH BEYAZ
< 31 Bayer/MONO SİYAH

Performans sınıfı testleri

scene2_c/test_camera_launch_perf_class.py

scene2_c yüz sahnesine sahip hem ön hem de arka birincil kameralar için kamera başlatma süresinin 500 ms'den az olduğunu doğrular.

scene2_c/test_jpeg_capture_perf_class.py

scene2_c yüz sahnesine sahip hem ön hem de arka birincil kameralar için 1080p JPEG yakalama gecikmesinin 1 saniyeden az olduğunu doğrular.