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

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

Python 3'e yeniden düzenleme

Ocak 2020'de Python 2.7'nin desteğinin sonlandırılması nedeniyle Kamera ITS kod tabanının tamamı Python 3'e yeniden tasarlandı. 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ümlerle aynı kalır ve Python 3'e göre yeniden düzenlenir.

Tüm bağımsız testler yeniden yapılandırılır ve tests/its_base_test.py içinde tanımlanan yeni test kurulumu sınıfını kullanır. Test adlarının ve işlevlerinin çoğu aynı kalır. Android 12'de artık tüm testler kendi sahnelerini yükler. Her test için sahne yükleme işlemi genel test süresini artırsa da tek tek testlerde hata ayıklama işlemini sağ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 yapılandırıldı:

  • 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 durumları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çevesi ile its_base_test sınıfında bir test cihazı (DUT) ve grafik tableti oluşturabilirsiniz. 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ı (ör. tablet ve sensör füzyonu test ortamı) yapılandırılabilir. Her test ortamının denetleyici bölümünde, test çalıştırıcı için uygun Android cihazları tanımlamak üzere device_ids belirtebilirsiniz. Cihaz kimliklerine ek olarak test sınıfına tablet brightness, chart_distance, debug_mode, camera_id ve scene_id gibi diğer parametreler de iletilir. Yaygın 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)

Tablete dayalı test

Tablet tabanlı test için test ortamı adında TABLET anahtar kelimesi bulunmalıdır. Mobly test çalıştırıcı, başlatma sırasında TestParams öğelerini başlatır ve 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 ortamı tools/run_all_tests.py kullanılarak çağrılabilir. Komut satırı değeri yoksa testler config.yml dosya değerleriyle çalıştırılır. Ayrıca, 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.

Örnek:

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 birleştirme testi için test ortamı adı SENSOR_FUSION anahtar kelimesini içermelidir. Doğru test ortamı, test edilen sahnelere göre belirlenir. Android 12, hem Arduino hem de Canakit sensör birleştirme kontrol cihazlarını destekler.

Aşağıda, sensör birleştirme ç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 birleştirme test düzeneği ile sensör birleştirme testleri ç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

Birden fazla test ortamı

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

Aşağıda, hem tablet hem de sensör füzyonu test ortamları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 ortamı, test ortamındaki MANUAL anahtar kelimesiyle testin bu şekilde yapıldığını tanımlamalıdır. Ayrıca test ortamına tablet kimliği eklenemez.

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

Tablet olmadan 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 tablet bağlı olmalıdır ve test sınıfı kurulumu tablet için seri numarası değerini atadığından tablet kullanılmasa bile tablet seri numarası geçerli olmalıdır.

Ayrı testler çalıştırma

Sonuçları CTS Doğrulayıcı'ya bildirilmediğinden, bağımsız testler yalnızca hata ayıklama amacıyla çalıştırılabilir. config.yml dosyaları, camera ve scene için komut satırında üzerine yazılamayacağından, söz konusu testin config.yml dosyasında bu parametreler doğru olmalıdır. Ayrıca, yapılandırma dosyasında birden fazla test ortamı varsa test ortamını --test_bed işaretiyle belirtmeniz gerekir. Örnek:

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'si test yapıları Android 11 veya önceki sürümlere benzer şekilde depolanır ancak aşağıdaki değişikliklerle:

  • Test yapı /tmp dizininde, netlik sağlamak için 8 karakterli rastgele dizeye CameraITS_ eklenmiştir.
  • Test çıkışı ve hataları, her test için test_name_stdout.txt ve test_name_stderr.txt yerine test_log.DEBUG içinde depolanır.
  • Her testin DUT ve tablet günlük günlükleri /tmp/CameraITS_######## dizininde saklanır. 3A sorunlarını düzeltmek için gereken tüm bilgiler günlüğe kaydedildiğinden hata ayıklama işlemi basitleştirilir.

Değişiklikleri test etme

Android 12'de tablet sahneleri PDF dosyası yerine PNG dosyası şeklindedir. 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'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şlevlerine sahiptir.

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

