iOS'te Firebase ML ile Önemli Noktaları Tanıma

Resimlerdeki iyi bilinen önemli noktaları tanımak için Firebase ML'yi kullanabilirsiniz.

Başlamadan önce

    Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımlara bakın.

    Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.

    1. Xcode'da, uygulama projeniz açıkken Dosya > Paket Ekle'yi tıklayın.
    2. İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
    3.   https://github.com/firebase/firebase-ios-sdk.git
      .
    4. Firebase ML kitaplığını seçin.
    5. -ObjC işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.
    6. İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlar.

    Sonra, bazı uygulama içi kurulum işlemleri gerçekleştirin:

    1. Uygulamanızda Firebase'i içe aktarın:

      Swift

      import FirebaseMLModelDownloader

      Objective-C

      @import FirebaseMLModelDownloader;
  1. Projeniz için Cloud tabanlı API'leri henüz etkinleştirmediyseniz etkinleştirin şimdi:

    1. Firebase ML'i açın. Firebase konsolunun API'leri sayfasında gösterilir.
    2. Projenizi daha önce Blaze fiyatlandırma planına yükseltmediyseniz Bunun için yeni sürüme geçin. (Yalnızca emin olun.)

      Bulut tabanlı API'ler yalnızca Blaze düzeyindeki projelerde kullanılabilir.

    3. Cloud tabanlı API'ler henüz etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın. API'ler.
    ziyaret edin.

Önemli nokta algılayıcıyı yapılandırma

Cloud algılayıcısı varsayılan olarak modelin kararlı sürümünü kullanır ve en fazla 10 sonuç döndürür. Bu ayarlardan herhangi birini değiştirmek isterseniz bunları bir VisionCloudDetectorOptions nesnesiyle aşağıdaki örnekte:

Swift

let options = VisionCloudDetectorOptions()
options.modelType = .latest
options.maxResults = 20

Objective-C

  FIRVisionCloudDetectorOptions *options =
      [[FIRVisionCloudDetectorOptions alloc] init];
  options.modelType = FIRVisionCloudModelTypeLatest;
  options.maxResults = 20;
  

Sonraki adımda VisionCloudDetectorOptions ayarını geçin nesnesini tanımlayın.

Önemli nokta algılayıcıyı çalıştırma

Bir görüntüdeki önemli noktaları tanımak için resmi UIImage veya bir CMSampleBufferRef - VisionCloudLandmarkDetector detect(in:) yöntem:

  1. VisionCloudLandmarkDetector öğesinin bir örneğini alın:

    Swift

    lazy var vision = Vision.vision()
    
    let cloudDetector = vision.cloudLandmarkDetector(options: options)
    // Or, to use the default settings:
    // let cloudDetector = vision.cloudLandmarkDetector()
    

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector];
    // Or, to change the default settings:
    // FIRVisionCloudLandmarkDetector *landmarkDetector =
    //     [vision cloudLandmarkDetectorWithOptions:options];
    
  2. Cloud Vision'ı çağırmak için görüntünün base64 kodlu dize. Bir UIImage öğesini işlemek için:

    Swift

    guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return }
    let base64encodedImage = imageData.base64EncodedString()

    Objective-C

    NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f);
    NSString *base64encodedImage =
      [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
  3. Ardından resmi detect(in:) yöntemine iletin:

    Swift

    cloudDetector.detect(in: visionImage) { landmarks, error in
      guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else {
        // ...
        return
      }
    
      // Recognized landmarks
      // ...
    }
    

    Objective-C

    [landmarkDetector detectInImage:image
                         completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks,
                                      NSError *error) {
      if (error != nil) {
        return;
      } else if (landmarks != nil) {
        // Got landmarks
      }
    }];
    

Tanınan önemli noktalar hakkında bilgi alın

Önemli nokta tanıma işlemi başarılı olursa bir VisionCloudLandmark dizisi nesneler tamamlama işleyiciye aktarılır. Her nesneden bu şekilde resimde tanınan bir önemli nokta hakkında bilgi

Örneğin:

Swift

for landmark in landmarks {
  let landmarkDesc = landmark.landmark
  let boundingPoly = landmark.frame
  let entityId = landmark.entityId

  // A landmark can have multiple locations: for example, the location the image
  // was taken, and the location of the landmark depicted.
  for location in landmark.locations {
    let latitude = location.latitude
    let longitude = location.longitude
  }

  let confidence = landmark.confidence
}

Objective-C

for (FIRVisionCloudLandmark *landmark in landmarks) {
   NSString *landmarkDesc = landmark.landmark;
   CGRect frame = landmark.frame;
   NSString *entityId = landmark.entityId;

   // A landmark can have multiple locations: for example, the location the image
   // was taken, and the location of the landmark depicted.
   for (FIRVisionLatitudeLongitude *location in landmark.locations) {
     double latitude = [location.latitude doubleValue];
     double longitude = [location.longitude doubleValue];
   }

   float confidence = [landmark.confidence floatValue];
}

Sonraki adımlar