iOS için taşıma

Bu kılavuzda, iOS için Firebase için ML Kiti'nden 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 Kiti, 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 Kiti, 64 bit mimarileri (x86_64 ve arm64) destekler.
  • ML Kit kitaplığı yalnızca cocoapods olarak sağlanır. Framework'leri ve CocoaPods'u birlikte kullanamazsınız. Bu nedenle, bu kitaplığı kullanmak için önce CocoaPods'a geçmeniz gerekir.

Cocoapods'u güncelleme

Uygulamanızın Podfile dosyasında ML Kit iOS CocoaPods bağımlılıklarını güncelleyin:

APIEski kapsül adlarıYeni kapsül adları
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 resim etiketleme (paketlenmiş model) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
AutoML resim etiketleme (model indirildi) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Özel modelleri barındırmak ve indirmek için modellerinizi Cloud Storage'a taşıyın ve uygulamanıza indirme mantığı ekleyerek bunları yerel model olarak yükleyin. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin.
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ıf, enum ve tür adlarını güncelleme

Genel olarak sınıflar, enum'lar ve türler aşağıdaki gibi yeniden adlandırılmalıdır:

  • Swift: Sınıf adlarından ve enum'lardan Vision ön ekini kaldırın.
  • Objective-C: Hem FIRVision hem de FIR sınıf adını ve enum ön eklerini MLK ile değiştirin.

Bu genel kural, bazı sınıf adları ve türleri için geçerli değildir:

Swift

Eski sınıf veya türYeni sınıf veya tür
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Manuel olarak indirilmesi gerekir. Firebase tarafından barındırılan uzak modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin.
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ürYeni sınıf veya tür
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Manuel olarak indirilmesi gerekir. Firebase'de barındırılan uzak modellerin desteği sonlandırıldı. Ayrıntılar için Firebase ML'den Cloud Storage'a geçiş rehberini inceleyin.
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 giriş noktası sınıfları (Vision, NaturalLanguage) artık mevcut değil. Bunların yerini göreve özel sınıflar aldı. Dedektörleri almak için çeşitli fabrika yöntemlerine yapılan çağrıları, her dedektörün fabrika yöntemine yapılan doğrudan çağrılarla değiştirin.

  • VisionImageMetadata sınıfı, VisionDetectorImageOrientation enum ile birlikte kaldırıldı. Bir resmin görüntüleme yönünü belirtmek için VisionImage öğesinin orientation özelliğini kullanın.

  • Yeni bir TextRecognizer örneği alan onDeviceTextRecognizer yöntemi, textRecognizer olarak yeniden adlandırıldı.

  • Güven özelliği, TextElement, TextLine ve TextBlock dahil olmak üzere metin tanıma sonucu sınıflarından kaldırıldı.

  • Yeni bir ImageLabeler örneği almak için kullanılan onDeviceImageLabeler ve onDeviceImageLabeler(options:) yöntemleri birleştirildi ve imageLabeler(options:) olarak yeniden adlandırıldı.

  • Yeni bir ObjectDetector örneği almak için kullanılan objectDetector yöntemi kaldırıldı. Bunun yerine objectDetector(options:) politikasını kullanın.

  • type özelliği ImageLabeler öğesinden, entityID özelliği ise resim etiketleme sonucu sınıfından (ImageLabel) kaldırıldı.

  • Barkod tarama API'si detect(in _:, completion:), diğer görüntü API'leriyle tutarlı olması için process(_:, completion:) olarak yeniden adlandırıldı.

  • Natural Language API'leri artık "dil kodu" yerine "dil etiketi" terimini (BCP-47 standardı tarafından tanımlandığı şekilde) kullanıyor.

  • TranslateLanguage artı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ız nesne sınıflandırması kullanıyorsa yeni SDK'nın, algılanan nesnelerin 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 nesneyi sınıflandırma güveni düşük olduğunda sınıflandırıcı hiçbir etiket döndürmez.

Aşağıda eski ve yeni Swift koduna bir örnek verilmiştir:

Ö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 bir örnek:

Ö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:

  • Uygulamanızın dizininden ve Xcode projenizden GoogleService-Info.plist dosyasını silerek Firebase yapılandırma dosyasını kaldırın.
  • Podfile'ınızdan pod 'Firebase/Analytics' gibi Firebase CocoaPod'larını kaldırın.
  • FirebaseApp.configure() gibi FirebaseApp başlatma işlemlerini kodunuzdan 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 bizimle iletişime geçebileceğiniz kanalları listelediğimiz Topluluk sayfamıza göz atın.