قم بتسمية الصور باستخدام Firebase ML على منصات Apple

يمكنك استخدام Firebase ML لتسمية الكائنات التي تم التعرف عليها في الصورة. راجع النظرة العامة للحصول على معلومات حول ميزات واجهة برمجة التطبيقات هذه.

قبل ان تبدأ

    إذا لم تكن قد أضفت Firebase إلى تطبيقك بالفعل، فقم بذلك باتباع الخطوات الواردة في دليل البدء .

    استخدم Swift Package Manager لتثبيت تبعيات Firebase وإدارتها.

    1. في Xcode، مع فتح مشروع التطبيق الخاص بك، انتقل إلى File > Add Packages .
    2. عندما يُطلب منك ذلك، قم بإضافة مستودع Firebase Apple الأساسي لـ SDK:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. اختر مكتبة Firebase ML.
    5. أضف علامة -ObjC إلى قسم إشارات الرابط الأخرى في إعدادات إنشاء هدفك.
    6. عند الانتهاء، سيبدأ Xcode تلقائيًا في حل وتنزيل تبعياتك في الخلفية.

    بعد ذلك، قم بإجراء بعض الإعدادات داخل التطبيق:

    1. في تطبيقك، قم باستيراد Firebase:

      سويفت

      import FirebaseMLModelDownloader

      ج موضوعية

      @import FirebaseMLModelDownloader;
  1. إذا لم تكن قد قمت بالفعل بتمكين واجهات برمجة التطبيقات المستندة إلى السحابة لمشروعك، فقم بذلك الآن:

    1. افتح صفحة Firebase ML APIs لوحدة تحكم Firebase.
    2. إذا لم تكن قد قمت بالفعل بترقية مشروعك إلى خطة تسعير Blaze، فانقر فوق ترقية للقيام بذلك. (سيُطلب منك الترقية فقط إذا لم يكن مشروعك مدرجًا في خطة Blaze.)

      يمكن فقط للمشاريع على مستوى Blaze استخدام واجهات برمجة التطبيقات المستندة إلى السحابة.

    3. إذا لم تكن واجهات برمجة التطبيقات المستندة إلى السحابة ممكّنة بالفعل، فانقر على تمكين واجهات برمجة التطبيقات المستندة إلى السحابة .

أنت الآن جاهز لتصنيف الصور.

1. قم بإعداد صورة الإدخال

قم بإنشاء كائن VisionImage باستخدام UIImage أو CMSampleBufferRef .

لاستخدام UIImage :

  1. إذا لزم الأمر، قم بتدوير الصورة بحيث تكون خاصية imageOrientation الخاصة بها هي .up .
  2. قم بإنشاء كائن VisionImage باستخدام UIImage الذي تم تدويره بشكل صحيح. لا تحدد أي بيانات تعريف للتدوير — يجب استخدام القيمة الافتراضية، .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. قم بإنشاء كائن VisionImage باستخدام كائن CMSampleBufferRef وبيانات تعريف التدوير:

    سويفت

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

    ج موضوعية

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

2. قم بتكوين برنامج تسمية الصور وتشغيله

لتسمية الكائنات في صورة ما، قم بتمرير كائن VisionImage إلى طريقة processImage() الخاصة بـ VisionImageLabeler .

  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;
}

الخطوات التالية