Vous pouvez utiliser Firebase ML pour reconnaître des points de repère connus dans une image.
Avant de commencer
-
Si vous n'avez pas encore ajouté Firebase à votre application, suivez les
les étapes du guide de démarrage.
- Dans Xcode, ouvrez le projet de votre application, puis accédez à File > Ajouter des packages.
- Lorsque vous y êtes invité, ajoutez le dépôt du SDK des plates-formes Firebase pour Apple :
- Sélectionnez la bibliothèque Firebase ML.
- Ajoutez l'indicateur
-ObjC
à la section Other Linker Flags (Autres indicateurs Linker) des paramètres de compilation de votre cible. - Lorsque vous avez terminé, Xcode commence à résoudre et à télécharger automatiquement vos dépendances en arrière-plan.
- Dans votre application, importez Firebase:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
-
Si vous n'avez pas encore activé les API dans le cloud pour votre projet, faites-le dès maintenant:
- Ouvrez le Firebase ML page des API de la console Firebase.
-
Si vous n'avez pas encore fait passer votre projet au forfait Blaze, cliquez sur Pour ce faire, effectuez une mise à niveau. (Vous ne serez invité à effectuer la mise à niveau projet n'est pas inclus dans la formule Blaze.)
Seuls les projets de niveau Blaze peuvent utiliser des API dans le cloud.
- Si les API dans le cloud ne sont pas déjà activées, cliquez sur Activer les services API.
Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.
https://github.com/firebase/firebase-ios-sdk.git
Ensuite, effectuez la configuration dans l'application:
Configurer le détecteur de points de repère
Par défaut, le détecteur de cloud utilise la version stable du modèle
renvoie jusqu'à 10 résultats. Si vous souhaitez
modifier l'un de ces paramètres,
spécifiez-les avec un objet VisionCloudDetectorOptions
dans l'exemple suivant:
Swift
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
Objective-C
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
À l'étape suivante, transmettez l'objet VisionCloudDetectorOptions
lorsque vous créez l'objet détecteur Cloud.
Exécuter le détecteur de points de repère
Pour reconnaître des repères dans une image, transmettez l'image en tant queUIImage
ou CMSampleBufferRef
à la méthode detect(in:)
de VisionCloudLandmarkDetector
:
- Obtenez une instance de
VisionCloudLandmarkDetector
:Swift
lazy var vision = Vision.vision() let cloudDetector = vision.cloudLandmarkDetector(options: options) // Or, to use the default settings: // let cloudDetector = vision.cloudLandmarkDetector()
Objective-C
FIRVision *vision = [FIRVision vision]; FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector]; // Or, to change the default settings: // FIRVisionCloudLandmarkDetector *landmarkDetector = // [vision cloudLandmarkDetectorWithOptions:options];
-
Pour que vous puissiez appeler Cloud Vision, l'image doit être encodée en base64
. Pour traiter une
UIImage
: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];
-
Transmettez ensuite l'image à la méthode
detect(in:)
:Swift
cloudDetector.detect(in: visionImage) { landmarks, error in guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else { // ... return } // Recognized landmarks // ... }
Objective-C
[landmarkDetector detectInImage:image completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks, NSError *error) { if (error != nil) { return; } else if (landmarks != nil) { // Got landmarks } }];
Obtenir des informations sur les points de repère reconnus
Si la reconnaissance des points de repère réussit, un tableau deVisionCloudLandmark
sont transmis au gestionnaire d'achèvement. À partir de chaque objet, vous pouvez obtenir
des informations relatives à un point de repère reconnu dans l'image.
Exemple :
Swift
for landmark in landmarks { let landmarkDesc = landmark.landmark let boundingPoly = landmark.frame let entityId = landmark.entityId // A landmark can have multiple locations: for example, the location the image // was taken, and the location of the landmark depicted. for location in landmark.locations { let latitude = location.latitude let longitude = location.longitude } let confidence = landmark.confidence }
Objective-C
for (FIRVisionCloudLandmark *landmark in landmarks) { NSString *landmarkDesc = landmark.landmark; CGRect frame = landmark.frame; NSString *entityId = landmark.entityId; // A landmark can have multiple locations: for example, the location the image // was taken, and the location of the landmark depicted. for (FIRVisionLatitudeLongitude *location in landmark.locations) { double latitude = [location.latitude doubleValue]; double longitude = [location.longitude doubleValue]; } float confidence = [landmark.confidence floatValue]; }
Étapes suivantes
- Avant de déployer en production une application qui utilise une API Cloud, vous devez effectuer quelques mesures supplémentaires pour prévenir et atténuer l'effet d'un accès non autorisé à l'API.