Apple platformlarında Firebase Auth ve Functions işlevlerini kullanarak Cloud Vision ile Resimleri Güvenli Şekilde Etiketleyin

Uygulamanızdan Google Cloud API çağırmak için bir ara uygulama oluşturmanız gerekir Yetkilendirme işleyen ve API anahtarları gibi gizli değerleri koruyan REST API. Daha sonra yapmanız gerekenler bu ara hizmetle kimlik doğrulaması yapmak ve bu hizmetle iletişim kurmak için mobil uygulamanızda kod yazmanızı öneririz.

Bu REST API'yi oluşturmanın bir yolu da Firebase Authentication and Functions'ı kullanmaktır. Bu da size yönetilen, sunucusuz bir ağ geçidi Kimlik doğrulama yapan ve mobil uygulamanızdan çağrılabilen Google Cloud API'leri SDK'ları kullanabilirsiniz.

Bu kılavuzda, Cloud Vision API'yi uygulamanızdan çağırmak için bu tekniğin nasıl kullanılacağı gösterilmektedir. Bu yöntem, kimliği doğrulanmış tüm kullanıcıların Cloud projeniz üzerinden Cloud Vision'da faturalandırılan hizmetlere erişmesine olanak tanır. Devam etmeden önce bu kimlik doğrulama mekanizmasının kullanım alanınız için yeterli olup olmadığını değerlendirin.

ziyaret edin.

Başlamadan önce

Projenizi yapılandırın

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, uygulamanız 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ğlayabilirsiniz.

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;

Birkaç yapılandırma adımı daha tamamladıktan sonra başlamaya hazırız:

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

    1. Firebase ML Firebase konsolunun API'ler sayfası.
    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.
  2. Cloud'a erişimi engellemek için mevcut Firebase API anahtarlarınızı yapılandırın Vision API:
    1. Cloud Console'un Kimlik Bilgileri sayfasını açın.
    2. Listedeki her API anahtarı için düzenleme görünümünü açın ve Anahtar Kısıtlamalar bölümünde, Cloud Vision haricindeki tüm mevcut API'leri ekleyin. API'yi ekleyin.

Çağrılabilir işlevi dağıtma

Ardından, uygulamanız ile Cloud arasında köprü kurmak için kullanacağınız Cloud Functions işlevini dağıtın Vision API. functions-samples deposu, örnek içeriyor kullanabilirsiniz.

Varsayılan olarak, Cloud Vision API'ye bu işlev üzerinden erişmek yalnızca uygulamanızın kimliği doğrulanmış kullanıcılarının Cloud Vision API'ye erişmesini sağlayın. Şunları yapabilirsiniz: işlevi farklı gereksinimlere göre değiştirebilir.

İşlevi dağıtmak için:

  1. functions-samples deposunu klonlama veya indirme ve Node-1st-gen/vision-annotate-image dizinine geçiş yapın:
    git clone https://github.com/firebase/functions-samples
    cd Node-1st-gen/vision-annotate-image
    
  2. Bağımlılıkları yükleyin:
    cd functions
    npm install
    cd ..
  3. Firebase CLI'ınız yoksa yükleyin.
  4. vision-annotate-image içinde bir Firebase projesi başlatın dizin. İstendiğinde listeden projenizi seçin.
    firebase init
  5. İşlevi dağıtın:
    firebase deploy --only functions:annotateImage

Firebase Auth'u uygulamanıza ekleyin

Yukarıda dağıtılan çağrılabilir işlev, kimliği doğrulanmamıştan gelen tüm istekleri reddeder en iyi uygulamaları paylaşacağız. Henüz yapmadıysanız Firebase'i Uygulamanız için kimlik doğrulama.

Gerekli bağımlılıkları uygulamanıza ekleyin

Cloud Functions for Firebase kitaplığını yüklemek için Swift Package Manager'ı kullanın.

Artık görüntüleri etiketlemeye hazırsınız.

1. Giriş resmini hazırlama

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];

2. Görüntüyü etiketlemek için çağrılabilir işlevi çağırın

Bir görüntüdeki nesneleri etiketlemek için JSON Cloud Vision isteği.

  1. Öncelikle bir Cloud Functions örneğini başlatın:

    Swift

    lazy var functions = Functions.functions()
    

    Objective-C

    @property(strong, nonatomic) FIRFunctions *functions;
    
  2. TürLABEL_DETECTION olarak ayarlayan bir istek oluşturun:

    Swift

    let requestData = [
      "image": ["content": base64encodedImage],
      "features": ["maxResults": 5, "type": "LABEL_DETECTION"]
    ]
    

    Objective-C

    NSDictionary *requestData = @{
      @"image": @{@"content": base64encodedImage},
      @"features": @{@"maxResults": @5, @"type": @"LABEL_DETECTION"}
    };
    
  3. Son olarak, işlevi çağırın:

    Swift

    do {
      let result = try await functions.httpsCallable("annotateImage").call(requestData)
      print(result)
    } catch {
      if let error = error as NSError? {
        if error.domain == FunctionsErrorDomain {
          let code = FunctionsErrorCode(rawValue: error.code)
          let message = error.localizedDescription
          let details = error.userInfo[FunctionsErrorDetailsKey]
        }
        // ...
      }
    }
    

    Objective-C

    [[_functions HTTPSCallableWithName:@"annotateImage"]
                              callWithObject:requestData
                                  completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {
            if (error) {
              if ([error.domain isEqualToString:@"com.firebase.functions"]) {
                FIRFunctionsErrorCode code = error.code;
                NSString *message = error.localizedDescription;
                NSObject *details = error.userInfo[@"details"];
              }
              // ...
            }
            // Function completed succesfully
            // Get information about labeled objects
    
          }];
    

3. Etiketli nesneler hakkında bilgi edinme

Görüntü etiketleme işlemi başarılı olursa BatchAnnotateImagesResponse değeri, görevin sonucunda döndürülür. labelAnnotations içindeki her nesne dizisi, resimde etiketli bir şeyi temsil eder. Her etiket için Etiketin metin açıklamasını, yani Bilgi Grafiği varlık kimliği (varsa) ve eşleşmenin güven puanı. Örneğin:

Swift

if let labelArray = (result?.data as? [String: Any])?["labelAnnotations"] as? [[String:Any]] {
  for labelObj in labelArray {
    let text = labelObj["description"]
    let entityId = labelObj["mid"]
    let confidence = labelObj["score"]
  }
}

Objective-C

NSArray *labelArray = result.data[@"labelAnnotations"];
for (NSDictionary *labelObj in labelArray) {
  NSString *text = labelObj[@"description"];
  NSString *entityId = labelObj[@"mid"];
  NSNumber *confidence = labelObj[@"score"];
}