Vous pouvez utiliser Firebase ML pour reconnaître des points de repère bien connus dans une image.
Avant que tu commences
- Si vous n'avez pas encore ajouté Firebase à votre application, faites-le en suivant les étapes du guide de démarrage .
- 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.
- Dans votre application, importez Firebase :
Rapide
import FirebaseMLModelDownloader
Objectif c
@import FirebaseMLModelDownloader;
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 .
Utilisez Swift Package Manager pour installer et gérer les dépendances Firebase.
https://github.com/firebase/firebase-ios-sdk.git
Ensuite, effectuez une configuration dans l'application :
Configurer le détecteur de repère
Par défaut, le détecteur Cloud utilise la version stable du modèle et renvoie jusqu'à 10 résultats. Si vous souhaitez modifier l'un de ces paramètres, spécifiez-les avec un objet VisionCloudDetectorOptions
comme dans l'exemple suivant :
Rapide
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
Objectif 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écutez le détecteur de points de repère
Pour reconnaître les points de repère dans une image, transmettez l'image en tant queUIImage
ou CMSampleBufferRef
à la méthode detect(in:)
de VisionCloudLandmarkDetector
:- Obtenez une instance de
VisionCloudLandmarkDetector
:Rapide
lazy var vision = Vision.vision() let cloudDetector = vision.cloudLandmarkDetector(options: options) // Or, to use the default settings: // let cloudDetector = vision.cloudLandmarkDetector()
Objectif c
FIRVision *vision = [FIRVision vision]; FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector]; // Or, to change the default settings: // FIRVisionCloudLandmarkDetector *landmarkDetector = // [vision cloudLandmarkDetectorWithOptions:options];
- Pour appeler Cloud Vision, l'image doit être formatée sous forme de chaîne codée en base64. Pour traiter une
UIImage
: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];
- Ensuite, transmettez l'image à la méthode
detect(in:)
:Rapide
cloudDetector.detect(in: visionImage) { landmarks, error in guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else { // ... return } // Recognized landmarks // ... }
Objectif c
[landmarkDetector detectInImage:image completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks, NSError *error) { if (error != nil) { return; } else if (landmarks != nil) { // Got landmarks } }];
Obtenez des informations sur les monuments reconnus
Si la reconnaissance des points de repère réussit, un tableau d'objetsVisionCloudLandmark
sera transmis au gestionnaire d'achèvement. A partir de chaque objet, vous pouvez obtenir des informations sur un point de repère reconnu dans l'image.Par exemple:
Rapide
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 }
Objectif 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]; }
Prochaines étapes
- Avant de déployer en production une application qui utilise une API Cloud, vous devez prendre quelques mesures supplémentaires pour prévenir et atténuer les effets d'un accès non autorisé à l'API .