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

Android 12 sürümünde Camera ITS ile ilgili çeşitli değişiklikler yer alıyor. Bu sayfada, dört geniş kategoriye ayrılan değişiklikler özetlenmektedir:

Python 3'e yeniden düzenleme

Ocak 2020'de Python 2.7 desteğinin sonlandı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ı tools/run_all_tests.py, Android 11 veya önceki sürümlerdekiyle 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 kurulumu sınıfı kullanılır. Çoğu test adı ve işlevi aynı kalır. Android 12'de tüm bağımsız testler artık sahnelerini yüklüyor. Her test için sahne yükleme, genel test süresini artırsa da tek tek testlerde hata ayıklamayı mümkün kılar.

Tek tek test değişiklikleri hakkında daha fazla bilgi için Test değişiklikleri başlıklı makaleyi inceleyin.

Aşağıdaki Python modülleri, ad değişikliğiyle 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 durumlarını destekleyen Python tabanlı bir test çerçevesidir. Kamera ITS, testlerin daha iyi kontrol edilmesini ve günlüğe kaydedilmesini sağlamak için Mobly test altyapısını kullanır.

Kamera 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 adresini ziyaret edin.

config.yml dosyaları

Mobly çerçevesiyle, its_base_test sınıfında test edilen bir cihaz (DUT) ve bir grafik tableti ayarlayabilirsiniz. Mobly test yatağı oluşturmak için config.yml (YAML) dosyası kullanılır. Bu yapılandırma dosyasında birden fazla test yatağı yapılandırılabilir. Örneğin, bir tablet ve bir sensör füzyonu test yatağı. Her test yatağının denetleyici bölümünde, test çalıştırıcısı için uygun Android cihazları belirlemek üzere device_ids değerini belirtebilirsiniz. Test sınıfında cihaz kimliklerine ek olarak tablet brightness, chart_distance, debug_mode, camera_id ve scene_id gibi diğer parametreler de iletilir. Yaygın 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ı testlerde, test yatağı adında TABLET anahtar kelimesi bulunmalıdır. Başlatma sırasında Mobly test çalıştırıcısı TestParams başlatır ve bunları tek tek testlere iletir.

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

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ıştırılır. Ayrıca, Android 11 veya daha eski 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 birleştirme testi

Sensör füzyonu testi için test yatağı adı, SENSOR_FUSION anahtar kelimesini içermelidir. Doğru test yatağı, test edilen sahneler tarafından belirlenir. Android 12, sensör füzyonu için hem Arduino hem de Canakit kontrol cihazlarını destekler.

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

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 düzeneği ile sensör füzyonu testleri çalıştırmak için:

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

Birden fazla test yatağı

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

Aşağıda, hem tablet hem de sensör füzyonu test yataklarını içeren örnek bir config.yml dosyası verilmiştir.

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. Ancak test yatağı, test yatağı adında MANUAL anahtar kelimesiyle testi bu şekilde tanımlamalıdır. Ayrıca, test yatağı tablet kimliği içeremez.

Aşağıda, manuel test için örnek bir config.yml dosyası verilmiştir.

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

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

Tabletsiz sahneleri test etme

0. ve 5. sahneler 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, tablet için seri kimlik değerini atadığından tablet kullanılmasa bile tabletin bağlı olması ve tablet seri kimliğinin geçerli olması gerekir.

Ayrı testler çalıştırma

Sonuçları CTS Verifier'a bildirilmediğinden bağımsız testler yalnızca hata ayıklama amacıyla çalıştırılabilir. camera ve scene için 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. Ayrıca, yapılandırma dosyasında birden fazla test yatağı varsa --test_bed işaretini kullanarak test yatağını belirtmeniz gerekir. Örneğin:

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

Test yapıları

Android 12'de, Kamera ITS'ye yönelik test yapıları Android 11 veya önceki sürümlerde olduğu gibi depolanır ancak aşağıdaki değişiklikler yapılır:

  • Test yapısı /tmp dizinine, netlik için 8 karakterlik rastgele dizeye CameraITS_ eklenmiştir.
  • Test çıktısı ve hataları, test_name_stdout.txt ve test_name_stderr.txt yerine her test için test_log.DEBUG içinde saklanır.
  • Her bir testten elde edilen DUT ve tablet logcat'leri /tmp/CameraITS_######## dizininde saklanır. Bu sayede, 3A sorunlarını ayıklamak için gereken tüm bilgiler günlüğe kaydedildiğinden hata ayıklama işlemi kolaylaşır.

Değişiklikleri test etme

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östermesini 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'de test_black_white, hem test_black_white hem de test_channel_saturation işlevine sahiptir.

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

Test adı İlk API düzeyi Onaylar
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 resimlerdeki renk tonunu ortadan kaldırmak için [255, 255, 255] farklılıklarında tolerans azaltıldı.

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

Test adı İlk API düzeyi Onaylar
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] ve beyaz görüntülerdeki renk tonunu ortadan kaldırmak için değerler arasındaki tolerans azaltılır.

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 sayıda kamerada ç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 sayıda kamerada çalışır.

