Check out what’s new from Firebase at Google I/O 2022. Learn more

ติดป้ายกำกับรูปภาพด้วย Firebase ML บนแพลตฟอร์ม Apple

คุณสามารถใช้ Firebase ML เพื่อติดป้ายกำกับวัตถุที่รู้จักในรูปภาพ ดู ภาพรวม สำหรับข้อมูลเกี่ยวกับคุณสมบัติของ API นี้

ก่อนจะเริ่ม

    หากคุณยังไม่ได้เพิ่ม Firebase ในแอปของคุณ ให้ทำตามขั้นตอนในคู่มือ การเริ่มต้นใช้ งาน

    ใช้ Swift Package Manager เพื่อติดตั้งและจัดการการพึ่งพา Firebase

    1. ใน Xcode เมื่อโปรเจ็กต์แอปของคุณเปิดอยู่ ให้ไปที่ File > Add Packages
    2. เมื่อได้รับแจ้ง ให้เพิ่มที่เก็บ SDK ของแพลตฟอร์ม Firebase Apple:
    3.   https://github.com/firebase/firebase-ios-sdk
        
    4. เลือกไลบรารี Firebase ML
    5. เมื่อเสร็จแล้ว Xcode จะเริ่มแก้ไขและดาวน์โหลดการพึ่งพาของคุณในเบื้องหลังโดยอัตโนมัติ

    ถัดไป ทำการตั้งค่าบางอย่างในแอพ:

    1. ในแอปของคุณ ให้นำเข้า Firebase:

      Swift

      import FirebaseMLModelDownloader

      วัตถุประสงค์-C

      @import FirebaseMLModelDownloader;
  1. หากคุณยังไม่ได้เปิดใช้งาน API แบบ Cloud-based สำหรับโปรเจ็กต์ของคุณ ให้ดำเนินการดังนี้:

    1. เปิดหน้า Firebase ML APIs ของคอนโซล Firebase
    2. หากคุณยังไม่ได้อัปเกรดโปรเจ็กต์ของคุณเป็นแผนราคา Blaze ให้คลิก อัปเกรด เพื่อดำเนินการดังกล่าว (คุณจะได้รับแจ้งให้อัปเกรดเฉพาะเมื่อโปรเจ็กต์ของคุณไม่อยู่ในแผน Blaze)

      เฉพาะโปรเจ็กต์ระดับ Blaze เท่านั้นที่สามารถใช้ API แบบคลาวด์ได้

    3. หากไม่ได้เปิดใช้งาน API แบบคลาวด์ ให้คลิก เปิดใช้งาน API แบบคลาวด์

ตอนนี้คุณพร้อมที่จะติดป้ายกำกับรูปภาพแล้ว

1. เตรียมอิมเมจอินพุต

สร้างวัตถุ VisionImage โดยใช้ UIImage หรือ CMSampleBufferRef

ในการใช้ UIImage :

  1. หากจำเป็น ให้หมุนรูปภาพเพื่อให้คุณสมบัติ imageOrientation เป็น . .up
  2. สร้างวัตถุ VisionImage โดยใช้ UIImage ที่หมุนอย่างถูกต้อง อย่าระบุข้อมูลเมตาการหมุนใดๆ ต้องใช้ค่าเริ่มต้น . .topLeft

    Swift

    let image = VisionImage(image: uiImage)

    วัตถุประสงค์-C

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

ในการใช้ CMSampleBufferRef :

  1. สร้างวัตถุ VisionImageMetadata ที่ระบุการวางแนวของข้อมูลภาพที่มีอยู่ในบัฟเฟอร์ CMSampleBufferRef

    ในการรับการวางแนวของภาพ:

    Swift

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

    วัตถุประสงค์-C

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

    จากนั้น สร้างวัตถุข้อมูลเมตา:

    Swift

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

    วัตถุประสงค์-C

    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 และข้อมูลเมตาของการหมุน:

    Swift

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

    วัตถุประสงค์-C

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

2. กำหนดค่าและเรียกใช้ Image labeler

ในการติดป้ายกำกับวัตถุในรูปภาพ ให้ส่งวัตถุ VisionImage ไปยัง VisionImageLabeler processImage() ของ VisionImageLabeler

  1. ขั้นแรก รับอินสแตนซ์ของ VisionImageLabeler :

    Swift

    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)
    

    วัตถุประสงค์-C

    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() :

    Swift

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

    วัตถุประสงค์-C

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

3. รับข้อมูลเกี่ยวกับวัตถุที่มีป้ายกำกับ

หากการติดฉลากรูปภาพสำเร็จ อาร์เรย์ของออบเจ็กต์ VisionImageLabel จะถูกส่งต่อไปยังตัวจัดการความสมบูรณ์ จากแต่ละอ็อบเจ็กต์ คุณสามารถรับข้อมูลเกี่ยวกับคุณสมบัติที่รู้จักในภาพ

ตัวอย่างเช่น:

Swift

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

วัตถุประสงค์-C

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

ขั้นตอนถัดไป