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

Bir dizi Kamera ITS değişikliklerle Android 12 bülteninde yer verilmiştir. 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 , sürümleri gibi aynı kalır Android 11 veya daha düşük ve Python 3'e refactored edilir.

Tüm bireysel testler tanımlanan yeni test kurulum sınıfını refactored ve kullanımı olan tests/its_base_test.py . Ç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şikliklerle ilgili daha fazla bilgi için bkz Testi 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ı ile birden çok cihazı gerektiren test durumları destekleyen bir 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 mobly / google .

config.yml dosyaları

Mobly çerçeve ile, test (DUT) altında bir cihaz ve bir grafik tablet ayarlayabilirsiniz its_base_test sınıfı. Bir config.yml (YAML) dosyası Mobly test yatağı oluşturmak için 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 deneme sistemimiz en denetleyici bölümünde, belirtebilirsiniz device_ids testi koşucu uygun Android cihazlarını tespit etmek. Cihaz kimlikleri ek olarak, örneğin tablet gibi diğer parametreler brightness , chart_distance , debug_mode , camera_id ve scene_id test sınıfı 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 bazlı test etmek için, anahtar TABLET deneme ortamı adı içinde mevcut olması gerekir. Başlatma sırasında, Mobly Test kanal başlatır TestParams ve bireysel testlere iletir.

Aşağıdaki örnek bir config.yml tablet tabanlı çalışır için dosya.

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

Deneme sistemimiz kullanılarak çağrılabilir tools/run_all_tests.py . Hiçbir komut satırı değerleri varsa, testler ile çalıştırmak config.yml dosya değerlerinin. Ayrıca, geçersiz kılabilirsiniz camera ve scene Android 11 veya daha benzer komutlarını kullanarak komut satırında yapılandırma dosyası değerleri.

Ö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

İçin sensör füzyonu testleri , deneme ortamı adı anahtar kelime içermelidir SENSOR_FUSION . Doğru test ortamı, test edilen sahneler tarafından belirlenir. Android 12 destekler hem Arduino ve Canakit sensör füzyonu için kontrolörler .

Aşağıdaki örnek bir config.yml sensör füzyonu ishal için dosyası.

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 testler için sensör füzyon test düzeneğine , kullanımı:

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 yatağına hem de sensör füzyon test yatağına sahip olmaktır.

Aşağıdaki örnek bir config.yml her iki tablet ve sensör füzyon testbed'lerinden dosya.

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 deneme sistemimiz anahtar kelime ile örneğin test tanımlamak gerekir, Ancak Android 12'de desteklenmeye devam MANUAL testbed adına. Ayrıca, test yatağı bir tablet kimliği içeremez.

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

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

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

Sahneleri tabletsiz test etme

Olay yerine 0 ve sahnenin 5 için test ile yapılabilir TEST_BED_TABLET_SCENES veya TEST_BED_MANUAL . Bununla birlikte, test ile yapılırsa TEST_BED_TABLET_SCENES tablet bağlı olmalıdır ve tablet test sınıf ayar atar, çünkü tablet için dizi ID değeri kullanılmaz halde tablet dizi ID geçerli olmalıdır.

Bireysel testler yapmak

Sonuçları rapor edilmez çünkü Bireysel testler ayıklama amaçlar için çalıştırılabilir CTS doğrulayıcısı'nın . Çünkü config.yml dosyaları için komut satırına yazılır olamaz camera ve scene , bu parametreler içinde doğru olmalıdır config.yml söz konusu bireysel test için dosyanın. Yapılandırma dosyasında birden fazla deneme sistemimiz varsa Ek olarak, birlikte test yatağı belirtmelisiniz --test_bed bayrağı. Ö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 eser /tmp dizini vardır CameraITS_ netlik için 8 karakterli rastgele dize başına ilave.
  • Test çıkışı ve hatalar saklanır test_log.DEBUG yerine her test için test_name_stdout.txt ve test_name_stderr.txt .
  • Depolanan her bir ayrı testinden DUT ve tablet logcats olan /tmp/CameraITS_######## ayıklama 3A sorunları için gerekli tüm bilgiler kaydedilir olarak ayıklama basitleştirilmesi dizin.

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 kamera üzerinde çalışır.

Scene1_1/test_black_white.py

Android 12 için, test_black_white hem işlevselliğe sahip test_black_white ve test_channel_saturation .

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 HERŞEY 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 tablo, Android 12'de birleştirilmiş testi, Scene1_1/test_black_white.py'yi açıklar.

Test adı İlk API seviyesi iddialar
Scene1_1/test_black_white.py HERŞEY 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 kamera üzerinde çalışır.

Scene1_2/test_tonemap_sequence.py

test_tonemap_sequence testi Android 12'de SINIRLI kameralar üzerinde çalışır.

Scene1_2/test_yuv_plus_raw.py

test_yuv_plus_raw Android 12'de fiziksel gizli kamera test çalışır.

Scene2_a/test_format_combos.py

test_format_combos Test Android 12'de SINIRLI kameralar üzerinde çalışır.

Scene3/test_flip_mirror.py

test_flip_mirror testi Android 12'de SINIRLI kameralar üzerinde çalışır.

Scene4/test_aspect_ratio_and_crop.py

Çevrelerin bulma scene4/test_aspect_ratio_and_crop.py Android 12'de refactored edildi.

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 en circlish olan özellikler bularak filtreleme sonra tüm hatlarını bulma ve içerir 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

Hatlarına ve seçim kriterleri Şekil 1. Kavramsal çekme

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

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

Aşağıdaki tabloda için iddiaların test_aspect_ratio_and_crop.py , belirli bir cihaz düzeyinde ve ilk API düzeyine karşılık gelmektedir.

Cihaz seviyesi İlk API seviyesi iddialar
SINIRLI HERŞEY 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 HERŞEY Mahsul
En boy oranı
4:3, 16:9, 2:1 biçimleri için FoV

Scene4/test_multi_camera_alignment.py

Yöntem undo_zoom() YUV yakalar scene4/test_multi_camera_alignment.py Yakalama en-boy oranı olmayan sensörler kırpma için daha doğru bir şekilde hesaba refactored edildi.

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ı

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

Yeni testler

Scene0/test_solid_color_test_pattern.py

Yeni test, test_solid_color_test_pattern , Bu test tüm kameralar için etkindir ve aşağıdaki tabloda açıklanan Android 12. için etkindir.

Faliyet alani, sahne Test adı İlk API seviyesi Açıklama
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 Test seçilmiş bir şekli tanımlanmış renk ile düz bir renk YUV görüntü çıktısını teyit eder ve görüntü renk özelliklerine göre değişir.

parametreler

  • cameraPrivacyModeSupport : belirler kamera destekleri gizlilik modu belirler.
  • android.sensor.testPatternMode : Test deseni modunu ayarlar. Bu test kullanır SOLID_COLOR .
  • android.sensor.testPatternData : Test deseni modu için R, Gr, Gb, G, test paterni değerlerini ayarlar.

Katı renk test modelinin bir tarifi için, bakınız 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. Eğer PER_FRAME_CONTROL desteklenmektedir, tek YUV çerçeve test edilen her bir ayar için yakalanır. Eğer PER_FRAME_CONTROL desteklenmez, dört kare test kapsama maksimize etmek analiz sadece son çerçeve ile yakalanır LIMITED kameralar.

YUV yakalar tamamen doymuş ayarlanır BLACK , WHITE , RED , GREEN ve BLUE testi desenleri. 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 iddialarını açıklar test_solid_color_test_pattern.py .

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.