Resimlerdeki iyi bilinen önemli noktaları tanımak için Firebase ML'yi kullanabilirsiniz.
Başlamadan önce
-
Uygulamanıza Firebase'i henüz eklemediyseniz başlangıç kılavuzundaki adımları uygulayarak bunu yapın.
- Xcode'da, uygulamanız açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.
- İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
- Firebase ML kitaplığını seçin.
-ObjC
işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.- İşlem tamamlandığında Xcode, arka planda bağımlılıklarınızı otomatik olarak çözümlemeye ve indirmeye başlar.
- Uygulamanızda Firebase'i içe aktarın:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
-
Projeniz için Cloud tabanlı API'leri henüz etkinleştirmediyseniz hemen etkinleştirin:
- Firebase konsolunun Firebase ML API'leri sayfasını açın.
-
Projenizi daha önce Blaze fiyatlandırma planına yükseltmediyseniz Yükselt'i tıklayarak yükseltme yapabilirsiniz. (Yalnızca projeniz Blaze planında değilse yükseltme yapmanız istenir.)
Bulut tabanlı API'ler yalnızca Blaze düzeyindeki projelerde kullanılabilir.
- Cloud tabanlı API'ler henüz etkinleştirilmemişse Cloud tabanlı API'leri etkinleştir'i tıklayın.
Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.
https://github.com/firebase/firebase-ios-sdk.git
Sonra, bazı uygulama içi kurulum işlemleri gerçekleştirin:
Önemli nokta algılayıcıyı yapılandırma
Cloud algılayıcısı, varsayılan olarak modelin kararlı sürümünü kullanır ve en fazla 10 sonuç döndürür. Bu ayarlardan herhangi birini değiştirmek isterseniz aşağıdaki örnekte gösterildiği gibi bir VisionCloudDetectorOptions
nesnesiyle bunları belirtin:
Swift
let options = VisionCloudDetectorOptions() options.modelType = .latest options.maxResults = 20
Objective-C
FIRVisionCloudDetectorOptions *options = [[FIRVisionCloudDetectorOptions alloc] init]; options.modelType = FIRVisionCloudModelTypeLatest; options.maxResults = 20;
Sonraki adımda Cloud algılayıcı nesnesini oluştururken VisionCloudDetectorOptions
nesnesini iletin.
Önemli nokta algılayıcıyı çalıştırma
Bir görüntüdeki önemli noktaları tanımak için görüntüyüVisionCloudLandmarkDetector
ürününün detect(in:)
yöntemine UIImage
veya CMSampleBufferRef
olarak iletin:
VisionCloudLandmarkDetector
öğesinin bir örneğini alın: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];
-
Cloud Vision'ı çağırmak için görüntünün base64 kodlu bir dize olarak biçimlendirilmelidir. Bir
UIImage
öğesini işlemek için: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];
-
Ardından resmi
detect(in:)
yöntemine iletin: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 } }];
Tanınan önemli noktalar hakkında bilgi alın
Önemli nokta tanıma işlemi başarılı olursa tamamlama işleyiciye birVisionCloudLandmark
nesne dizisi iletilir. Her nesneden resimde tanınan
bir önemli nokta hakkında bilgi edinebilirsiniz.
Örnek:
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]; }
Sonraki adımlar
- Cloud API kullanan bir uygulamanın üretimine dağıtmadan önce yetkisiz API erişiminin etkilerini önlemek ve azaltmak için ek adımlar atmanız gerekir.