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

Android 12 sürümüne bir dizi Kamera ITS değişikliği dahildir. Bu sayfa, dört geniş kategoriye giren değişiklikleri özetlemektedir:

Python 3'e yeniden düzenleme

Ocak 2020'de Python 2.7'nin kullanımdan kaldırılması nedeniyle, Camera ITS kod tabanının tamamı Python 3'e 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 önceki sürümleriyle aynı kalır ve Python 3'e yeniden düzenlenir.

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

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ği ile yeniden düzenlenmiştir:

  • 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

Mobly 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 bkz. google/mobly .

config.yml dosyaları

Mobly çerçevesiyle, test edilen bir cihaz (DUT) ve its_base_test sınıfında bir grafik tableti kurabilirsiniz. Mobly test yatağı oluşturmak için bir config.yml (YAML) dosyası kullanılır. Bu yapılandırma dosyası içinde, örneğin bir tablet ve bir sensör füzyonu test yatağı gibi birden fazla test yatağı yapılandırılabilir. Her test yatağı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 test sınıfında geçirilir. Ortak test parametre 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 yatağı adında TABLET anahtar sözcüğü bulunmalıdır. Başlatma sırasında Mobly test çalıştırıcısı TestParams başlatır ve bunları ayrı testlere iletir.

Aşağıdaki, tablet tabanlı çalıştırmalar için örnek bir config.yml dosyasıdı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 yatağı, tools/run_all_tests.py kullanılarak çağrılabilir. Komut satırı değerleri yoksa testler config.yml dosya değerleriyle çalışır. Ek olarak, Android 11 veya önceki sürümlere benzer komutları kullanarak komut satırında camera ve scene yapılandırma dosyası değerlerini 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 sözcüğünü içermelidir. Doğru test ortamı, test edilen sahneler tarafından belirlenir. Android 12, sensör füzyonu için hem Arduino hem de Canakit denetleyicilerini destekler.

Aşağıdaki, sensör füzyonu çalıştırmaları için örnek bir config.yml dosyasıdı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üzyonu test donanımıyla sensör füzyonu testlerini çalıştırmak için şunları kullanın:

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

Çoklu test yatakları

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

Aşağıda hem tablet hem de sensör füzyonu test yataklarına sahip ö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

Manüel test, Android 12'de desteklenmeye devam etmektedir. Ancak, test yatağı, test yatağı adındaki MANUAL anahtar kelimesiyle testi olduğu gibi tanımlamalıdır. Ayrıca, test yatağı 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

Sahneleri tabletsiz test etme

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

Bireysel testler yapmak

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

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

Test yapıtları

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

  • Test eseri /tmp dizininde, netlik için 8 karakterlik rastgele dizenin önüne CameraITS_ eklenmiştir.
  • Test çıktısı ve hatalar, her test için test_name_stdout.txt ve test_log.DEBUG yerine test_name_stderr.txt dosyasında saklanır.
  • Her bir testin DUT ve tablet logcat'leri /tmp/CameraITS_######## dizininde saklanır, bu da 3A sorunlarının hatalarını ayıklamak için gereken tüm bilgiler günlüğe kaydedilirken hata ayıklamayı kolaylaştırır.

Test değişiklikleri

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 bir şekilde görüntülemesini sağlar.

Scene0/test_jitter.py

test_jitter testi, Android 12'de 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 sahiptir.

Aşağıdaki tablo, Android 11'deki iki ayrı testi açıklamaktadır.

Test adı İlk API seviyesi iddialar
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ülerde renk tonunu ortadan kaldırmak için [255, 255, 255] farklılıklara karşı azaltılmış tolerans.

Aşağıdaki tabloda, Android 12'de birleştirilmiş test olan Scene1_1/test_black_white.py açıklanmaktadır.

Test adı İlk API seviyesi iddialar
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ında azaltılmış tolerans.

Scene1_1/test_burst_sameness_manual.py

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

