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
- Mobly test çerçevesinin benimsenmesi
- Değişiklikleri test etme
- Yeni testler
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:
- Python 3.7.9 veya Python 3.7.10
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- pySerial 3.5
- Pillow 8.1.0
- PyYAML 5.3.1
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.py
→utils/camera_properties_utils.py
pymodules/its/cv2image.py
→utils/opencv_processing_utils.py
pymodules/its/device.py
→utils/its_session_utils.py
pymodules/its/error.py
→utils/error_util.py
pymodules/its/image.py
→utils/image_processing_utils.py
pymodules/its/objects.py
→utils/capture_request_utils.py
pymodules/its/target.py
→utils/target_exposure_utils.py
tools/hw.py
→utils/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 dizeyeCameraITS_
eklenmiştir. - Test çıktısı ve hataları,
test_name_stdout.txt
vetest_name_stderr.txt
yerine her test içintest_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.
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.
Ş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 testteSOLID_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.