एंड्रॉइड 9 ने एक ही दिशा में इंगित करने वाले दो या दो से अधिक भौतिक कैमरा उपकरणों से बने नए लॉजिकल कैमरा डिवाइस के माध्यम से मल्टी-कैमरा उपकरणों के लिए एपीआई समर्थन पेश किया। लॉजिकल कैमरा डिवाइस को एचएएल-एकीकृत मल्टी-कैमरा सुविधाओं के साथ इंटरेक्शन की अनुमति देने वाले ऐप में एकल कैमराडिवाइस/कैप्चरसेशन के रूप में प्रदर्शित किया जाता है। ऐप्स वैकल्पिक रूप से अंतर्निहित भौतिक कैमरा स्ट्रीम, मेटाडेटा और नियंत्रण तक पहुंच और नियंत्रण कर सकते हैं।
आकृति 1 । मल्टी-कैमरा समर्थन
इस आरेख में, विभिन्न कैमरा आईडी को रंग कोडित किया गया है। ऐप एक ही समय में प्रत्येक भौतिक कैमरे से कच्चे बफ़र्स को स्ट्रीम कर सकता है। अलग-अलग नियंत्रण सेट करना और विभिन्न भौतिक कैमरों से अलग मेटाडेटा प्राप्त करना भी संभव है।
उदाहरण और स्रोत
मल्टी-कैमरा उपकरणों को तार्किक मल्टी-कैमरा क्षमता के साथ विज्ञापित किया जाना चाहिए।
कैमरा क्लाइंट getPhysicalCameraIds()
पर कॉल करके उन भौतिक उपकरणों की कैमरा आईडी के बारे में पूछ सकते हैं जिनसे एक विशेष लॉजिकल कैमरा बना है। परिणाम के भाग के रूप में लौटाई गई आईडी का उपयोग setPhysicalCameraId()
के माध्यम से व्यक्तिगत रूप से भौतिक उपकरणों को नियंत्रित करने के लिए किया जाता है। ऐसे व्यक्तिगत अनुरोधों के परिणामों को getPhysicalCameraResults()
का आह्वान करके संपूर्ण परिणाम से पूछा जा सकता है।
व्यक्तिगत भौतिक कैमरा अनुरोध केवल मापदंडों के एक सीमित उपसमूह का समर्थन कर सकते हैं। समर्थित मापदंडों की सूची प्राप्त करने के लिए, डेवलपर्स getAvailablePhysicalCameraRequestKeys()
कॉल कर सकते हैं।
भौतिक कैमरा स्ट्रीम केवल गैर-पुन: प्रसंस्करण अनुरोधों और केवल मोनोक्रोम और बायर सेंसर के लिए समर्थित हैं।
कार्यान्वयन
समर्थन चेकलिस्ट
एचएएल की ओर तार्किक मल्टी-कैमरा डिवाइस जोड़ने के लिए:
- दो या अधिक भौतिक कैमरों द्वारा समर्थित किसी भी तार्किक कैमरा डिवाइस के लिए
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
क्षमता जोड़ें, जो एक ऐप के संपर्क में भी आते हैं। - स्थिर
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
मेटाडेटा फ़ील्ड को भौतिक कैमरा आईडी की सूची से भरें। - भौतिक कैमरा स्ट्रीम के पिक्सेल के बीच सहसंबंध बनाने के लिए आवश्यक गहराई से संबंधित स्थिर मेटाडेटा को पॉप्युलेट करें:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
,ANDROID_LENS_POSE_REFERENCE
। स्थिर
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
मेटाडेटा फ़ील्ड को यहां सेट करें:-
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: मुख्य-मुख्य मोड में सेंसर के लिए, कोई हार्डवेयर शटर/एक्सपोज़र सिंक नहीं। -
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: मुख्य-माध्यमिक मोड में सेंसर के लिए, हार्डवेयर शटर/एक्सपोज़र सिंक।
-
व्यक्तिगत भौतिक कैमरों के लिए समर्थित मापदंडों की सूची के साथ
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
भरें। यदि तार्किक उपकरण व्यक्तिगत अनुरोधों का समर्थन नहीं करता है तो सूची खाली हो सकती है।यदि व्यक्तिगत अनुरोध समर्थित हैं, तो अलग-अलग
physicalCameraSettings
संसाधित करें और लागू करें जो कैप्चर अनुरोधों के हिस्से के रूप में आ सकते हैं और तदनुसार व्यक्तिगतphysicalCameraMetadata
जोड़ सकते हैं।कैमरा एचएएल डिवाइस संस्करण 3.5 (एंड्रॉइड 10 में प्रस्तुत) या उच्चतर के लिए, तार्किक कैमरे का समर्थन करने वाले वर्तमान सक्रिय भौतिक कैमरे की आईडी का उपयोग करके
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
परिणाम कुंजी को पॉप्युलेट करें।
एंड्रॉइड 9 चलाने वाले उपकरणों के लिए, कैमरा उपकरणों को एक तार्किक YUV/RAW स्ट्रीम को समान आकार की भौतिक स्ट्रीम (RAW स्ट्रीम पर लागू नहीं होता) और दो भौतिक कैमरों से समान प्रारूप के साथ बदलने का समर्थन करना चाहिए। यह एंड्रॉइड 10 चलाने वाले उपकरणों पर लागू नहीं होता है।
एंड्रॉइड 10 चलाने वाले उपकरणों के लिए जहां कैमरा एचएएल डिवाइस संस्करण 3.5 या उच्चतर है, कैमरा डिवाइस को ऐप्स के लिए isStreamCombinationSupported
समर्थन करना चाहिए ताकि यह पूछा जा सके कि भौतिक स्ट्रीम वाला एक विशेष स्ट्रीम संयोजन समर्थित है या नहीं।
स्ट्रीम कॉन्फ़िगरेशन मानचित्र
एक तार्किक कैमरे के लिए, एक निश्चित हार्डवेयर स्तर के कैमरा डिवाइस के लिए अनिवार्य स्ट्रीम संयोजन वही है जो CameraDevice.createCaptureSession
में आवश्यक है। स्ट्रीम कॉन्फ़िगरेशन मानचित्र में सभी धाराएँ तार्किक धाराएँ होनी चाहिए।
विभिन्न आकारों के भौतिक उप-कैमरों के साथ RAW क्षमता का समर्थन करने वाले एक तार्किक कैमरा डिवाइस के लिए, यदि कोई ऐप एक तार्किक RAW स्ट्रीम को कॉन्फ़िगर करता है, तो तार्किक कैमरा डिवाइस को विभिन्न सेंसर आकारों के साथ भौतिक उप-कैमरों पर स्विच नहीं करना चाहिए। यह सुनिश्चित करता है कि मौजूदा RAW कैप्चर ऐप्स टूटें नहीं।
RAW कैप्चर के दौरान भौतिक उप-कैमरों के बीच स्विच करके HAL द्वारा कार्यान्वित ऑप्टिकल ज़ूम का लाभ उठाने के लिए, ऐप्स को तार्किक RAW स्ट्रीम के बजाय भौतिक उप-कैमरा स्ट्रीम को कॉन्फ़िगर करना होगा।
गारंटीशुदा धारा संयोजन
तार्किक कैमरा और इसके अंतर्निहित भौतिक कैमरे दोनों को अपने डिवाइस स्तरों के लिए आवश्यक अनिवार्य स्ट्रीम संयोजनों की गारंटी देनी चाहिए।
एक तार्किक कैमरा उपकरण को उसके हार्डवेयर स्तर और क्षमताओं के आधार पर भौतिक कैमरा उपकरण की तरह ही काम करना चाहिए। यह अनुशंसा की जाती है कि इसका फीचर सेट व्यक्तिगत भौतिक कैमरों का सुपरसेट हो।
एंड्रॉइड 9 चलाने वाले उपकरणों पर, प्रत्येक गारंटीकृत स्ट्रीम संयोजन के लिए, तार्किक कैमरे को समर्थन करना चाहिए:
एक तार्किक YUV_420_888 या कच्ची धारा को एक ही आकार और प्रारूप की दो भौतिक धाराओं के साथ बदलना, प्रत्येक एक अलग भौतिक कैमरे से, यह देखते हुए कि आकार और प्रारूप भौतिक कैमरों द्वारा समर्थित हैं।
यदि तार्किक कैमरा RAW क्षमता का विज्ञापन नहीं करता है, लेकिन अंतर्निहित भौतिक कैमरे करते हैं, तो प्रत्येक भौतिक कैमरे से एक, दो कच्ची धाराएँ जोड़ना। यह आमतौर पर तब होता है जब भौतिक कैमरों में अलग-अलग सेंसर आकार होते हैं।
समान आकार और प्रारूप की तार्किक स्ट्रीम के स्थान पर भौतिक स्ट्रीम का उपयोग करना। जब भौतिक और तार्किक स्ट्रीम की न्यूनतम फ्रेम अवधि समान हो तो इससे कैप्चर की फ़्रेम दर धीमी नहीं होनी चाहिए।
प्रदर्शन और शक्ति संबंधी विचार
प्रदर्शन:
- भौतिक स्ट्रीम को कॉन्फ़िगर और स्ट्रीम करने से संसाधन की कमी के कारण तार्किक कैमरे की कैप्चर दर धीमी हो सकती है।
- यदि अंतर्निहित कैमरों को अलग-अलग फ़्रेम दर में रखा गया है, तो भौतिक कैमरा सेटिंग्स लागू करने से कैप्चर दर धीमी हो सकती है।
शक्ति:
- एचएएल का पावर ऑप्टिमाइज़ेशन डिफ़ॉल्ट मामले में काम करना जारी रखता है।
- भौतिक स्ट्रीम को कॉन्फ़िगर या अनुरोध करने से एचएएल का आंतरिक पावर अनुकूलन ओवरराइड हो सकता है और अधिक पावर उपयोग हो सकता है।
अनुकूलन
आप अपने डिवाइस कार्यान्वयन को निम्नलिखित तरीकों से अनुकूलित कर सकते हैं।
- लॉजिकल कैमरा डिवाइस का फ़्यूज्ड आउटपुट पूरी तरह से एचएएल कार्यान्वयन पर निर्भर करता है। भौतिक कैमरों से फ़्यूज्ड लॉजिकल स्ट्रीम कैसे प्राप्त की जाती हैं, इसका निर्णय ऐप और एंड्रॉइड कैमरा फ्रेमवर्क के लिए पारदर्शी है।
- व्यक्तिगत भौतिक अनुरोधों और परिणामों को वैकल्पिक रूप से समर्थित किया जा सकता है। ऐसे अनुरोधों में उपलब्ध मापदंडों का सेट भी पूरी तरह से विशिष्ट एचएएल कार्यान्वयन पर निर्भर है।
- एंड्रॉइड 10 से, एचएएल
getCameraIdList
में कुछ या सभी PHYSICAL_IDs का विज्ञापन न करने का चुनाव करके किसी ऐप द्वारा सीधे खोले जा सकने वाले कैमरों की संख्या को कम कर सकता है।getPhysicalCameraCharacteristics
को कॉल करने पर भौतिक कैमरे की विशेषताएं वापस आनी चाहिए।
मान्यकरण
लॉजिकल मल्टी-कैमरा डिवाइस को किसी भी अन्य नियमित कैमरे की तरह कैमरा सीटीएस पास करना होगा। इस प्रकार के डिवाइस को लक्षित करने वाले परीक्षण मामले LogicalCameraDeviceTest
मॉड्यूल में पाए जा सकते हैं।
ये तीन आईटीएस परीक्षण छवियों के उचित फ़्यूज़िंग की सुविधा के लिए मल्टी-कैमरा सिस्टम को लक्षित करते हैं:
-
scene1/test_multi_camera_match.py
-
scene4/test_multi_camera_alignment.py
-
sensor_fusion/test_multi_camera_frame_sync.py
दृश्य 1 और दृश्य 4 परीक्षण आईटीएस-इन-द-बॉक्स परीक्षण रिग के साथ चलते हैं। test_multi_camera_match
परीक्षण यह दावा करता है कि दोनों कैमरे सक्षम होने पर छवियों के केंद्र की चमक मेल खाती है। test_multi_camera_alignment
परीक्षण यह दावा करता है कि कैमरा स्पेसिंग, ओरिएंटेशन और विरूपण पैरामीटर ठीक से लोड किए गए हैं। यदि मल्टी-कैमरा सिस्टम में वाइड FoV कैमरा (>90o) शामिल है, तो ITS बॉक्स का Rev2 संस्करण आवश्यक है।
Sensor_fusion
एक दूसरा परीक्षण रिग है जो बार-बार, निर्धारित फ़ोन गति को सक्षम बनाता है और दावा करता है कि जाइरोस्कोप और छवि सेंसर टाइमस्टैम्प मेल खाते हैं और मल्टी-कैमरा फ़्रेम सिंक में हैं।
सभी बॉक्स AcuSpec, Inc. ( www.acuspecinc.com , fred@acuspecinc.com) और MYWAY मैन्युफैक्चरिंग ( www.myway.tw , sales@myway.tw) के माध्यम से उपलब्ध हैं। इसके अतिरिक्त, Rev1 ITS बॉक्स को वेस्ट-मार्क ( www.west-mark.com , dgoodman@west-mark.com) के माध्यम से खरीदा जा सकता है।
सर्वोत्तम प्रथाएं
ऐप संगतता बनाए रखते हुए मल्टी-कैमरा द्वारा सक्षम सुविधाओं का पूरी तरह से लाभ उठाने के लिए, तार्किक मल्टी-कैमरा डिवाइस को लागू करते समय इन सर्वोत्तम प्रथाओं का पालन करें:
- (एंड्रॉइड 10 या उच्चतर) भौतिक उप-कैमरों को
getCameraIdList
से छुपाएं। इससे ऐप्स द्वारा सीधे खोले जा सकने वाले कैमरों की संख्या कम हो जाती है, जिससे ऐप्स के लिए जटिल कैमरा चयन तर्क की आवश्यकता समाप्त हो जाती है। - (एंड्रॉइड 11 या उच्चतर) ऑप्टिकल ज़ूम का समर्थन करने वाले तार्किक मल्टी-कैमरा डिवाइस के लिए,
ANDROID_CONTROL_ZOOM_RATIO
API लागू करें, और केवल पहलू अनुपात क्रॉपिंग के लिएANDROID_SCALER_CROP_REGION
का उपयोग करें।ANDROID_CONTROL_ZOOM_RATIO
डिवाइस को ज़ूम आउट करने और बेहतर परिशुद्धता बनाए रखने में सक्षम बनाता है। इस मामले में, एचएएल को पोस्ट को ट्रीट करने के लिएANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
,ANDROID_STATISTICS_FACE_RECTANGLES
, औरANDROID_STATISTICS_FACE_LANDMARKS
की निर्देशांक प्रणाली को समायोजित करना होगा। सेंसर सक्रिय सरणी के रूप में दृश्य का ज़ूम फ़ील्ड।ANDROID_SCALER_CROP_REGION
ANDROID_CONTROL_ZOOM_RATIO
के साथ मिलकर कैसे काम करता है, इस बारे में अधिक जानकारी के लिए,camera3_crop_reprocess#cropping
देखें। - विभिन्न क्षमताओं वाले भौतिक कैमरों वाले मल्टी-कैमरा उपकरणों के लिए, सुनिश्चित करें कि डिवाइस नियंत्रण के लिए एक निश्चित मूल्य या सीमा के लिए समर्थन का विज्ञापन तभी करता है जब संपूर्ण ज़ूम रेंज मूल्य या सीमा का समर्थन करती है। उदाहरण के लिए, यदि लॉजिकल कैमरा एक अल्ट्रावाइड, एक वाइड और एक टेलीफोटो कैमरा से बना है, तो निम्न कार्य करें:
- यदि भौतिक कैमरों के सक्रिय सरणी आकार भिन्न हैं, तो कैमरा HAL को
ANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
,ANDROID_STATISTICS_FACE_LANDMARKS
ANDROID_STATISTICS_FACE_RECTANGLES
ऐप से परिप्रेक्ष्य, समन्वय प्रणाली तार्किक कैमरे का सक्रिय सरणी आकार है। - यदि वाइड और टेलीफोटो कैमरे ऑटोफोकस का समर्थन करते हैं, लेकिन अल्ट्रावाइड कैमरा फिक्स्ड फोकस है, तो सुनिश्चित करें कि लॉजिकल कैमरा ऑटोफोकस समर्थन का विज्ञापन करता है। एचएएल को अल्ट्रावाइड कैमरे के लिए एक ऑटोफोकस स्टेट मशीन का अनुकरण करना चाहिए ताकि जब ऐप अल्ट्रावाइड लेंस पर ज़ूम आउट करे, तो यह तथ्य कि अंतर्निहित भौतिक कैमरा निश्चित फोकस है, ऐप के लिए पारदर्शी हो, और समर्थित एएफ मोड के लिए ऑटोफोकस स्टेट मशीन उम्मीद के मुताबिक काम करें.
- यदि वाइड और टेलीफोटो कैमरे 4K @ 60 एफपीएस का समर्थन करते हैं, और अल्ट्रावाइड कैमरा केवल 4K @ 30 एफपीएस, या 1080p @ 60 एफपीएस का समर्थन करता है, लेकिन 4K @ 60 एफपीएस का नहीं, तो सुनिश्चित करें कि लॉजिकल कैमरा 4k @ 60 एफपीएस का विज्ञापन नहीं करता है। इसकी समर्थित स्ट्रीम कॉन्फ़िगरेशन। यह तार्किक कैमरा क्षमताओं की अखंडता की गारंटी देता है, यह सुनिश्चित करते हुए कि ऐप 1 से कम के
ANDROID_CONTROL_ZOOM_RATIO
मान पर 4k @ 60 एफपीएस प्राप्त नहीं करने की समस्या में नहीं चलेगा।
- यदि भौतिक कैमरों के सक्रिय सरणी आकार भिन्न हैं, तो कैमरा HAL को
- एंड्रॉइड 10 से शुरू करते हुए, भौतिक स्ट्रीम वाले स्ट्रीम संयोजनों का समर्थन करने के लिए एक तार्किक मल्टी-कैमरा की आवश्यकता नहीं होती है। यदि एचएएल भौतिक धाराओं के साथ संयोजन का समर्थन करता है:
- (एंड्रॉइड 11 या उच्चतर) स्टीरियो और मोशन ट्रैकिंग से गहराई जैसे उपयोग के मामलों को बेहतर ढंग से संभालने के लिए, भौतिक स्ट्रीम आउटपुट के दृश्य क्षेत्र को उतना बड़ा बनाएं जितना हार्डवेयर द्वारा प्राप्त किया जा सके। हालाँकि, यदि एक भौतिक धारा और एक तार्किक धारा एक ही भौतिक कैमरे से उत्पन्न होती है, तो हार्डवेयर सीमाएँ भौतिक धारा के दृश्य क्षेत्र को तार्किक धारा के समान होने के लिए बाध्य कर सकती हैं।
- एकाधिक भौतिक स्ट्रीम के कारण होने वाले मेमोरी दबाव को संबोधित करने के लिए, सुनिश्चित करें कि यदि किसी भौतिक स्ट्रीम के कुछ समय के लिए निष्क्रिय रहने की उम्मीद है, तो ऐप्स मुफ्त
discardFreeBuffers
(उपभोक्ता द्वारा जारी किए गए बफ़र्स, लेकिन निर्माता द्वारा अभी तक डीक्यू नहीं किए गए) को हटाने के लिए त्यागफ्रीबफ़र्स का उपयोग करते हैं। समय की। - यदि अलग-अलग भौतिक कैमरों से भौतिक स्ट्रीम आम तौर पर एक ही अनुरोध से जुड़ी नहीं होती हैं, तो सुनिश्चित करें कि ऐप्स
surface group
उपयोग करें ताकि एक बफर कतार का उपयोग दो ऐप-फेसिंग सतहों का समर्थन करने के लिए किया जा सके, जिससे मेमोरी खपत कम हो।