Uygulamanızdan bir Google Cloud API çağırmak için, yetkilendirmeyi işleyen ve API anahtarları gibi gizli değerleri koruyan bir ara REST API'si oluşturmanız gerekir. Ardından, bu ara hizmette kimlik doğrulaması yapmak ve onunla iletişim kurmak için mobil uygulamanıza kod yazmanız gerekir.
Bu REST API'yi oluşturmanın bir yolu, kimlik doğrulamayı işleyen ve önceden oluşturulmuş SDK'larla mobil uygulamanızdan çağrılabilen Google Cloud API'lerine yönetilen, sunucusuz bir ağ geçidi sağlayan Firebase Authentication and Functions'ı kullanmaktır.
Bu kılavuz, uygulamanızdan Cloud Vision API'yi çağırmak için bu tekniğin nasıl kullanılacağını gösterir. Bu yöntem, kimliği doğrulanmış tüm kullanıcıların Cloud projeniz aracılığıyla Cloud Vision faturalandırılmış hizmetlerine erişmesine izin verecektir, bu nedenle devam etmeden önce bu kimlik doğrulama mekanizmasının kullanım durumunuz için yeterli olup olmadığını düşünün.
Sen başlamadan önce
projenizi yapılandırın
Firebase'i uygulamanıza henüz eklemediyseniz başlangıç kılavuzundaki adımları izleyerek bunu yapın.Firebase bağımlılıklarını kurmak ve yönetmek için Swift Paket Yöneticisi'ni kullanın.
- Xcode'da, uygulama projeniz açıkken File > Add Packages seçeneğine gidin.
- İstendiğinde, Firebase Apple platformları SDK deposunu ekleyin:
- Firebase ML kitaplığını seçin.
- Bittiğinde, Xcode otomatik olarak arka planda bağımlılıklarınızı çözmeye ve indirmeye başlayacaktır.
https://github.com/firebase/firebase-ios-sdk
Ardından, bazı uygulama içi kurulumları gerçekleştirin:
- Uygulamanızda Firebase'i içe aktarın:
Süratli
import FirebaseMLModelDownloader
Amaç-C
@import FirebaseMLModelDownloader;
Birkaç yapılandırma adımı daha ve başlamaya hazırız:
Projeniz için Bulut tabanlı API'leri henüz etkinleştirmediyseniz şimdi etkinleştirin:
- Firebase konsolunun Firebase ML API'leri sayfasını açın.
Projenizi Blaze fiyatlandırma planına henüz yükseltmediyseniz, bunu yapmak için Yükselt'e tıklayın. (Yalnızca projeniz Blaze planında değilse yükseltme yapmanız istenecektir.)
Yalnızca Blaze düzeyindeki projeler Bulut tabanlı API'leri kullanabilir.
- Bulut tabanlı API'ler zaten etkinleştirilmemişse, Bulut tabanlı API'leri Etkinleştir seçeneğine tıklayın.
- Cloud Vision API'ye erişimi engellemek için mevcut Firebase API anahtarlarınızı yapılandırın:
- Bulut konsolunun Kimlik Bilgileri sayfasını açın.
- Listedeki her bir 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 dışında mevcut tüm API'leri listeye ekleyin.
Çağrılabilir işlevi dağıtın
Ardından, uygulamanız ile Cloud Vision API arasında köprü kurmak için kullanacağınız Bulut İşlevini dağıtın. functions-samples
deposu, kullanabileceğiniz bir örnek içerir.
Varsayılan olarak, bu işlev aracılığıyla Cloud Vision API'ye erişim, yalnızca uygulamanızın kimliği doğrulanmış kullanıcılarının Cloud Vision API'ye erişmesine izin verir. İşlevi farklı gereksinimler için değiştirebilirsiniz.
İşlevi dağıtmak için:
- İşlev örnekleri deposunu kopyalayın veya indirin ve
Node-1st-gen/vision-annotate-image
dizinine değiştirin:git clone https://github.com/firebase/functions-samples
cd Node-1st-gen/vision-annotate-image
- Bağımlılıkları yükleyin:
cd functions
npm install
cd ..
- Firebase CLI'niz yoksa kurun .
-
vision-annotate-image
dizininde 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 ekleyin
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 eklemeniz gerekir.
Uygulamanıza gerekli bağımlılıkları ekleyin
Cloud Functions for Firebase kitaplığını yüklemek için Swift Paket Yöneticisi'ni kullanın.
Artık görüntüleri etiketlemeye hazırsınız.
1. Giriş görüntüsünü hazırlayın
Cloud Vision'ı çağırmak için görüntünün base64 kodlu bir dize olarak biçimlendirilmesi gerekir. BirUIImage
işlemek için:Süratli
guard let imageData = uiImage.jpegData(compressionQuality: 1.0f) else { return } let base64encodedImage = imageData.base64EncodedString()
Amaç-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, bir JSON Cloud Vision isteğini ileten çağrılabilir işlevi çağırın.İlk olarak, bir Cloud Functions örneğini başlatın:
Süratli
lazy var functions = Functions.functions()
Amaç-C
@property(strong, nonatomic) FIRFunctions *functions;
Type
LABEL_DETECTION
olarak ayarlanmış bir istek oluşturun:Süratli
let requestData = [ "image": ["content": base64encodedImage], "features": ["maxResults": 5, "type": "LABEL_DETECTION"] ]
Amaç-C
NSDictionary *requestData = @{ @"image": @{@"content": base64encodedImage}, @"features": @{@"maxResults": @5, @"type": @"LABEL_DETECTION"} };
Son olarak, işlevi çağırın:
Süratli
functions.httpsCallable("annotateImage").call(requestData) { (result, error) in 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] } // ... } // Function completed successfully }
Amaç-C
[[_functions HTTPSCallableWithName:@"annotateImage"] callWithObject:requestData completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) { if (error) { if (error.domain == FIRFunctionsErrorDomain) { FIRFunctionsErrorCode code = error.code; NSString *message = error.localizedDescription; NSObject *details = error.userInfo[FIRFunctionsErrorDetailsKey]; } // ... } // Function completed succesfully // Get information about labeled objects }];
3. Etiketli nesneler hakkında bilgi edinin
Görüntü etiketleme işlemi başarılı olursa, görevin sonucunda BatchAnnotateImagesResponse JSON yanıtı döndürülür.labelAnnotations
dizisindeki her nesne, görüntüde etiketlenmiş 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: Süratli
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"]
}
}
Amaç-C
NSArray *labelArray = result.data[@"labelAnnotations"];
for (NSDictionary *labelObj in labelArray) {
NSString *text = labelObj[@"description"];
NSString *entityId = labelObj[@"mid"];
NSNumber *confidence = labelObj[@"score"];
}