Android 9, aynı yöne bakan iki veya daha fazla fiziksel kamera cihazından oluşan yeni bir mantıksal kamera cihazı aracılığıyla çok kameralı cihazlar için API desteğini tanıttı. Mantıksal kamera cihazı, HAL ile tümleşik çoklu kamera özellikleriyle etkileşime izin veren bir uygulamaya tek bir CameraDevice/CaptureSession olarak sunulur. Uygulamalar isteğe bağlı olarak temeldeki fiziksel kamera akışlarına, meta verilere ve kontrollere erişebilir ve bunları kontrol edebilir.
Şekil 1 . Çoklu kamera desteği
Bu şemada, farklı kamera kimlikleri renk kodludur. Uygulama, her bir fiziksel kameradan aynı anda ham arabellekler aktarabilir. Ayrı kontroller ayarlamak ve farklı fiziksel kameralardan ayrı meta veriler almak da mümkündür.
Örnekler ve kaynaklar
Çok kameralı cihazlar, mantıksal çoklu kamera özelliğiyle tanıtılmalıdır .
Kamera istemcileri, getPhysicalCameraIds()
çağırarak belirli bir mantıksal kameranın yapıldığı fiziksel cihazların kamera kimliğini sorgulayabilir. Sonucun bir parçası olarak döndürülen kimlikler daha sonra fiziksel cihazları setPhysicalCameraId()
aracılığıyla ayrı ayrı kontrol etmek için kullanılır. Bu tür bireysel isteklerin sonuçları, getPhysicalCameraResults()
tam sonuçtan sorgulanabilir.
Bireysel fiziksel kamera istekleri, yalnızca sınırlı bir parametre alt kümesini destekleyebilir. Geliştiriciler, desteklenen parametrelerin bir listesini almak için getAvailablePhysicalCameraRequestKeys()
çağırabilir.
Fiziksel kamera akışları yalnızca yeniden işleme alınmayan istekler için ve yalnızca monokrom ve bayer sensörleri için desteklenir.
uygulama
Destek kontrol listesi
HAL tarafına mantıksal çoklu kamera cihazları eklemek için:
- Bir uygulamaya da maruz kalan iki veya daha fazla fiziksel kamera tarafından desteklenen herhangi bir mantıksal kamera cihazı için bir
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
özelliği ekleyin. - Statik
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
meta veri alanını bir fiziksel kamera kimlikleri listesiyle doldurun. - Fiziksel kamera akışlarının pikselleri arasında ilişki kurmak için gereken derinlikle ilgili statik meta verileri doldurun:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
,ANDROID_LENS_POSE_REFERENCE
. Statik
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
meta veri alanını şu şekilde ayarlayın:-
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Ana-ana moddaki sensörler için donanım deklanşörü/pozlama senkronizasyonu yok. -
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Master-slave modundaki sensörler için, donanım deklanşörü/pozlama senkronizasyonu.
-
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ayrı fiziksel kameralar için desteklenen parametrelerin bir listesiyle doldurun. Mantıksal cihaz bireysel istekleri desteklemiyorsa liste boş olabilir.Bireysel istekler destekleniyorsa, yakalama isteklerinin bir parçası olarak ulaşabilen bireysel
physicalCameraSettings
işleyin ve uygulayın ve buna göre bireyselphysicalCameraMetadata
ekleyin.Camera HAL cihazının 3.5 (Android 10'da sunulan) veya daha sonraki sürümleri için, mantıksal kamerayı destekleyen mevcut aktif fiziksel kameranın kimliğini kullanarak
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
sonuç anahtarını doldurun.
Android 9 çalıştıran cihazlar için kamera cihazları, bir mantıksal YUV/RAW akışının aynı boyuttaki (RAW akışları için geçerli değildir) ve iki fiziksel kameradan gelen aynı formattaki fiziksel akışlarla değiştirilmesini desteklemelidir. Bu, Android 10 çalıştıran cihazlar için geçerli değildir.
Android 10 çalıştıran ve kamera HAL cihaz sürümünün 3.5 veya üzeri olduğu cihazlarda, uygulamaların fiziksel akışlar içeren belirli bir akış kombinasyonunun desteklenip desteklenmediğini sorgulaması için kamera cihazının isStreamCombinationSupported
desteklemesi gerekir.
Akış yapılandırma haritası
Mantıksal bir kamera için, belirli bir donanım seviyesindeki kamera cihazı için zorunlu akış kombinasyonları, CameraDevice.createCaptureSession
içinde gerekli olanla aynıdır. Akış yapılandırma haritasındaki tüm akışlar mantıksal akışlar olmalıdır.
Farklı boyutlardaki fiziksel alt kameralarla RAW özelliğini destekleyen bir mantıksal kamera cihazı için, bir uygulama mantıksal bir RAW akışını yapılandırırsa, mantıksal kamera cihazı farklı sensör boyutlarına sahip fiziksel alt kameralara geçmemelidir. Bu, mevcut RAW yakalama uygulamalarının bozulmamasını sağlar.
RAW yakalama sırasında fiziksel alt kameralar arasında geçiş yaparak HAL uygulanan optik yakınlaştırmadan yararlanmak için, uygulamaların mantıksal bir RAW akışı yerine fiziksel alt kamera akışlarını yapılandırması gerekir.
Garantili akış kombinasyonu
Hem mantıksal kamera hem de onun altında yatan fiziksel kameralar, cihaz seviyeleri için gerekli olan zorunlu akış kombinasyonlarını garanti etmelidir.
Mantıksal bir kamera cihazı, donanım düzeyine ve yeteneklerine bağlı olarak fiziksel bir kamera cihazıyla aynı şekilde çalışmalıdır. Özellik setinin, bireysel fiziksel kameraların bir üst seti olması önerilir.
Android 9 çalıştıran cihazlarda, garantili her akış kombinasyonu için mantıksal kameranın şunları desteklemesi gerekir:
Boyut ve biçimin fiziksel kameralar tarafından desteklenmesi koşuluyla, bir mantıksal YUV_420_888 veya ham akışı, her biri ayrı bir fiziksel kameradan aynı boyut ve biçimde iki fiziksel akışla değiştirme.
Mantıksal kamera RAW özelliği tanıtmıyorsa, ancak temeldeki fiziksel kameralar yapıyorsa, her bir fiziksel kameradan bir tane olmak üzere iki ham akış eklemek. Bu genellikle fiziksel kameralar farklı sensör boyutlarına sahip olduğunda ortaya çıkar.
Aynı boyut ve biçimdeki mantıksal bir akış yerine fiziksel akışları kullanma. Bu, fiziksel ve mantıksal akışların minimum kare süresi aynı olduğunda, yakalamanın kare hızını yavaşlatmamalıdır.
Performans ve güç konuları
Verim:
- Fiziksel akışların yapılandırılması ve akışı, kaynak kısıtlamaları nedeniyle mantıksal kameranın yakalama hızını yavaşlatabilir.
- Temel kameralar farklı kare hızlarına yerleştirilirse, fiziksel kamera ayarlarının uygulanması yakalama hızını yavaşlatabilir.
Güç:
- HAL'ın güç optimizasyonu varsayılan durumda çalışmaya devam eder.
- Fiziksel akışları yapılandırmak veya istemek, HAL'ın dahili güç optimizasyonunu geçersiz kılabilir ve daha fazla güç kullanımına neden olabilir.
özelleştirme
Cihaz uygulamanızı aşağıdaki şekillerde özelleştirebilirsiniz.
- Mantıksal kamera cihazının birleştirilmiş çıktısı tamamen HAL uygulamasına bağlıdır. Fiziksel kameralardan birleştirilmiş mantıksal akışların nasıl türetildiğine ilişkin karar, uygulama ve Android kamera çerçevesi için şeffaftır.
- Bireysel fiziksel istekler ve sonuçlar isteğe bağlı olarak desteklenebilir. Bu tür isteklerdeki kullanılabilir parametreler kümesi de tamamen belirli HAL uygulamasına bağlıdır.
- Android 10'dan itibaren HAL,
getCameraIdList
içindeki PHYSICAL_ID'lerin bazılarının veya tümünün reklamını yapmamayı seçerek bir uygulama tarafından doğrudan açılabilen kameraların sayısını azaltabilir.getPhysicalCameraCharacteristics
çağrılması, fiziksel kameranın özelliklerini döndürmelidir.
doğrulama
Mantıksal çoklu kamera cihazları, diğer normal kameralar gibi kamera CTS'sini geçmelidir. Bu tür bir cihazı hedefleyen test LogicalCameraDeviceTest
modülünde bulunabilir.
Bu üç ITS testi, görüntülerin uygun şekilde kaynaştırılmasını kolaylaştırmak için çoklu kamera sistemlerini hedefler:
-
scene1/test_multi_camera_match.py
-
scene4/test_multi_camera_alignment.py
-
sensor_fusion/test_multi_camera_frame_sync.py
Sahne 1 ve sahne 4 testleri, ITS-in-a-box test donanımıyla çalışır. test_multi_camera_match
testi, iki kameranın her ikisi de etkinleştirildiğinde görüntülerin merkezinin parlaklığının eşleştiğini iddia eder. test_multi_camera_alignment
testi, kamera aralıklarının, yönelimlerinin ve bozulma parametrelerinin düzgün şekilde yüklendiğini doğrular. Çoklu kamera sistemi bir Geniş FoV kamera (>90o) içeriyorsa, ITS kutusunun rev2 versiyonu gereklidir.
Sensor_fusion
, tekrarlanan, önceden belirlenmiş telefon hareketini sağlayan ve jiroskop ile görüntü sensörü zaman damgalarının eşleştiğini ve çoklu kamera çerçevelerinin senkronize olduğunu iddia eden ikinci bir test donanımıdır.
Tüm kutular AcuSpec, Inc. ( www.acuspecinc.com , fred@acuspecinc.com) ve MYWAY Manufacturing ( www.myway.tw , sales@myway.tw) aracılığıyla edinilebilir. Ek olarak rev1 ITS kutusu West-Mark ( www.west-mark.com , dgoodman@west-mark.com) üzerinden satın alınabilir.
En iyi uygulamalar
Uygulama uyumluluğunu korurken çoklu kamera tarafından sağlanan özelliklerden tam olarak yararlanmak için mantıksal bir çoklu kamera cihazı uygularken şu en iyi uygulamaları izleyin:
- (Android 10 veya üstü) Fiziksel alt kameraları
getCameraIdList
gizleyin. Bu, uygulamalar tarafından doğrudan açılabilen kamera sayısını azaltarak, uygulamaların karmaşık kamera seçim mantığına sahip olma ihtiyacını ortadan kaldırır. - (Android 11 veya üstü) Optik yakınlaştırmayı destekleyen mantıksal bir çok kameralı cihaz için
ANDROID_CONTROL_ZOOM_RATIO
API'sini uygulayın ve yalnızca en boy oranı kırpma içinANDROID_SCALER_CROP_REGION
kullanın.ANDROID_CONTROL_ZOOM_RATIO
, cihazın uzaklaştırma yapmasına ve daha iyi hassasiyet sağlamasına olanak tanır. Bu durumda, HAL, ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_ ANDROICS_REGLES_ STAT sensörünü aktif olarak görüntülemek içinANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
ANDROID_STATISTICS_FACE_RECTANGLES
, veANDROID_STATISTICS_FACE_LANDMARKS
-RECTROICS_ , algılayıcısını post-zoom olarak işlemek için ayarlamalıdır.ANDROID_CONTROL_ZOOM_RATIO
ANDROID_SCALER_CROP_REGION
ile birlikte nasıl çalıştığı hakkında daha fazla bilgi için bkz.camera3_crop_reprocess#cropping
. - Farklı yeteneklere sahip fiziksel kameralara sahip çok kameralı cihazlar için, cihazın yalnızca tüm yakınlaştırma aralığı değeri veya aralığı destekliyorsa bir kontrol için belirli bir değer veya aralık için destek verdiğinden emin olun. Örneğin, mantıksal kamera ultra geniş, geniş ve telefoto kameradan oluşuyorsa aşağıdakileri yapın:
- Fiziksel kameraların etkin dizi boyutları farklıysa, HAL kamerasının fiziksel kameraların etkin dizilerinden ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS ,
ANDROID_CONTROL_AWB_REGIONS
,ANDROID_STATISTICS_FACE_LANDMARKS
içinANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_STATISTICS_FACE_RECTANGLES
,ANDROID_CONTROL_AF_REGIONS
için eşlemeyi yapması gerekir. perspektifte, koordinat sistemi mantıksal kameranın aktif dizi boyutudur. - Geniş ve telefoto kameralar otomatik odaklamayı destekliyorsa, ancak ultra geniş kamera sabit odaklıysa, mantıksal kameranın otomatik odak desteğini tanıttığından emin olun. HAL, ultra geniş kamera için bir otomatik odak durum makinesini simüle etmelidir, böylece uygulama ultra geniş merceğe uzaklaştığında, alttaki fiziksel kameranın sabit odak olduğu gerçeği uygulamaya ve otomatik odaklama durum makinelerine desteklenen AF modları için şeffaftır. beklendiği gibi çalışın.
- Geniş ve telefoto kameralar 4K @ 60 fps'yi destekliyorsa ve ultra geniş kamera yalnızca 4K @ 30 fps veya 1080p @ 60 fps'yi destekliyor, ancak 4K @ 60 fps'yi desteklemiyorsa, mantıksal kameranın 4k @ 60 fps reklamını yapmadığından emin olun. desteklenen akış yapılandırmaları. Bu, mantıksal kamera özelliklerinin bütünlüğünü garanti eder ve uygulamanın 1'den küçük bir
ANDROID_CONTROL_ZOOM_RATIO
değerinde 4k @ 60 fps'ye ulaşamama sorunuyla karşılaşmamasını sağlar.
- Fiziksel kameraların etkin dizi boyutları farklıysa, HAL kamerasının fiziksel kameraların etkin dizilerinden ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS ,
- Android 10'dan başlayarak, fiziksel akışları içeren akış kombinasyonlarını desteklemek için mantıksal bir çoklu kamera gerekli değildir. HAL, fiziksel akışlarla bir kombinasyonu destekliyorsa:
- (Android 11 veya üstü) Stereodan derinlik ve hareket izleme gibi kullanım durumlarını daha iyi ele almak için, fiziksel akış çıkışlarının görüş alanını donanımın ulaşabileceği kadar büyük yapın. Bununla birlikte, fiziksel bir akış ve bir mantıksal akış aynı fiziksel kameradan geliyorsa, donanım sınırlamaları, fiziksel akışın görüş alanını mantıksal akışla aynı olmaya zorlayabilir.
- Birden çok fiziksel akışın neden olduğu bellek baskısını gidermek için, fiziksel bir akışın bir süre boşta kalması bekleniyorsa, uygulamaların boş arabellekleri (tüketici tarafından serbest bırakılan, ancak henüz üretici tarafından kuyruğa alınmayan arabellekler) serbest bırakmak için
discardFreeBuffers
kullandığından emin olun. zamanın. - Farklı fiziksel kameralardan gelen fiziksel akışlar genellikle aynı isteğe bağlı değilse, uygulamaların
surface group
kullandığından emin olun, böylece uygulamaya dönük iki yüzeyi desteklemek için bir arabellek kuyruğu kullanılır, böylece bellek tüketimi azaltılır.