Test adı İlk API seviyesi Iddialar
scene1_1/test_black_white.py TÜMÜ Kısa pozlama, düşük kazanç RGB değerleri ~[0, 0, 0]
Uzun pozlama, yüksek kazanç 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 (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 resimlerdeki renk tonunu ortadan kaldırmak için uzun pozlama, yüksek kazançlı RGB değerleri ~[255, 255, 255] ve 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'de 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'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

Android 12'de scene4/test_aspect_ratio_and_crop.py'te çevre bulma işlemi yeniden yapılandırıldı.

Önceki Android sürümlerinde, boyut ve renk filtreleriyle ana kontur (kare) içinde bir alt kontur (daire) bulma yöntemi kullanılıyordu. Android 12, tüm konturları bulup en yuvarlak özellikleri bularak filtreleme yöntemini kullanır. Ekrandaki sahte daireleri filtrelemek için minimum bir kontur alanı gerekir ve dairenin konturu siyah olmalıdır.

Konturların ve seçim ölçütlerinin gösterildiği resim aşağıdadır.

Eşik değerleri ve seçim ölçütlerinin kavramsal çizimi

Şekil 1. Eşik değerleri ve seçim ölçütlerinin kavramsal çizimi

Android 12 yöntemi daha basittir ve bazı ekran tabletlerinde sınır kutusu kırpma sorununu çözmek için kullanılı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ü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 için iddialar listelenmiştir.

Cihaz düzeyi İlk API seviyesi Iddialar
SINIRLI TÜMÜ En boy oranı
4:3, 16:9, 2:1 biçimleri için görüş alanı
TAM < 31 En boy oranı
4:3, 16:9, 2:1 biçimleri için görüş alanı
TAM ≥ 31 Kırpma
En boy oranı
4:3, 16:9, 2:1 biçimleri için görüş alanı
LEVEL3 TÜMÜ Kırpma
En boy oranı
4:3, 16:9, 2:1 biçimleri için görüş alanı

scene4/test_multi_camera_alignment.py

scene4/test_multi_camera_alignment.py içindeki YUV yakalama işlemleri için undo_zoom() yöntemi, yakalamanın en boy oranına uymayan sensörlerde kırpma işlemini daha doğru şekilde hesaba katmak için yeniden yapılandırıldı.

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 birleştirme testi için resimlerdeki özellikleri algılamaya yönelik bir yöntem eklendi.

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 koşulu 30 özellik olmak üzere, kaydırma deklanşör efektlerini önlemek için merkezin% 20'sinde maskelenir.

Bu yöntemle bulunan özellikler yeterli değilse Android 12, özellik algılama alanını önce merkeze doğru% 20 maskeler ve maksimum özelliği minimum özellik koşulunun iki katına sınırlar.

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

Android 11 ile Android 12 arasındaki özellik algılama farkıyla ilgili bilgi

Ş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 (test_solid_color_test_pattern) etkinleştirildi. Tüm kameralarda etkinleştirilen bu test aşağıdaki tabloda açıklanmıştır.

Sahne Test adı İlk API seviyesi Açıklama
0 test_solid_color_test_pattern 31 Düz renkli resim çıkışını ve resim renginin programlanabilirliğini onaylar.

Kamera gizlilik modunu desteklemek için tek renkli test desenleri etkinleştirilmelidir. test_solid_color_test_pattern testi, seçilen desen tarafından tanımlanan renkle tek renkli YUV resim çıkışını ve resim renginin spesifikasyona göre değiştiğini onaylar.

Parametreler

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

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

Yöntem

Ayarlanan parametreler için YUV kareleri yakalanır ve resim 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 dört kare yakalanır ve yalnızca son kare analiz edilir.

YUV yakalamaları, tamamen doygun BLACK, WHITE, RED, GREEN ve BLUE test desenlerine ayarlanır. Test kalıbı tanımı sensör Bayer kalıbına göre olduğundan renk kanalları her renk için aşağıdaki tabloda gösterildiği gibi 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)

İ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 türü Beyan edilen renkler
31 Bayer SİYAH, BEYAZ, KIRMIZI, YEŞİL, MAVİ
31 TEK RENK 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 sahnesinde hem ön hem de arka birincil kameraların kamera başlatma süresinin 500 ms'den kısa olduğunu doğrular.

scene2_c/test_jpeg_capture_perf_class.py

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