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

Android 12 sürümünde Kamera ITS ile ilgili bir dizi değişiklik yer almaktadı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ı olan tools/run_all_tests.py, Android 11 veya önceki sürümlerle aynı olup Python 3 olarak yeniden düzenlendi.

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.

Bağımsız test değişiklikleri hakkında daha fazla bilgi için Değişiklikleri test etme konusuna bakın.

Aşağıdaki Python modülleri, 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

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 edilebilmesi ve günlüğe kaydedilmesi 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çevesiyle, its_base_test sınıfında test altındaki bir cihazı (DUT) ve grafik tableti kurabilirsiniz. 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 cihazının kumanda bölümünde, uygun Android cihazları test çalıştırıcıya tanımlamak için 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. Başlatma sırasında Mobly test çalıştırıcısı TestParams öğesini başlatır ve bağımsız 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 füzyon testi için test platformu 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 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ğı 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 olduğunu 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. camera ve scene için komut satırında config.yml dosyalarının ü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 bu, hata ayıklama işlemini kolaylaştırır.

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.

sahne1_1/test_siyah_beyaz.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ç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 (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.

sahne1_2/test_tonemap_sequence.py

test_tonemap_sequence testi, Android 12'deki LIMITED kamerada çalıştırılır.

scene1_2/test_yuv_plus_raw.py

test_yuv_plus_raw testi, Android 12'deki fiziksel gizli kameralarda çalıştırılı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ümleri, boyut ve renk filtreleriyle birlikte üst konturun (kare) içinde çocuk konturunun (daire) bulunmasını içeren bir yöntem kullanıyordu. Android 12, tüm konturları bulup en yuvarlak özellikleri bularak filtreleme yöntemini kullanır. Ekrandaki yapay daireleri hariç tutmak için minimum bir kontur alanı gereklidir ve dairenin dış çizgisi siyah olmalıdır.

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

Kontürlerin ve seçim kriterlerinin 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 İddialar
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çimler için fark oranı
TAM ≥ 31 Kırpma
En boy oranı
4:3, 16:9, 2:1 biçimleri için görüş alanı
LEVEL3 TÜMÜ Kırp
En boy oranı
4:3, 16:9, 2:1 biçimler için FoV

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 füzyon testi için resimlerdeki özellikleri algılamaya yönelik bir yöntem 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, en az 30 özellik koşuluyla, 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 özellikleri 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ı
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 (test_solid_color_test_pattern) etkinleştirildi. Bu test tüm kameralar için etkindir ve 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ı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ı onaylar ve resim rengi spesifikasyona göre değişir.

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 çerçevesi 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ü Renkler iddia edildi
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

Kamera başlatma işleminin, sahne2_c yüz sahnesine sahip hem ön hem de arka birincil kameralarda 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.