Bu kılavuzda, iOS için Firebase'de ML Kit'ten nasıl geçiş yapılacağı açıklanmaktadır.
Ön koşullar
Kodunuzu taşımaya başlamadan önce aşağıdaki koşulları karşıladığınızdan emin olun:
- ML Kit, Xcode 13.2.1 veya sonraki sürümleri destekler.
- ML Kiti, iOS 15.5 veya sonraki sürümleri destekler.
- ML Kiti, 32 bit mimarileri (i386 ve armv7) desteklemez. ML Kit, 64 bit mimarileri (x86_64 ve arm64) destekler.
- ML Kit kitaplığı yalnızca cocoapods olarak sağlanır. Framework'leri ve Cocoapods'i birlikte kullanamazsınız. Bu nedenle, bu kitaplığı kullanmak için önce Cocoapods'e geçmeniz gerekir.
Cocoapods'u güncelleme
Uygulamanızın Podfile'ında ML Kit iOS cocoapods'larının bağımlılıklarını güncelleyin:
| API | Eski kapsül adları | Yeni pod adı |
|---|---|---|
| Barkod tarama | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| Yüz algılama | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| Resim etiketleme | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| Nesne algılama ve izleme | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| Metin tanıma | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| AutoML görüntü etiketleme (paketlenmiş model) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| AutoML görüntü etiketleme (model indirildi) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom Özel modelleri barındırmak ve indirmek için modellerinizi Cloud Storage'a taşıyın ve bunları yerel model olarak yüklemek için uygulamanıza indirme mantığı ekleyin. Ayrıntılar için Firebase ML'den Cloud Storage'a taşıma kılavuzuna bakın. |
| Dil kimliği | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| Akıllı yanıt | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| Çeviri | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
Sınıfların, numaralandırılmış türlerin ve türlerin adlarını güncelleme
Genel olarak sınıfların, numaralandırmaların ve türlerin aşağıdaki şekilde yeniden adlandırılması gerekir:
- Swift: Sınıf adlarından ve numaralandırmalardan
Visionönekini kaldırın - Objective-C: Hem
FIRVisionhem deFIRsınıf adını ve enum önekleriniMLKile değiştirin.
Bazı sınıf adları ve türleri için bu genel kural geçerli değildir:
Swift
| Eski sınıf veya tür | Yeni sınıf veya tür |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel Manuel olarak indirilmesi gerekir. Firebase'de barındırılan uzaktan modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a taşıma kılavuzuna bakın. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (değişiklik yok) |
| VisionPoint | VisionPoint (değişiklik yok) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| Eski sınıf veya tür | Yeni sınıf veya tür |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel Manuel olarak indirilmesi gerekir. Firebase'de barındırılan uzaktan modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a taşıma kılavuzuna bakın. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
Yöntem adlarını güncelleme
Yöntem adlarını şu kurallara göre güncelleyin:
Alan adı giriş noktası sınıfları (
Vision,NaturalLanguage) artık mevcut değil. Bu sınıfların yerini göreve özel sınıflar aldı. Algılayıcıları almak için çeşitli fabrika yöntemlerine yapılan çağrıları, her algılayıcının fabrika yöntemine yapılan doğrudan çağrılarla değiştirin.VisionImageMetadatasınıfı,VisionDetectorImageOrientationenum'u ile birlikte kaldırıldı. Bir resmin görüntüleme yönünü belirtmek içinVisionImageöğesininorientationözelliğini kullanın.Yeni bir
TextRecognizerörneği alanonDeviceTextRecognizeryöntemi,textRecognizerolarak yeniden adlandırıldı.Güven özelliği,
TextElement,TextLineveTextBlockdahil olmak üzere metin tanıma sonucu sınıflarından kaldırıldı.Yeni bir
ImageLabelerörneği almak için kullanılanonDeviceImageLabelerveonDeviceImageLabeler(options:)yöntemleri birleştirilerekimageLabeler(options:)olarak yeniden adlandırıldı.Yeni bir
ObjectDetectorörneği almak için kullanılanobjectDetectoryöntemi kaldırıldı. Bunun yerineobjectDetector(options:)politikasını kullanın.typeözelliği,ImageLabeleröğesinden kaldırıldı.entityIDözelliği ise görsel etiketleme sonucu sınıfıImageLabelöğesinden kaldırıldı.Barkod tarama API'si
detect(in _:, completion:), diğer Vision API'leriyle tutarlı olması içinprocess(_:, completion:)olarak yeniden adlandırıldı.Natural Language API'leri artık "dil kodu" yerine "dil etiketi" (BCP-47 standardında tanımlandığı şekliyle) terimini kullanıyor.
TranslateLanguageartık sabitleri için dil etiketleri (ör..en) yerine okunabilir adlar (ör..english) kullanıyor.
Eski ve yeni Swift yöntemlerine dair bazı örnekler:
Önceki
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
Yeni
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
Eski ve yeni Objective-C yöntemlerine dair bazı örnekleri aşağıda bulabilirsiniz:
Önceki
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
Yeni
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
API'ye özgü değişiklikler
Nesne algılama ve izleme
Uygulamanızda nesne sınıflandırması kullanılıyorsa yeni SDK'nın, algılanan nesneler için sınıflandırma kategorisini döndürme şeklini değiştirdiğini unutmayın.
VisionObject içindeki VisionObjectCategory, tam sayı yerine ObjectLabel nesnesinde text olarak döndürülür. Olası tüm dize kategorileri DetectedObjectLabel enum'una dahil edilir.
.unknown kategorisinin kaldırıldığını unutmayın. Bir nesnenin sınıflandırılmasıyla ilgili güven düzeyi düşük olduğunda sınıflandırıcı hiçbir etiket döndürmez.
Eski ve yeni SWIFT kodu örneğini aşağıda bulabilirsiniz:
Önceki
if (object.classificationCategory == .food) {
...
}Yeni
if let label = object.labels.first {
if (label.text == DetectedObjectLabel.food.rawValue) {
...
}
}
// or
if let label = object.labels.first {
if (label.index == DetectedObjectLabelIndex.food.rawValue) {
...
}
}Eski ve yeni Objective-C koduna ilişkin bir örneği aşağıda bulabilirsiniz:
Önceki
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}Yeni
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}Firebase bağımlılıklarını kaldırma
Taşıma işleminden sonra Firebase bağımlılıklarını kaldırın. Şu adımları uygulayın:
- Firebase yapılandırma dosyasını, uygulamanızın dizinindeki ve Xcode projenizdeki
GoogleService-Info.plistdosyasını silerek kaldırın. - Podfile'ınızdan
pod 'Firebase/Analytics'gibi Firebase cocoapod'larını kaldırın. - Kodunuzdan
FirebaseApp.configure()gibi FirebaseApp başlatma işlemlerini kaldırın. - Firebase destek sitesindeki talimatlara göre Firebase konsolunda Firebase uygulamanızı silin.
Yardım Alma
Herhangi bir sorunla karşılaşırsanız lütfen topluluk sayfamıza göz atın. Bu sayfada, bizimle iletişime geçebileceğiniz kanallar açıklanmaktadır.