scene3/test_flip_mirror.py

test_flip_mirror testi, Android 12'deki SINIRLI sayıda kamerada çalışır.

scene4/test_aspect_ratio_and_crop.py

scene4/test_aspect_ratio_and_crop.py uygulamasında çevreleri bulma işlevi, Android 12'de yeniden düzenlendi.

Daha önceki Android sürümlerinde, boyut ve renk filtreleriyle ana konturun (kare) içinde bir alt kontur (daire) bulmayı içeren bir yöntem kullanılıyordu. Android 12, tüm konturları bulmayı ve ardından en yuvarlak olan özellikleri bulup filtrelemeyi içeren bir yöntem kullanır. Ekranda sahte dairelerin görünmesini engellemek için minimum kontur alanı gerekir ve dairenin konturu siyah olmalıdır.

Konturlar ve seçim ölçütleri aşağıdaki resimde gösterilmektedir.

Konturların ve seçim ölçütlerinin kavramsal çizimi

1. şekil. Konturların ve seçim ölçütlerinin kavramsal çizimi

Android 12 yöntemi daha basittir ve bazı ekran tabletlerde sınırlayıcı kutu kırpma sorununu çözmek için kullanılabilir. Tüm daire adayları, hata ayıklama amacıyla günlüğe kaydedilir.

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

Aşağıdaki tabloda, belirli bir cihaz seviyesine ve ilk API seviyesine karşılık gelen test_aspect_ratio_and_crop.py ile ilgili onaylar listelenmektedir.

Cihaz düzeyi İlk API düzeyi Onaylar
SINIRLI TÜMÜ En boy oranı
4:3, 16:9, 2:1 biçimleri için FoV
TAM < 31 En boy oranı
4:3, 16:9, 2:1 biçimleri için FoV
TAM ≥ 31 Kırpma
En boy oranı
4:3, 16:9, 2:1 biçimleri için FoV
LEVEL3 TÜMÜ Kırpma
En boy oranı
4:3, 16:9, 2:1 biçimleri için FoV

scene4/test_multi_camera_alignment.py

undo_zoom() yöntemi, yakalama işleminin en-boy oranıyla eşleşmeyen sensörlerdeki kırpma işlemini daha doğru şekilde hesaba katmak için scene4/test_multi_camera_alignment.py içinde YUV yakalama işlemleri 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ılama yöntemi eklenmiştir.

Android 12'den önceki sürümlerde, en iyi 240 özelliği bulmak için görüntünün tamamı kullanılır. Bu özellikler daha sonra, minimum özellik sayısı 30 olmak üzere, yuvarlanan deklanşör etkilerini önlemek için ortadaki% 20'lik kısımda maskelenir.

Bu yöntemle bulunan özellikler yetersizse Android 12, özellik algılama alanını önce ortadaki% 20'lik kısım olacak şekilde maskeler ve maksimum özellik sayısını minimum özellik gereksiniminin iki katıyla sınırlar.

Aşağıdaki resimde, Android 11 ve Android 12'deki özellik algılama arasındaki fark gösterilmektedir. Minimum özellik koşulu eşiğinin yükseltilmesi, düşük kaliteli özelliklerin algılanmasına ve ölçümlerin olumsuz etkilenmesine neden olur.

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ştirilmiştir ve aşağıdaki tabloda açıklanmıştır.

Sahne Test adı İlk API düzeyi Açıklama
0 test_solid_color_test_pattern 31 Düz renkli görüntü çıkışını ve görüntü rengi programlanabilirliğini onaylar.

Kamera gizlilik modunun desteklenmesi için düz renkli test desenlerinin etkinleştirilmesi gerekir. test_solid_color_test_pattern testi, seçilen desende tanımlanan renkle düz renk YUV görüntü çıkışını ve spesifikasyona göre görüntü rengi değişikliklerini onaylar.

Parametreler

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

Düz renkli test deseni açıklaması için SENSOR_TEST_PATTERN_MODE_SOLID_COLOR bölümüne bakın.

Yöntem

YUV kareleri, 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ıldığından belirli bir sahne gerekmez. PER_FRAME_CONTROL destekleniyorsa test edilen her ayar için tek bir YUV karesi 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 doygun BLACK, WHITE, RED, GREEN ve BLUE test desenlerine ayarlanır. Test deseni tanımı, sensör Bayer deseni başına 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)
Telsiz Ekipmanları Yönetmeliği (1, 0, 0, 0)
YEŞİL (0, 1, 1, 0)
MAVİ (0, 0, 0, 1)

Onaylama tablosu

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

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

Performans sınıfı testleri

scene2_c/test_camera_launch_perf_class.py

Hem ön hem de arka birincil kameralarda, sahne2_c yüz sahnesiyle kamera başlatmanın 500 ms'den kısa olduğunu doğrular.

scene2_c/test_jpeg_capture_perf_class.py

scene2_c yüz sahnesiyle hem ön hem de arka birincil kameralarda 1080p JPEG yakalama gecikmesinin 1 saniyeden az olduğunu doğrular.