Apple প্ল্যাটফর্মগুলিতে Firebase ML সহ লেবেল চিত্রগুলি

ছবিতে স্বীকৃত বস্তুগুলিকে লেবেল করার জন্য আপনি Firebase ML ব্যবহার করতে পারেন। এই API এর বৈশিষ্ট্যগুলি সম্পর্কে তথ্যের জন্য ওভারভিউ দেখুন।

শুরু করার আগে

    যদি আপনি ইতিমধ্যেই আপনার অ্যাপে Firebase যোগ না করে থাকেন, তাহলে শুরু করার নির্দেশিকার ধাপগুলি অনুসরণ করে তা করুন।

    ফায়ারবেস নির্ভরতা ইনস্টল এবং পরিচালনা করতে সুইফট প্যাকেজ ম্যানেজার ব্যবহার করুন।

    1. Xcode-এ, আপনার অ্যাপ প্রজেক্ট খোলা থাকা অবস্থায়, File > Add Packages- এ নেভিগেট করুন।
    2. অনুরোধ করা হলে, Firebase Apple platforms SDK সংগ্রহস্থল যোগ করুন:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Firebase ML লাইব্রেরিটি বেছে নিন।
    5. আপনার টার্গেটের বিল্ড সেটিংসের অন্যান্য লিঙ্কার ফ্ল্যাগ বিভাগে -ObjC ফ্ল্যাগ যোগ করুন।
    6. শেষ হয়ে গেলে, Xcode স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে আপনার নির্ভরতাগুলি সমাধান এবং ডাউনলোড করা শুরু করবে।

    এরপর, কিছু ইন-অ্যাপ সেটআপ করুন:

    1. আপনার অ্যাপে, Firebase আমদানি করুন:

      সুইফট

      import FirebaseMLModelDownloader

      অবজেক্টিভ-সি

      @import FirebaseMLModelDownloader;
  1. যদি আপনি ইতিমধ্যেই আপনার প্রকল্পের জন্য ক্লাউড-ভিত্তিক API সক্রিয় না করে থাকেন, তাহলে এখনই তা করুন:

    1. Firebase কনসোলে Firebase ML API পৃষ্ঠাটি খুলুন।
    2. যদি আপনি ইতিমধ্যেই আপনার প্রকল্পটিকে পে-অ্যাজ-ইউ-গো ব্লেজ প্রাইসিং প্ল্যানে আপগ্রেড না করে থাকেন, তাহলে আপগ্রেডে ক্লিক করে তা করুন। (আপনার প্রকল্পটি ব্লেজ প্রাইসিং প্ল্যানে না থাকলেই আপনাকে আপগ্রেড করতে বলা হবে।)

      শুধুমাত্র ব্লেজ প্রাইসিং প্ল্যানের প্রকল্পগুলিই ক্লাউড-ভিত্তিক API ব্যবহার করতে পারবে।

    3. যদি ক্লাউড-ভিত্তিক API গুলি ইতিমধ্যেই সক্ষম না থাকে, তাহলে ক্লাউড-ভিত্তিক API গুলি সক্ষম করুন এ ক্লিক করুন।

এখন আপনি ছবি লেবেল করার জন্য প্রস্তুত।

১. ইনপুট ইমেজ প্রস্তুত করুন

UIImage অথবা CMSampleBufferRef ব্যবহার করে একটি VisionImage অবজেক্ট তৈরি করুন।

UIImage ব্যবহার করতে:

  1. প্রয়োজনে, ছবিটি এমনভাবে ঘোরান যাতে এর imageOrientation বৈশিষ্ট্য .up হয়।
  2. সঠিকভাবে ঘোরানো UIImage ব্যবহার করে একটি VisionImage অবজেক্ট তৈরি করুন। কোনও ঘূর্ণন মেটাডেটা নির্দিষ্ট করবেন না—ডিফল্ট মান, .topLeft , ব্যবহার করতে হবে।

    সুইফট

    let image = VisionImage(image: uiImage)

    অবজেক্টিভ-সি

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

CMSampleBufferRef ব্যবহার করতে:

  1. CMSampleBufferRef বাফারে থাকা চিত্র ডেটার ওরিয়েন্টেশন নির্দিষ্ট করে এমন একটি VisionImageMetadata অবজেক্ট তৈরি করুন।

    ছবির ওরিয়েন্টেশন পেতে:

    সুইফট

    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;

২. ইমেজ লেবেলার কনফিগার করুন এবং চালান

একটি ছবিতে অবজেক্ট লেবেল করার জন্য, 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.
                   // ...
               }];
    

৩. লেবেলযুক্ত বস্তু সম্পর্কে তথ্য পান

যদি ইমেজ লেবেলিং সফল হয়, তাহলে 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;
}

পরবর্তী পদক্ষেপ