ऐप्पल प्लेटफ़ॉर्म पर फायरबेस एमएल के साथ छवियों को लेबल करें

आप किसी छवि में पहचानी गई वस्तुओं को लेबल करने के लिए फायरबेस एमएल का उपयोग कर सकते हैं। इस एपीआई की विशेषताओं के बारे में जानकारी के लिए अवलोकन देखें।

शुरू करने से पहले

    यदि आपने पहले से ही अपने ऐप में फायरबेस नहीं जोड़ा है, तो आरंभ करने की मार्गदर्शिका में दिए गए चरणों का पालन करके ऐसा करें।

    फायरबेस निर्भरता को स्थापित और प्रबंधित करने के लिए स्विफ्ट पैकेज मैनेजर का उपयोग करें।

    1. Xcode में, अपना ऐप प्रोजेक्ट खुला होने पर, फ़ाइल > पैकेज जोड़ें पर नेविगेट करें।
    2. संकेत मिलने पर, Firebase Apple प्लेटफ़ॉर्म SDK रिपॉजिटरी जोड़ें:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. फायरबेस एमएल लाइब्रेरी चुनें।
    5. अपने लक्ष्य की बिल्ड सेटिंग्स के अन्य लिंकर फ़्लैग अनुभाग में -ObjC फ़्लैग जोड़ें।
    6. समाप्त होने पर, Xcode स्वचालित रूप से पृष्ठभूमि में आपकी निर्भरता को हल करना और डाउनलोड करना शुरू कर देगा।

    इसके बाद, कुछ इन-ऐप सेटअप करें:

    1. अपने ऐप में, फ़ायरबेस आयात करें:

      तीव्र

      import FirebaseMLModelDownloader

      उद्देश्य सी

      @import FirebaseMLModelDownloader;
  1. यदि आपने पहले से ही अपने प्रोजेक्ट के लिए क्लाउड-आधारित एपीआई सक्षम नहीं किया है, तो अभी करें:

    1. फायरबेस कंसोल का फायरबेस एमएल एपीआई पेज खोलें।
    2. यदि आपने पहले से ही अपने प्रोजेक्ट को ब्लेज़ मूल्य निर्धारण योजना में अपग्रेड नहीं किया है, तो ऐसा करने के लिए अपग्रेड पर क्लिक करें। (आपको केवल तभी अपग्रेड करने के लिए प्रेरित किया जाएगा यदि आपका प्रोजेक्ट ब्लेज़ योजना पर नहीं है।)

      केवल ब्लेज़-स्तरीय प्रोजेक्ट ही क्लाउड-आधारित एपीआई का उपयोग कर सकते हैं।

    3. यदि क्लाउड-आधारित एपीआई पहले से सक्षम नहीं हैं, तो क्लाउड-आधारित एपीआई सक्षम करें पर क्लिक करें।

अब आप छवियों को लेबल करने के लिए तैयार हैं।

1. इनपुट छवि तैयार करें

UIImage या CMSampleBufferRef उपयोग करके एक VisionImage ऑब्जेक्ट बनाएं।

UIImage उपयोग करने के लिए:

  1. यदि आवश्यक हो, तो छवि को घुमाएँ ताकि उसकी imageOrientation गुण .up हो।
  2. सही ढंग से घुमाए गए UIImage उपयोग करके एक VisionImage ऑब्जेक्ट बनाएं। कोई रोटेशन मेटाडेटा निर्दिष्ट न करें—डिफ़ॉल्ट मान, .topLeft , का उपयोग किया जाना चाहिए।

    तीव्र

    let image = VisionImage(image: uiImage)

    उद्देश्य सी

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

