Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

قبل ان تبدأ

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

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

    1. في Xcode ، مع فتح مشروع التطبيق الخاص بك ، انتقل إلى ملف> إضافة حزم .
    2. عند المطالبة ، أضف مستودع SDK لأنظمة Apple الأساسية لـ Firebase:
    3.   https://github.com/firebase/firebase-ios-sdk
    4. اختر مكتبة Firebase ML.
    5. عند الانتهاء ، سيبدأ 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 إلى طريقة VisionImageLabeler 's 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;
}

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