iOS için taşıma

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

APIEski 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 modeller 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ırılmış türlerin ve türlerin aşağıdaki gibi yeniden adlandırılması gerekir:

  • Swift: Sınıf adlarından ve numaralandırmalardan Vision önekini kaldırın
  • Objective-C: Hem FIRVision hem de FIR sınıf adı ve enum ön eklerini MLK ile 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ürYeni sınıf veya tür
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Manuel olarak indirilmesi gerekir. Firebase'de barındırılan uzaktan modeller kullanımdan kaldırıldı. Ayrıntılı bilgi 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ürYeni sınıf veya tür
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Manuel olarak indirilmesi gerekir. Firebase'de barındırılan uzaktan modeller kullanımdan kaldırıldı. Ayrıntılı bilgi 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 giriş noktası sınıfları (Vision, NaturalLanguage) artık mevcut değil. Bunların yerine göreve özel sınıflar kullanıma sunulmuştur. Çeşitli fabrika yöntemleriyle dedektör elde etme çağrılarını, her dedektörün fabrika yöntemine yapılan doğrudan çağrılarla değiştirin.

  • VisionImageMetadata sınıfı ve VisionDetectorImageOrientation enum'u 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ştirilerek imageLabeler(options:) olarak yeniden adlandırıldı.

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

  • type özelliği ImageLabeler'den, entityID özelliği ise resim etiketleme sonucu sınıfı ImageLabel'den kaldırıldı.

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

  • Natural Language API'ler artık "dil kodu" yerine "dil etiketi" (BCP-47 standardında tanımlandığı şekilde) terimini 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 ilişkin 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'unda yer alır.

.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 kodunun bir örneğini 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 dizininden ve Xcode projenizden GoogleService-Info.plist dosyası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 bizimle iletişime geçmek için kullanabileceğiniz kanalları özetlediğimiz topluluk sayfamızı ziyaret edin.