Android 12 sürümünde bir dizi Kamera ITS değişikliği yer alıyor. Bu sayfada dört geniş kategoriye ayrılan değişiklikler özetlenmektedir:
- Python 3'e yeniden düzenleme
- Mobil test çerçevesinin benimsenmesi
- Değişiklikleri test edin
- Yeni testler
Python 3'ü yeniden düzenleme
Python 2.7'nin Ocak 2020'de kullanımdan kaldırılması nedeniyle, Camera ITS kod tabanının tamamı Python 3'e göre 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'nin 1.19.2
- Matplotlib 3.3.2
- Scipy 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
dosyasında tanımlanan yeni test kurulum sınıfını kullanır. Çoğu test adı ve işlevi aynı kalır. Android 12'de artık tüm bireysel testler sahnelerini yüklüyor. Her test için sahne yükleme genel test süresini artırırken, bireysel testlerde hata ayıklamaya da olanak tanır.
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ğiyle yeniden düzenlendi:
-
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
Mobil 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 google/mobly'ye bakın.
config.yml dosyaları
Mobly çerçevesiyle, test edilmekte olan bir cihazı (DUT) ve its_base_test
sınıfında bir grafik tableti ayarlayabilirsiniz. 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ı (örneğin, bir tablet ve bir sensör füzyon test ortamı) yapılandırılabilir. Her test ortamı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 de test sınıfında iletilir. Ortak 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)
Tablet tabanlı test
Tablet tabanlı testler için test ortamı adında TABLET
anahtar sözcüğünün bulunması gerekir. Başlatma sırasında Mobly test çalıştırıcısı TestParams
başlatır ve bunları bireysel testlere aktarır.
Aşağıda tablet tabanlı çalıştırmalar için ö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
Test ortamı, tools/run_all_tests.py
kullanılarak çağrılabilir. Hiçbir komut satırı değeri yoksa testler config.yml
dosyası değerleriyle çalıştırılır. Ek olarak, Android 11 veya önceki sürümlere benzer komutları kullanarak camera
ve scene
yapılandırma dosyası değerlerini komut satırından 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 kelimesini içermelidir. Doğru test ortamı, test edilen sahnelere göre belirlenir. Android 12 , sensör füzyonu için hem Arduino hem de Canakit denetleyicilerini destekler.
Aşağıda sensör füzyonu çalıştırmaları için örnek bir config.yml
dosyası bulunmaktadı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üzyon testlerini sensör füzyon test donanımıyla çalıştırmak için şunu kullanın:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Çoklu test ortamları
Yapılandırma dosyasına birden fazla test ortamı dahil edilebilir. En yaygın kombinasyon hem tablet test ortamına hem de sensör füzyon test ortamına sahip olmaktır.
Aşağıda hem tablet hem de sensör füzyon test ortamlarını içeren ö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
Manuel test, Android 12'de desteklenmeye devam etmektedir. Bununla birlikte, test yatağının, test yatağı adında MANUAL
anahtar sözcüğüyle testi bu şekilde tanımlaması gerekir. Ayrıca test ortamı 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
Tabletler olmadan test sahneleri
Sahne 0 ve sahne 5 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 tabletin seri kimlik değerini atadığından tabletin bağlanması ve tablet kullanılmasa bile tablet seri kimliğinin geçerli olması gerekir.
Bireysel testleri çalıştırın
Bireysel testler yalnızca hata ayıklama amacıyla çalıştırılabilir çünkü sonuçları CTS Verifier'a raporlanmaz. camera
ve scene
komut satırında config.yml
dosyalarının üzerine yazılamadığından, söz konusu test için bu parametrelerin config.yml
dosyasında doğru olması gerekir. Ek olarak, yapılandırma dosyasında birden fazla test ortamı varsa test ortamını --test_bed
bayrağıyla belirtmeniz gerekir. Örneğin:
python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES
Yapıları test edin
Android 12'de, Camera ITS'ye yönelik test yapıları Android 11 veya önceki sürümlere benzer şekilde ancak aşağıdaki değişikliklerle depolanır:
- Test yapıtı
/tmp
dizininde, netlik sağlamak amacıyla 8 karakterlik rastgele dizenin başınaCameraITS_
eklenmiştir. - Test çıktısı ve hatalar, her test için
test_name_stdout.txt
vetest_name_stderr.txt
yerinetest_log.DEBUG
dosyasında saklanır. - Her bir testin DUT ve tablet logcat'leri
/tmp/CameraITS_########
dizininde depolanır ve 3A sorunlarında hata ayıklamak için gereken tüm bilgiler günlüğe kaydedildiğinden hata ayıklamayı basitleştirir.
Değişiklikleri test edin
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ö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şlevselliğine sahiptir.
Aşağıdaki tabloda Android 11'deki iki ayrı test açıklanmaktadır.
Test adı | İlk API düzeyi | İddialar |
---|---|---|
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ülerdeki renk tonunu ortadan kaldırmak için [255, 255, 255] farklarındaki 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 düzeyi | İddialar |
---|---|---|
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ındaki azaltılmış tolerans. |
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 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'deki SINIRLI kameralarda çalışır.
scene3/test_flip_mirror.py
test_flip_mirror
testi, Android 12'deki SINIRLI kameralarda çalışır.
scene4/test_aspect_ratio_and_crop.py
scene4/test_aspect_ratio_and_crop.py
dosyasındaki daireleri bulma, Android 12'de yeniden düzenlendi.
Daha önceki Android sürümleri, boyut ve renk filtreleriyle ana konturun (kare) içinde bir alt konturun (daire) bulunmasını içeren bir yöntem kullanıyordu. Android 12, tüm konturları bulmayı ve ardından en çembersel özellikleri bularak filtrelemeyi içeren bir yöntem kullanıyor. Ekrandaki sahte daireleri taramak için minimum bir kontur alanı gereklidir ve dairenin konturu siyah olmalıdır.
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ı ekranlı tabletlerde sınırlayıcı kutu kırpmasıyla ilgili sorunu çözmeye çalışır. Tüm çevre 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 daha düşük 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
iddiaları listelenmektedir.
Cihaz seviyesi | İlk API düzeyi | İddialar |
---|---|---|
SINIRLI | TÜM | En boy oranı 4:3, 16:9, 2:1 formatları için FoV |
TAM DOLU | < 31 | En boy oranı 4:3, 16:9, 2:1 formatları için FoV |
TAM DOLU | ≥ 31 | Mahsul En boy oranı 4:3, 16:9, 2:1 formatları için FoV |
3. SEVİYE | TÜM | Mahsul En boy oranı 4:3, 16:9, 2:1 formatları için FoV |
scene4/test_multi_camera_alignment.py
scene4/test_multi_camera_alignment.py
dosyasındaki YUV yakalamaları için undo_zoom()
yöntemi, yakalamanın en boy oranıyla eşleşmeyen sensörlerdeki 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
sensör_füzyonu/test_sensor_fusion.py
Android 12'de sensör füzyon testi için görüntülerdeki özellikleri tespit etmeye yönelik bir yöntem eklendi.
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 minimum özellik gereksinimi 30 özellik olmak üzere panjur etkilerini önlemek için merkeze %20 oranında maskelenir.
Bu yöntemle bulunan özellikler yetersizse, Android 12 öncelikle özellik algılama alanını %20 merkeze maskeliyor ve maksimum özellikleri minimum özellik gereksiniminin iki katı ile sınırlandırıyor.
Aşağıdaki resimde Android 11 ile Android 12 özellik algılama arasındaki fark gösterilmektedir. Minimum özellik gereksinimi eşiğinin yükseltilmesi, düşük kaliteli özelliklerin tespit edilmesine neden olur ve ölçümleri olumsuz etkiler.
Ş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ştirildi ve aşağıdaki tabloda açıklanıyor.
Sahne | Test adı | İlk API düzeyi | 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 doğrular. |
Kamera gizlilik modunu desteklemek için düz renk test desenleri etkinleştirilmelidir. test_solid_color_test_pattern
testi, düz renkli YUV görüntü çıktısını seçilen desenle tanımlanan renkle 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 modeli modunu ayarlar. Bu testSOLID_COLOR
kullanır. -
android.sensor.testPatternData
: Test modeli modu için R, Gr, Gb, G test modeli değerlerini ayarlar.
Düz renk test modelinin açıklaması için bkz. SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
.
Yöntem
Ayarlanan parametreler için YUV çerçeveleri yakalanır ve görüntü içeriği doğrulanır. Test deseninin çıkışı doğrudan görüntü sensöründen alınır, dolayısıyla özel bir sahneye gerek yoktur. 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 desenine göre olduğundan, renk kanallarının aşağıdaki tabloda gösterildiği gibi her renk için ayarlanması gerekir.
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) |
İ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 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şlatma süresinin 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.