Za pomocą Firebase ML możesz oznaczać etykietami obiekty rozpoznane na obrazie. Zobacz Overview (przegląd), aby uzyskać informacje o tym interfejsie API funkcje zabezpieczeń.
.Zanim zaczniesz
-
Jeśli nie masz jeszcze w aplikacji dodanej Firebase, wykonaj
przeczytaj przewodnik dla początkujących.
- W Xcode po otwarciu projektu aplikacji przejdź do File > Dodaj pakiety.
- Gdy pojawi się prośba, dodaj repozytorium SDK platform Apple Platform SDK Firebase:
- Wybierz bibliotekę Firebase ML.
- Dodaj flagę
-ObjC
do sekcji Inne flagi łączące w ustawieniach kompilacji celu. - Po zakończeniu Xcode automatycznie rozpocznie rozpoznawanie i pobieranie lub zależności w tle.
- W aplikacji zaimportuj Firebase:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
-
Jeśli w swoim projekcie nie włączono jeszcze interfejsów API działających w chmurze, zrób to. teraz:
- Otwórz Firebase ML Strona interfejsów API w konsoli Firebase.
-
Jeśli Twój projekt nie został jeszcze przeniesiony na abonament Blaze, kliknij Aby to zrobić, przejdź na wyższą wersję. (Prośba o uaktualnienie wyświetli się tylko wtedy, gdy projekt nie jest objęty abonamentem Blaze).
Tylko projekty na poziomie Blaze mogą korzystać z interfejsów API działających w chmurze.
- Jeśli interfejsy API działające w chmurze nie są włączone, kliknij Włącz działające w chmurze interfejsów API.
Użyj menedżera pakietów Swift, aby zainstalować zależności Firebase i nimi zarządzać.
https://github.com/firebase/firebase-ios-sdk.git
Następnie skonfiguruj w aplikacji:
Teraz możesz dodać etykiety do obrazów.
1. Przygotowywanie obrazu wejściowego
Utwórz obiekt VisionImage
za pomocą UIImage
lub
CMSampleBufferRef
.
Aby użyć karty UIImage
:
- W razie potrzeby obróć zdjęcie, tak by jego
imageOrientation
właściwość to.up
. - Utwórz obiekt
VisionImage
przy użyciu prawidłowo wykonanej rotacjiUIImage
Nie określaj żadnych metadanych rotacji – są to metadane domyślne..topLeft
.Swift
let image = VisionImage(image: uiImage)
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
Aby użyć karty CMSampleBufferRef
:
-
Utwórz obiekt
VisionImageMetadata
, który określa orientacji danych zdjęć zawartych w BuforCMSampleBufferRef
.Aby sprawdzić orientację obrazu:
Swift
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> VisionDetectorImageOrientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftTop : .rightTop case .landscapeLeft: return cameraPosition == .front ? .bottomLeft : .topLeft case .portraitUpsideDown: return cameraPosition == .front ? .rightBottom : .leftBottom case .landscapeRight: return cameraPosition == .front ? .topRight : .bottomRight case .faceDown, .faceUp, .unknown: return .leftTop } }
Objective-C
- (FIRVisionDetectorImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationLeftTop; } else { return FIRVisionDetectorImageOrientationRightTop; } case UIDeviceOrientationLandscapeLeft: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationBottomLeft; } else { return FIRVisionDetectorImageOrientationTopLeft; } case UIDeviceOrientationPortraitUpsideDown: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationRightBottom; } else { return FIRVisionDetectorImageOrientationLeftBottom; } case UIDeviceOrientationLandscapeRight: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationTopRight; } else { return FIRVisionDetectorImageOrientationBottomRight; } default: return FIRVisionDetectorImageOrientationTopLeft; } }
Następnie utwórz obiekt metadanych:
Swift
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
Objective-C
FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
- Utwórz obiekt
VisionImage
za pomocą ObiektCMSampleBufferRef
i metadane rotacji:Swift
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. Skonfiguruj i uruchom osobę oznaczającą obrazy
Aby oznaczyć etykietami obiekty na obrazie, przekaż obiektVisionImage
do funkcji
Metoda processImage()
użytkownika VisionImageLabeler
.
Najpierw pobierz instancję
VisionImageLabeler
:Swift
let labeler = Vision.vision().cloudImageLabeler() // Or, to set the minimum confidence required: // let options = VisionCloudImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().cloudImageLabeler(options: options)
Objective-C
FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionCloudImageLabelerOptions *options = // [[FIRVisionCloudImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] cloudImageLabelerWithOptions:options];
Następnie przekaż obraz do metody
processImage()
:Swift
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
Objective-C
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. Uzyskiwanie informacji o obiektach oznaczonych etykietami
Jeśli można oznaczyć obrazy etykietami, tablicaVisionImageLabel
są przekazywane do modułu obsługi uzupełniania. Z każdego obiektu możesz uzyskać
informacje o obiekcie rozpoznanym na zdjęciu.
Przykład:
Swift
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
Objective-C
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
Dalsze kroki
- Przed wdrożeniem w środowisku produkcyjnym aplikacji korzystającej z interfejsu Cloud API wykonaj dodatkowe kroki, które zapobiegają i ograniczają efekt nieautoryzowanego dostępu do interfejsu API.