Afin d'appeler une API Google Cloud depuis votre application, vous devez créer une API REST intermédiaire qui gère les autorisations et protège les valeurs secrètes telles que les clés API. Vous devez ensuite écrire du code dans votre application mobile pour vous authentifier et communiquer avec ce service intermédiaire.
Une façon de créer cette API REST consiste à utiliser l'authentification et les fonctions Firebase, qui vous offrent une passerelle gérée et sans serveur vers les API Google Cloud qui gère l'authentification et peut être appelée depuis votre application mobile avec des SDK prédéfinis.
Ce guide montre comment utiliser cette technique pour appeler l'API Cloud Vision depuis votre application. Cette méthode permettra à tous les utilisateurs authentifiés d'accéder aux services facturés Cloud Vision via votre projet Cloud. Vérifiez donc si ce mécanisme d'authentification est suffisant pour votre cas d'utilisation avant de continuer.
Avant que tu commences
Configurez votre projet
Si vous n'avez pas encore ajouté Firebase à votre application, faites-le en suivant les étapes du guide de démarrage .Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.
- Dans Xcode, avec votre projet d'application ouvert, accédez à File > Add Packages .
- Lorsque vous y êtes invité, ajoutez le référentiel SDK des plates-formes Apple Firebase :
- Choisissez la bibliothèque Firebase ML.
- Ajoutez l'indicateur
-ObjC
à la section Autres indicateurs de l'éditeur de liens des paramètres de construction de votre cible. - Une fois terminé, Xcode commencera automatiquement à résoudre et à télécharger vos dépendances en arrière-plan.
https://github.com/firebase/firebase-ios-sdk.git
Ensuite, effectuez une configuration dans l'application :
- Dans votre application, importez Firebase :
Rapide
import FirebaseMLModelDownloader
Objectif c
@import FirebaseMLModelDownloader;
Encore quelques étapes de configuration et nous sommes prêts à partir :
Si vous n'avez pas encore activé les API basées sur le cloud pour votre projet, faites-le maintenant :
- Ouvrez la page API Firebase ML de la console Firebase.
Si vous n'avez pas encore mis à niveau votre projet vers le plan tarifaire Blaze, cliquez sur Mettre à niveau pour le faire. (Vous serez invité à effectuer une mise à niveau uniquement si votre projet ne fait pas partie du plan Blaze.)
Seuls les projets de niveau Blaze peuvent utiliser des API basées sur le cloud.
- Si les API basées sur le cloud ne sont pas déjà activées, cliquez sur Activer les API basées sur le cloud .
- Configurez vos clés API Firebase existantes pour interdire l'accès à l'API Cloud Vision :
- Ouvrez la page Informations d'identification de la console Cloud.
- Pour chaque clé API de la liste, ouvrez la vue d'édition et dans la section Restrictions de clé, ajoutez toutes les API disponibles à la liste, à l'exception de l'API Cloud Vision.
Déployer la fonction appelable
Ensuite, déployez la fonction Cloud que vous utiliserez pour relier votre application et l'API Cloud Vision. Le référentiel functions-samples
contient un exemple que vous pouvez utiliser.
Par défaut, l'accès à l'API Cloud Vision via cette fonction permettra uniquement aux utilisateurs authentifiés de votre application d'accéder à l'API Cloud Vision. Vous pouvez modifier la fonction pour différentes exigences.
Pour déployer la fonction :
- Clonez ou téléchargez le dépôt de fonctions-échantillons et accédez au répertoire
Node-1st-gen/vision-annotate-image
:git clone https://github.com/firebase/functions-samples
cd Node-1st-gen/vision-annotate-image
- Installer les dépendances :
cd functions
npm install
cd ..
- Si vous ne disposez pas de la CLI Firebase, installez-la .
- Initialisez un projet Firebase dans le répertoire
vision-annotate-image
. Lorsque vous y êtes invité, sélectionnez votre projet dans la liste.firebase init
- Déployer la fonction :
firebase deploy --only functions:annotateImage
Ajoutez Firebase Auth à votre application
La fonction appelable déployée ci-dessus rejettera toute demande d'utilisateurs non authentifiés de votre application. Si vous ne l'avez pas déjà fait, vous devrez ajouter Firebase Auth à votre application.
Ajoutez les dépendances nécessaires à votre application
Utilisez Swift Package Manager pour installer la bibliothèque Cloud Functions pour Firebase.
Vous êtes maintenant prêt à étiqueter les images.
1. Préparez l'image d'entrée
Pour appeler Cloud Vision, l'image doit être formatée sous forme de chaîne codée en base64. Pour traiter uneUIImage
: Rapide
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
Objectif c
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
2. Invoquez la fonction appelable pour étiqueter l'image
Pour étiqueter des objets dans une image, appelez la fonction appelable en transmettant une requête JSON Cloud Vision .Tout d’abord, initialisez une instance de Cloud Functions :
Rapide
lazy var functions = Functions.functions()
Objectif c
@property(strong, nonatomic) FIRFunctions *functions;
Créez une requête avec Type défini sur
LABEL_DETECTION
:Rapide
let requestData = [ "image": ["content": base64encodedImage], "features": ["maxResults": 5, "type": "LABEL_DETECTION"] ]
Objectif c
NSDictionary *requestData = @{ @"image": @{@"content": base64encodedImage}, @"features": @{@"maxResults": @5, @"type": @"LABEL_DETECTION"} };
Enfin, appelez la fonction :
Rapide
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] } // ... } }
Objectif 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. Obtenez des informations sur les objets étiquetés
Si l'opération d'étiquetage de l'image réussit, une réponse JSON de BatchAnnotateImagesResponse sera renvoyée dans le résultat de la tâche. Chaque objet du tableaulabelAnnotations
représente quelque chose qui a été étiqueté dans l'image. Pour chaque étiquette, vous pouvez obtenir la description textuelle de l'étiquette, son ID d'entité Knowledge Graph (si disponible) et le score de confiance de la correspondance. Par exemple: Rapide
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"]
}
}
Objectif c
NSArray *labelArray = result.data[@"labelAnnotations"];
for (NSDictionary *labelObj in labelArray) {
NSString *text = labelObj[@"description"];
NSString *entityId = labelObj[@"mid"];
NSNumber *confidence = labelObj[@"score"];
}