Mit Firebase ML können Sie bekannte Orientierungspunkte in einem Bild erkennen.
Bevor Sie beginnen
- Wenn Sie Firebase noch nicht zu Ihrer App hinzugefügt haben, befolgen Sie dazu die Schritte im Leitfaden „Erste Schritte“ .
- Navigieren Sie in Xcode bei geöffnetem App-Projekt zu File > Add Packages .
- Wenn Sie dazu aufgefordert werden, fügen Sie das Firebase Apple Platforms SDK-Repository hinzu:
- Wählen Sie die Firebase ML-Bibliothek.
- Fügen Sie das Flag
-ObjC
zum Abschnitt „Andere Linker-Flags“ der Build-Einstellungen Ihres Ziels hinzu. - Wenn Sie fertig sind, beginnt Xcode automatisch mit der Auflösung und dem Herunterladen Ihrer Abhängigkeiten im Hintergrund.
- Importieren Sie Firebase in Ihre App:
Schnell
import FirebaseMLModelDownloader
Ziel c
@import FirebaseMLModelDownloader;
Wenn Sie cloudbasierte APIs für Ihr Projekt noch nicht aktiviert haben, tun Sie dies jetzt:
- Öffnen Sie die Seite „Firebase ML APIs“ der Firebase-Konsole.
Wenn Sie Ihr Projekt noch nicht auf den Blaze-Preisplan aktualisiert haben, klicken Sie dazu auf „Upgrade“ . (Sie werden nur dann zum Upgrade aufgefordert, wenn Ihr Projekt nicht im Blaze-Plan enthalten ist.)
Nur Projekte auf Blaze-Ebene können cloudbasierte APIs verwenden.
- Wenn Cloud-basierte APIs noch nicht aktiviert sind, klicken Sie auf Cloud-basierte APIs aktivieren .
Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.
https://github.com/firebase/firebase-ios-sdk.git
Führen Sie als Nächstes einige In-App-Einrichtungen durch:
Konfigurieren Sie den Orientierungspunktdetektor
Standardmäßig verwendet der Cloud-Detektor die stabile Version des Modells und gibt bis zu 10 Ergebnisse zurück. Wenn Sie eine dieser Einstellungen ändern möchten, geben Sie sie wie im folgenden Beispiel mit einem VisionCloudDetectorOptions
-Objekt an:
Schnell
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
Ziel c
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
Übergeben Sie im nächsten Schritt das VisionCloudDetectorOptions
Objekt, wenn Sie das Cloud Detector-Objekt erstellen.
Führen Sie den Orientierungspunktdetektor aus
Um Orientierungspunkte in einem Bild zu erkennen, übergeben Sie das Bild alsUIImage
oder CMSampleBufferRef
an die Methode detect(in:)
von VisionCloudLandmarkDetector
:- Holen Sie sich eine Instanz von
VisionCloudLandmarkDetector
:Schnell
lazy var vision = Vision.vision() let cloudDetector = vision.cloudLandmarkDetector(options: options) // Or, to use the default settings: // let cloudDetector = vision.cloudLandmarkDetector()
Ziel c
FIRVision *vision = [FIRVision vision]; FIRVisionCloudLandmarkDetector *landmarkDetector = [vision cloudLandmarkDetector]; // Or, to change the default settings: // FIRVisionCloudLandmarkDetector *landmarkDetector = // [vision cloudLandmarkDetectorWithOptions:options];
- Um Cloud Vision aufzurufen, muss das Bild als Base64-codierte Zeichenfolge formatiert werden. So verarbeiten Sie ein
UIImage
:Schnell
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
Ziel c
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
- Übergeben Sie dann das Bild an die Methode
detect(in:)
:Schnell
cloudDetector.detect(in: visionImage) { landmarks, error in guard error == nil, let landmarks = landmarks, !landmarks.isEmpty else { // ... return } // Recognized landmarks // ... }
Ziel c
[landmarkDetector detectInImage:image completion:^(NSArray<FIRVisionCloudLandmark *> *landmarks, NSError *error) { if (error != nil) { return; } else if (landmarks != nil) { // Got landmarks } }];
Informieren Sie sich über die anerkannten Sehenswürdigkeiten
Wenn die Orientierungspunkterkennung erfolgreich ist, wird ein Array vonVisionCloudLandmark
Objekten an den Abschlusshandler übergeben. Von jedem Objekt können Sie Informationen über einen im Bild erkannten Orientierungspunkt erhalten.Zum Beispiel:
Schnell
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 }
Ziel 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]; }
Nächste Schritte
- Bevor Sie eine App, die eine Cloud-API verwendet, für die Produktion bereitstellen, sollten Sie einige zusätzliche Schritte unternehmen, um die Auswirkungen eines unbefugten API-Zugriffs zu verhindern und abzuschwächen .