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

    Uygulamanıza Firebase'i henüz eklemediyseniz başlangıç kılavuzundaki adımları uygulayarak bunu yapın.

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

    1. Xcode'da, uygulamanız açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.
    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. İşlem tamamlandığında Xcode, arka planda bağımlılıklarınızı otomatik olarak çözümlemeye ve indirmeye baş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 hemen etkinleştirin:

    1. Firebase konsolunun Firebase ML API'leri sayfasını açın.
    2. Projenizi daha önce Blaze fiyatlandırma planına yükseltmediyseniz Yükselt'i tıklayarak yükseltme yapabilirsiniz. (Yalnızca projeniz Blaze planında değilse yükseltme yapmanız istenir.)

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

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

Ö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 aşağıdaki örnekte gösterildiği gibi bir VisionCloudDetectorOptions nesnesiyle bunları belirtin:

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 Cloud algılayıcı nesnesini oluştururken VisionCloudDetectorOptions nesnesini iletin.

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

Bir görüntüdeki önemli noktaları tanımak için görüntüyü VisionCloudLandmarkDetector ürününün detect(in:) yöntemine UIImage veya CMSampleBufferRef olarak iletin:

  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 bir dize olarak biçimlendirilmelidir. 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 tamamlama işleyiciye bir VisionCloudLandmark nesne dizisi iletilir. Her nesneden resimde tanınan bir önemli nokta hakkında bilgi edinebilirsiniz.

Örnek:

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