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

Bir resimdeki ünlü yerleri tanımak için Firebase ML simgesini kullanabilirsiniz.

Başlamadan önce

    Firebase'i henüz uygulamanıza eklemediyseniz başlangıç kılavuzundaki adımları uygulayarak ekleyin.

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

    1. Xcode'da, uygulamanız açıkken File > Add Packages (Dosya > Paket Ekle) seçeneğine 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ının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.
    6. İşlem tamamlandığında Xcode otomatik olarak arka planda bağımlılarınızı çözümlemeye ve indirmeye başlar.

    Ardından, uygulama içi kurulumu gerçekleştirin:

    1. Uygulamanıza Firebase'i aktarın:

      Swift

      import FirebaseMLModelDownloader

      Objective-C

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

    1. Firebase konsolunda Firebase ML API'ler sayfasını açın.
    2. Projenizi henüz kullandıkça öde Blaze fiyatlandırma planına yükseltmediyseniz yükseltmek için Yükselt'i tıklayın. (Yalnızca projeniz Blaze fiyatlandırma planında değilse yükseltmeniz istenir.)

      Yalnızca Blaze fiyatlandırma planındaki projeler bulut tabanlı API'leri kullanabilir.

    3. Bulut tabanlı API'ler henüz etkinleştirilmediyse Bulut tabanlı API'leri etkinleştir'i tıklayın.

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

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

Swift

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

Objective-C

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

Bir sonraki adımda, Cloud Detector nesnesini oluştururken VisionCloudDetectorOptions nesnesini iletin.

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

Bir resimdeki önemli noktaları tanımak için resmi UIImage veya CMSampleBufferRef olarak VisionCloudLandmarkDetector'nin detect(in:) yöntemine iletin:

  1. VisionCloudLandmarkDetector örneğini alma:

    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çimlendirilmesi gerekir. UIImage 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, görüntüyü 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 alma

Önemli yer tanıma başarılı olursa VisionCloudLandmark nesnelerden oluşan bir dizi, tamamlama işleyicisine iletilir. Her nesneden, resimde tanınan bir önemli nokta hakkında bilgi edinebilirsiniz.

Ö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