Scene1_2/test_tonemap_sequence.py

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

Scene1_2/test_yuv_plus_raw.py

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

Scene2_a/test_format_combos.py

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

Scene3/test_flip_mirror.py

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

Scene4/test_aspect_ratio_and_crop.py

scene4/test_aspect_ratio_and_crop.py daire bulma, Android 12'de yeniden düzenlendi.

Daha önceki Android sürümleri, boyut ve renk filtreleriyle ana kontur (kare) içinde bir alt kontur (daire) bulmayı içeren bir yöntem kullanıyordu. Android 12, tüm konturları bulmayı ve ardından en dairesel olan özellikleri bularak filtrelemeyi içeren bir yöntem kullanır. Ekranda sahte daireleri taramak için minimum bir kontur alanı gereklidir ve dairenin konturunun siyah olması gerekir.

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ı ekran tabletlerinde sınırlayıcı kutu kırpma sorununu çözmeye çalışır. Tüm daire 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 önceki sürümleri, FULL cihazlar için kırpma testi iddialarını atlar.

Aşağıdaki tablo, belirli bir aygıt düzeyine ve birinci API düzeyine karşılık gelen test_aspect_ratio_and_crop.py için iddiaları listeler.

Cihaz seviyesi İlk API seviyesi iddialar
SINIRLI TÜM en boy oranı
4:3, 16:9, 2:1 biçimleri için FoV
TAM DOLU < 31 en boy oranı
4:3, 16:9, 2:1 biçimleri için FoV
TAM DOLU ≥ 31 Mahsul
en boy oranı
4:3, 16:9, 2:1 biçimleri için FoV
3. SEVİYE TÜM Mahsul
en boy oranı
4:3, 16:9, 2:1 biçimleri için FoV

Scene4/test_multi_camera_alignment.py

scene4/test_multi_camera_alignment.py içindeki YUV yakalamaları için undo_zoom() yöntemi, yakalamanın en boy oranıyla eşleşmeyen sensörlerde kırpmayı daha doğru bir şekilde hesaba katmak için 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

sensor_fusion/test_sensor_fusion.py

Android 12'de, sensör füzyon testi için görüntülerdeki özellikleri algılamaya yönelik bir yöntem eklenir.

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 daha sonra minimum özellik gereksinimi 30 özellik olmak üzere panjur efektlerinden kaçınmak için %20 merkeze maskelenir.

Bu yöntemle bulunan özellikler yetersizse, Android 12, özellik algılama alanını önce %20 ortalayacak şekilde maskeler ve maksimum özellikleri, minimum özellik gereksiniminin iki katı ile sınırlar.

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

Android 11 ve Android 12 sensor_fusion özellik algılama arasındaki özellik algılama farkı

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

Yeni testler

Scene0/test_solid_color_test_pattern.py

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

Faliyet alani, sahne Test adı İlk API seviyesi 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 onaylar.

Kamera gizlilik modunu desteklemek için düz renk test desenleri etkinleştirilmelidir. test_solid_color_test_pattern testi, seçilen model tarafından tanımlanan renkle düz renk YUV görüntü çıktısını 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 deseni modunu ayarlar. Bu test SOLID_COLOR kullanır.
  • android.sensor.testPatternData : Test deseni modu için R, Gr, Gb, G test deseni değerlerini ayarlar.

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

Yöntem

YUV çerçeveleri, ayarlanan parametreler için yakalanır ve görüntü içeriği doğrulanır. Test deseni doğrudan görüntü sensöründen çıkar, bu nedenle belirli bir sahne gerekmez. 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 modeline göre olduğundan, renk kanalları aşağıdaki tabloda gösterildiği gibi her renk için ayarlanmalıdır.

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)

iddia tablosu

Aşağıdaki tablo, test_solid_color_test_pattern.py için test iddialarını açıklar.

Kamera
İlk API seviyesi
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şlangıcının 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.