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, kimlik doğrulama işlemini gerçekleştiren ve önceden oluşturulmuş SDK'larla mobil uygulamanızdan çağrılabilen, Google Cloud API'lerine yönelik yönetilen ve sunucusuz bir ağ geçidi elde edersiniz.
Bu kılavuzda, bu tekniği kullanarak uygulamanızdan Cloud Vision API'yi çağırma yöntemi gösterilmektedir. Bu yöntem, kimliği doğrulanmış tüm kullanıcıların Cloud projeniz üzerinden Cloud Vision faturalandırılan 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ı göz önünde bulundurun.
Başlamadan önce
Projenizi yapılandırın
Firebase'i henüz uygulamanıza 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.
- 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.
-ObjCişaretini hedefinizin derleme ayarlarının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.- İşlem tamamlandığında Xcode, bağımlılıklarınızı otomatik olarak çözümlemeye ve arka planda indirmeye başlar.
https://github.com/firebase/firebase-ios-sdk.git
Ardından, uygulama içi kurulumu gerçekleştirin:
- Uygulamanızda Firebase'i içe aktarın:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
Birkaç yapılandırma adımından sonra kullanmaya başlayabilirsiniz:
-
Projeniz için bulut tabanlı API'leri henüz etkinleştirmediyseniz şimdi etkinleştirin:
- Firebase konsolunda Firebase ML API'ler sayfasını açın.
-
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 Cloud tabanlı API'leri kullanabilir.
- Bulut tabanlı API'ler etkinleştirilmemişse Bulut tabanlı API'leri etkinleştir'i tıklayın.
- Mevcut Firebase API anahtarlarınızı Cloud Vision API'ye erişimi engelleyecek ş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ç tüm kullanılabilir 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.
Bu işlev aracılığıyla Cloud Vision API'ye erişildiğinde, varsayılan olarak yalnızca uygulamanızın kimliği doğrulanmış kullanıcıları Cloud Vision API'ye erişebilir. İş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 Firebase Auth'u uygulamanıza eklemeniz gerekir.
Uygulamanıza gerekli bağımlılıkları ekleyin
Firebase için Cloud Functions kitaplığını yüklemek üzere 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ğırmak için resmin base64 kodlu 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];
2. Resmi etiketlemek için çağrılabilir işlevi çağırın.
Bir resimdeki nesneleri etiketlemek için JSON Cloud Vision isteği ileterek çağrılabilir işlevi çağırın.Öncelikle Cloud Functions'ın bir örneğini başlatın:
Swift
lazy var functions = Functions.functions()Objective-C
@property(strong, nonatomic) FIRFunctions *functions;Tür'ün
LABEL_DETECTIONolarak ayarlandığı 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. Etiketlenen nesneler hakkında bilgi edinme
Resim etiketleme işlemi başarılı olursa görevin sonucunda BatchAnnotateImagesResponse 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 öğe 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"];
}