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 için yeniden düzenleme
- Mobly test çerçevesini kullanmaya başlama
- Değişiklikleri test etme
- Yeni testler
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:
- 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ı 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.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 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 dizeyeCameraITS_
eklenmiştir. - Test çıkışı ve hataları, her test için
test_name_stdout.txt
vetest_name_stderr.txt
yerinetest_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.
Ş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.
Ş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 testteSOLID_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.