CMSampleBufferRef का उपयोग करने के लिए:

  1. एक VisionImageMetadata ऑब्जेक्ट बनाएं जो CMSampleBufferRef बफर में मौजूद छवि डेटा के ओरिएंटेशन को निर्दिष्ट करता है।

    छवि अभिविन्यास प्राप्त करने के लिए:

    तीव्र

    func imageOrientation(
        deviceOrientation: UIDeviceOrientation,
        cameraPosition: AVCaptureDevice.Position
        ) -> VisionDetectorImageOrientation {
        switch deviceOrientation {
        case .portrait:
            return cameraPosition == .front ? .leftTop : .rightTop
        case .landscapeLeft:
            return cameraPosition == .front ? .bottomLeft : .topLeft
        case .portraitUpsideDown:
            return cameraPosition == .front ? .rightBottom : .leftBottom
        case .landscapeRight:
            return cameraPosition == .front ? .topRight : .bottomRight
        case .faceDown, .faceUp, .unknown:
            return .leftTop
        }
    }

    उद्देश्य सी

    - (FIRVisionDetectorImageOrientation)
        imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
                               cameraPosition:(AVCaptureDevicePosition)cameraPosition {
      switch (deviceOrientation) {
        case UIDeviceOrientationPortrait:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationLeftTop;
          } else {
            return FIRVisionDetectorImageOrientationRightTop;
          }
        case UIDeviceOrientationLandscapeLeft:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationBottomLeft;
          } else {
            return FIRVisionDetectorImageOrientationTopLeft;
          }
        case UIDeviceOrientationPortraitUpsideDown:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationRightBottom;
          } else {
            return FIRVisionDetectorImageOrientationLeftBottom;
          }
        case UIDeviceOrientationLandscapeRight:
          if (cameraPosition == AVCaptureDevicePositionFront) {
            return FIRVisionDetectorImageOrientationTopRight;
          } else {
            return FIRVisionDetectorImageOrientationBottomRight;
          }
        default:
          return FIRVisionDetectorImageOrientationTopLeft;
      }
    }

    फिर, मेटाडेटा ऑब्जेक्ट बनाएं:

    तीव्र

    let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
    let metadata = VisionImageMetadata()
    metadata.orientation = imageOrientation(
        deviceOrientation: UIDevice.current.orientation,
        cameraPosition: cameraPosition
    )

    उद्देश्य सी

    FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
    AVCaptureDevicePosition cameraPosition =
        AVCaptureDevicePositionBack;  // Set to the capture device you used.
    metadata.orientation =
        [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation
                                     cameraPosition:cameraPosition];
  2. CMSampleBufferRef ऑब्जेक्ट और रोटेशन मेटाडेटा का उपयोग करके एक VisionImage ऑब्जेक्ट बनाएं:

    तीव्र

    let image = VisionImage(buffer: sampleBuffer)
    image.metadata = metadata

    उद्देश्य सी

    FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
    image.metadata = metadata;

2. छवि लेबलर को कॉन्फ़िगर करें और चलाएँ

किसी छवि में ऑब्जेक्ट को लेबल करने के लिए, VisionImage ऑब्जेक्ट को VisionImageLabeler की processImage() विधि में पास करें।

  1. सबसे पहले, VisionImageLabeler का एक उदाहरण प्राप्त करें:

    तीव्र

    let labeler = Vision.vision().cloudImageLabeler()
    
    // Or, to set the minimum confidence required:
    // let options = VisionCloudImageLabelerOptions()
    // options.confidenceThreshold = 0.7
    // let labeler = Vision.vision().cloudImageLabeler(options: options)
    

    उद्देश्य सी

    FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler];
    
    // Or, to set the minimum confidence required:
    // FIRVisionCloudImageLabelerOptions *options =
    //         [[FIRVisionCloudImageLabelerOptions alloc] init];
    // options.confidenceThreshold = 0.7;
    // FIRVisionImageLabeler *labeler =
    //         [[FIRVision vision] cloudImageLabelerWithOptions:options];
    
  2. फिर, छवि को processImage() विधि में पास करें:

    तीव्र

    labeler.process(image) { labels, error in
        guard error == nil, let labels = labels else { return }
    
        // Task succeeded.
        // ...
    }
    

    उद्देश्य सी

    [labeler processImage:image
               completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels,
                            NSError *_Nullable error) {
                   if (error != nil) { return; }
    
                   // Task succeeded.
                   // ...
               }];
    

3. लेबल वाली वस्तुओं के बारे में जानकारी प्राप्त करें

यदि छवि लेबलिंग सफल होती है, तो VisionImageLabel ऑब्जेक्ट की एक सरणी पूर्णता हैंडलर को पास कर दी जाएगी। प्रत्येक ऑब्जेक्ट से, आप छवि में पहचाने गए फीचर के बारे में जानकारी प्राप्त कर सकते हैं।

उदाहरण के लिए:

तीव्र

for label in labels {
    let labelText = label.text
    let entityId = label.entityID
    let confidence = label.confidence
}

उद्देश्य सी

for (FIRVisionImageLabel *label in labels) {
   NSString *labelText = label.text;
   NSString *entityId = label.entityID;
   NSNumber *confidence = label.confidence;
}

अगले कदम