Uygulamanızdan bir Google Cloud API'si çağırmak için yetkilendirmeyi işleyen ve API anahtarları gibi gizli değerleri koruyan bir ara REST API oluşturmanız gerekir. Ardından, bu ara hizmetle kimlik doğrulaması yapmak ve iletişim kurmak için mobil uygulamanızda kod yazmanız gerekir.
Bu REST API'yi oluşturmanın bir yolu, Firebase Authentication ve Functions'ı kullanmaktır. Bu sayede, Google Cloud API'lerine kimlik doğrulama işlemlerini gerçekleştiren ve önceden oluşturulmuş SDK'lar ile mobil uygulamanızdan çağrılabilen, yönetilen ve sunucusuz bir ağ geçidi elde edersiniz.
Bu kılavuzda, uygulamanızdan Cloud Vision API'yi ç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 faturalandırılmış hizmetlerine erişmesine olanak tanır. Bu nedenle, devam etmeden önce bu kimlik doğrulama mekanizmasının kullanım alanınız için yeterli olup olmadığını değerlendirin.
Başlamadan önce
Projenizi yapılandırın
Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımları uygulayarak ekleyin.Firebase bağımlılıklarını yüklemek ve yönetmek için Swift Package Manager'ı kullanın.
Firebase SDK'larını Apple projenize eklemenin farklı yollarını öğrenmek için- Xcode'da uygulama projeniz açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.
- İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
- Firebase ML kitaplığını seçin.
- Hedefinizin derleme ayarlarının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne
-ObjCişaretini ekleyin. - İşlem tamamlandığında Xcode, arka planda bağımlılıklarınızı otomatik olarak çözmeye ve indirmeye başlar.
https://github.com/firebase/firebase-ios-sdk.git
Ardından, uygulama içi kurulumu yapın:
- Uygulamanızda Firebase'i içe aktarın:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
Birkaç yapılandırma adımından sonra hazır olacağız:
-
Projeniz için bulut tabanlı API'leri henüz etkinleştirmediyseniz şimdi etkinleştirin:
- Firebase konsolunda Firebase MLAPI'ler sayfasını açın.
-
Projenizi henüz kullandıkça öde Blaze fiyatlandırma planına yükseltmediyseniz Yükselt'i tıklayarak yükseltin. (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.
- Bulut tabanlı API'ler henüz etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın.
- Mevcut Firebase API anahtarlarınızı Cloud Vision API'ye erişime izin vermeyecek şekilde yapılandırın:
- Cloud Console'un Kimlik bilgileri sayfasını açın.
- 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 API hariç mevcut tüm API'leri listeye ekleyin.
Çağrılabilir işlevi dağıtma
Ardından, uygulamanız ile Cloud Vision API arasında köprü oluşturmak için kullanacağınız Cloud Functions işlevini dağıtın. functions-samples deposunda kullanabileceğiniz bir örnek bulunmaktadır.
Varsayılan olarak, Cloud Vision API'ye bu işlev üzerinden erişildiğinde yalnızca uygulamanızın kimliği doğrulanmış kullanıcılarının Cloud Vision API'ye erişmesine izin verilir. İşlevi farklı gereksinimlere göre değiştirebilirsiniz.
İşlevi dağıtmak için:
- functions-samples deposunu klonlayın veya indirin ve
Node-1st-gen/vision-annotate-imagedizinine geçin:git clone https://github.com/firebase/functions-samplescd Node-1st-gen/vision-annotate-image - Bağımlılıkları yükleyin:
cd functionsnpm installcd .. - Firebase CLI'nız yoksa yükleyin.
vision-annotate-imagedizininde bir Firebase projesi başlatın. İstendiğinde listeden projenizi seçin.firebase init
- İşlevi dağıtın:
firebase deploy --only functions:annotateImage
Uygulamanıza Firebase Auth'u ekleme
Yukarıda dağıtılan çağrılabilir işlev, uygulamanızın kimliği doğrulanmamış kullanıcılarından gelen tüm istekleri reddeder. Henüz yapmadıysanız uygulamanıza Firebase Auth'u eklemeniz gerekir.
Uygulamanıza gerekli bağımlılıkları ekleme
Cloud Functions for Firebase kitaplığını yüklemek için Swift Package Manager'ı kullanın.
Artık resimleri etiketlemeye hazırsınız.
1. Giriş görüntüsünü hazırlama
Cloud Vision'ı çağırabilmek için resmin base64 kodlu dize olarak biçimlendirilmesi gerekir.UIImage işlemini gerçekleştirmek 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. Resmi etiketlemek için çağrılabilir işlevi çağırın.
Bir resimdeki nesneleri etiketlemek için JSON Cloud Vision isteği ileten çağrılabilir işlevi çağırın.Öncelikle bir Cloud Functions işlevi örneğini başlatın:
Swift
lazy var functions = Functions.functions()Objective-C
@property(strong, nonatomic) FIRFunctions *functions;Tür'ü
LABEL_DETECTIONolarak ayarlanmış 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"} };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
Resim etiketleme işlemi başarılı olursa görevin sonucunda BatchAnnotateImagesResponse adlı bir JSON yanıtı döndürülür.labelAnnotations dizisindeki her nesne, resimde etiketlenen bir öğeyi temsil eder. Her etiket için etiketin metin açıklamasını, Bilgi Grafiği varlık kimliğini (varsa) ve eşleşmenin güven puanını alabilirsiniz. Ö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"];
}