iOS पर उपयोगकर्ता के एनवायरमेंट को समझना

अपने ऐप्लिकेशन में Scene Semantics API का इस्तेमाल करने का तरीका जानें.

सीन सेमेटिक्स एपीआई की मदद से, डेवलपर उपयोगकर्ता के आस-पास के सीन को समझ सकते हैं. इसके लिए, यह एपीआई मशीन लर्निंग मॉडल के आधार पर, रीयल-टाइम में सेमेटिक जानकारी उपलब्ध कराता है. किसी आउटडोर सीन की इमेज देने पर, एपीआई हर पिक्सल के लिए एक लेबल दिखाता है. यह लेबल, काम की सेमैटिक क्लास के सेट में होता है. जैसे, आसमान, इमारत, पेड़, सड़क, फ़ुटपाथ, वाहन, व्यक्ति वगैरह. पिक्सल लेबल के अलावा, सीन सेमेटिक्स एपीआई हर पिक्सल लेबल के लिए कॉन्फ़िडेंस वैल्यू भी उपलब्ध कराता है. साथ ही, किसी आउटडोर सीन में किसी लेबल की मौजूदगी के बारे में आसानी से क्वेरी करने का तरीका भी उपलब्ध कराता है.

बाईं से दाईं ओर, इनपुट इमेज, पिक्सल लेबल की सेमैनटिक इमेज, और उससे जुड़ी कॉन्फ़िडेंस इमेज के उदाहरण:

इनपुट इमेज, सिमेंटिक इमेज, और सिमेंटिक कॉन्फ़िडेंस इमेज का उदाहरण.

ज़रूरी शर्तें

आगे बढ़ने से पहले, पक्का करें कि आपने एआर के बुनियादी कॉन्सेप्ट और ARCore सेशन को कॉन्फ़िगर करने का तरीका समझ लिया हो.

सीन सेमेंटेक्स की सुविधा चालू करना

नए ARCore सेशन में, देखें कि उपयोगकर्ता के डिवाइस पर Scene Semantics API काम करता है या नहीं. प्रोसेसिंग पावर की सीमाओं की वजह से, ARCore के साथ काम करने वाले सभी डिवाइसों पर सीन सेमेटिक्स एपीआई काम नहीं करता.

संसाधनों को सेव करने के लिए, ARCore पर सीन सिमैंटिक्स की सुविधा डिफ़ॉल्ट रूप से बंद रहती है. अपने ऐप्लिकेशन में Scene Semantics API का इस्तेमाल करने के लिए, सेमेटिक मोड चालू करें.

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
    configuration.semanticMode = GARSemanticModeEnabled;
}

NSError *error;
[self.garSession setConfiguration:configuration error:&error];

सिमेंटिक इमेज पाना

सीन सेमेटिक्स की सुविधा चालू होने के बाद, सिमैंटिक इमेज को वापस पाया जा सकता है. सिमेंटिक इमेज एक kCVPixelFormatType_OneComponent8 इमेज होती है. इसमें हर पिक्सल, GARSemanticLabel से तय किए गए सिमेंटिक लेबल से जुड़ा होता है.

सिमेंटिक इमेज पाने के लिए, GARFrame.semanticImage का इस्तेमाल करें:

CVPixelBuffer semanticImage = garFrame.semanticImage;
if (semanticImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

सेशन शुरू होने के एक से तीन फ़्रेम के बाद, सेमैनटिक इमेज दिखनी चाहिए. हालांकि, यह डिवाइस पर निर्भर करता है.

कॉन्फ़िडेंस इमेज पाना

एपीआई, हर पिक्सल के लिए लेबल देने वाली सेमेंटिक इमेज के साथ-साथ, पिक्सल की कॉन्फ़िडेंस वैल्यू की कॉन्फ़िडेंस इमेज भी उपलब्ध कराता है. कॉन्फ़िडेंस इमेज एक kCVPixelFormatType_OneComponent8 इमेज होती है. इसमें हर पिक्सल, [0, 255] की रेंज में मौजूद किसी वैल्यू से जुड़ा होता है. यह वैल्यू, हर पिक्सल के लिए सेमैनटिक लेबल से जुड़ी संभावना से जुड़ी होती है.

सिमेंटिक कॉन्फ़िडेंस इमेज पाने के लिए, GARFrame.semanticConfidenceImage का इस्तेमाल करें:

CVPixelBuffer confidenceImage = garFrame.semanticConfidenceImage;
if (confidenceImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

डिवाइस के हिसाब से, सेशन शुरू होने के लगभग 1 से 3 फ़्रेम के बाद, कॉन्फ़िडेंस इमेज दिखनी चाहिए.

किसी सिमेंटिक लेबल के लिए पिक्सल के हिस्से की क्वेरी करना

मौजूदा फ़्रेम में, किसी खास क्लास (जैसे, आसमान) से जुड़े पिक्सल के हिस्से के बारे में भी क्वेरी की जा सकती है. यह क्वेरी, किसी खास लेबल के लिए पिक्सल के हिसाब से खोज करने और सेमैनटिक इमेज दिखाने से ज़्यादा असरदार है. फ़ंक्शन से मिली भिन्न, [0.0, 1.0] की रेंज में एक फ़्लोट वैल्यू होती है.

किसी लेबल के लिए फ़्रैक्शन पाने के लिए, fractionForSemanticLabel: का इस्तेमाल करें:

// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
    float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}