Android 12 sürümüne bir dizi Kamera ITS değişikliği dahildir. 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:
- Python 3.7.9 veya Python 3.7.10
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- 1.5.2
- pySeri 3.5
- Yastık 8.1.0
- PyYAML 5.3.1
Ana test başlatıcısı, tools/run_all_tests.py
, Android 11 veya daha düşük sürümlerle 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 kurulum sınıfını kullanır. Ç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şiklikleri hakkında daha fazla bilgi için bkz. Test değişiklikleri .
Aşağıdaki Python modülleri bir ad değişikliği ile 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 senaryolarını destekleyen 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. google/mobly .
config.yml dosyaları
Mobly çerçevesiyle, test edilen bir cihaz (DUT) ve its_base_test
sınıfında bir grafik tableti kurabilirsiniz. Mobly test yatağı oluşturmak için bir config.yml
(YAML) dosyası 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 test yatağının denetleyici bölümünde, test çalıştırıcısına uygun Android cihazlarını tanımlamak için device_ids
belirtebilirsiniz. Cihaz kimliklerine ek olarak, tablet brightness
, chart_distance
, debug_mode
, camera_id
ve scene_id
gibi diğer parametreler test sınıfında 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 tabanlı testler için, test yatağı adında TABLET
anahtar sözcüğü bulunmalıdır. Başlatma sırasında Mobly test çalıştırıcısı TestParams
başlatır ve bunları ayrı testlere iletir.
Aşağıdaki, tablet tabanlı çalıştırmalar için örnek bir config.yml
dosyasıdır.
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ışır. Ek olarak, 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.
Ö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
Sensör füzyon testi için test yatağı adı SENSOR_FUSION
anahtar sözcüğünü içermelidir. Doğru test ortamı, test edilen sahneler tarafından belirlenir. Android 12, sensör füzyonu için hem Arduino hem de Canakit denetleyicilerini destekler.
Aşağıdaki, sensör füzyonu çalıştırmaları için örnek bir config.yml
dosyasıdır.
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 donanımıyla sensör füzyonu testlerini ç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
Ç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ğıda hem tablet hem de sensör füzyonu test yataklarına sahip örnek bir config.yml
dosyası bulunmaktadır.
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
Manüel test, Android 12'de desteklenmeye devam etmektedir. Ancak, test yatağı, test yatağı adındaki MANUAL
anahtar kelimesiyle testi olduğu gibi tanımlamalıdır. Ayrıca, test yatağı bir tablet kimliği içeremez.
Aşağıda manuel test için örnek bir config.yml
dosyası bulunmaktadır.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
chart_distance: 31.0
camera: 0
scene: scene1
Sahneleri tabletsiz test etme
Sahne 0 ve sahne 5 için test, TEST_BED_TABLET_SCENES
veya TEST_BED_MANUAL
ile yapılabilir. Ancak, test TEST_BED_TABLET_SCENES
ile yapılırsa, tabletin bağlı olması ve tablet kullanılmasa bile tablet seri kimliğinin geçerli olması gerekir, çünkü test sınıfı kurulumu tablet için seri kimlik değerini atar.
Bireysel testler yapmak
Sonuçları CTS Verifier'a bildirilmediğinden, bireysel testler yalnızca hata ayıklama amacıyla çalıştırılabilir. camera
ve scene
komut satırında config.yml
dosyalarının üzerine yazılamadığından, söz konusu bireysel test için config.yml
dosyasında bu parametreler doğru olmalıdır. Ek olarak, yapılandırma dosyasında birden fazla test yatağı varsa, test yatağını --test_bed
bayrağıyla belirtmelisiniz. Ö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 eseri
/tmp
dizininde, netlik için 8 karakterlik rastgele dizenin önüneCameraITS_
eklenmiştir. - Test çıktısı ve hatalar, her test için
test_name_stdout.txt
vetest_log.DEBUG
yerinetest_name_stderr.txt
dosyasında saklanır. - Her bir testten alınan DUT ve tablet logcat'leri
/tmp/CameraITS_########
dizininde saklanır ve 3A sorunlarının hatalarını ayıklamak için gereken tüm bilgiler günlüğe kaydedilirken hata ayıklamayı basitleştirir.
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 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
sahiptir.
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 | 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 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 | TÜM | 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 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'de 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
scene4/test_aspect_ratio_and_crop.py
daire bulma, Android 12'de yeniden düzenlendi.
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, tüm konturları bulmayı ve ardından en dairesel olan özellikleri bularak filtrelemeyi içeren 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.
Şekil 1. Konturların kavramsal çizimi ve seçim kriterleri
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 kırpma testi FULL
ve LEVEL3
cihazlar için çalıştırılır. Android 11 veya önceki sürümleri, FULL
cihazlar için kırpma testi iddialarını atlar.
Aşağıdaki tablo, belirli bir aygıt düzeyine ve birinci API düzeyine karşılık gelen test_aspect_ratio_and_crop.py
için iddiaları listeler.
Cihaz seviyesi | İlk API seviyesi | iddialar |
---|---|---|
SINIRLI | TÜM | 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 | TÜM | Mahsul En boy oranı 4:3, 16:9, 2:1 biçimleri için FoV |
Scene4/test_multi_camera_alignment.py
scene4/test_multi_camera_alignment.py
içindeki YUV yakalamaları için undo_zoom()
yöntemi, yakalamanın en boy oranıyla eşleşmeyen sensörlerde kırpmayı daha doğru bir şekilde hesaba katacak şekilde 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ı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.
Şekil 2. Android 11 ve 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 etkinleştirildi ve aşağıdaki tabloda açıklanmıştır.
Faliyet alani, sahne | Test adı | İlk API seviyesi | Tanım |
---|---|---|---|
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
testi, seçilen model tarafından tanımlanan renkle düz renk YUV görüntü çıktısını doğrular ve görüntü rengi spesifikasyona göre değişir.
parametreler
-
cameraPrivacyModeSupport
: Kameranın gizlilik modunu destekleyip desteklemediğini belirler. -
android.sensor.testPatternMode
: Test deseni modunu ayarlar. Bu testSOLID_COLOR
kullanır. -
android.sensor.testPatternData
: Test deseni modu için R, Gr, Gb, G test deseni değerlerini ayarlar.
Düz renk test deseninin açıklaması için bkz. 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. 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 yalnızca son kare analiz edilerek dört kare yakalanır.
YUV yakalamaları tamamen doymuş BLACK
, WHITE
, RED
, GREEN
ve BLUE
test modellerine ayarlanmıştır. 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_solid_color_test_pattern.py
için test iddialarını açıklar.
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.